/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Mobility Components.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
//include("product.qtx")
//include("extrafunctions.qtt")

//TESTED_COMPONENT=src/sensors/gestures

testcase = {

/*
init: function() {
    qtuitest.checkActiveWindow = false;
    qtuitest.autoTerminate = false;
    wait(500);
    unlock();
    wait(500);
},


cleanup: function() {
    print("Cleanup test function");
    unlock();
    wait(500);
    Gesture.swipe(Screen.leftCenter(), Screen.rightCenter()); //close applicatin
    wait(500);
},
*/

// As a QML Application developer I need to be able to list sensor gesture plugins
    List_Sensor_Gestures: function()
    {
        // Test meta data
        testApplication = "Gesture";
        testBinary = "Gesture"; // Running QML using qmlrunner will insert test app binary name when compiled
        testGoal = "Verify a list of all registered sensor gesture plugins";
        testPreconditions = "Nil.";
        testGroups = "5.0";

      // Test steps
//        mouseClick(findByProperty("label", testBinary)); wait(500);
        prompt(twiki("---+++ " + testApplication + "<br><br>
            *Goal:* " + testGoal + "<br>
            *Pre-Requisites:* " + testPreconditions + "<br>
            *Tested Binary:* " + testBinary + "<br>

            | *Step* | *Verification* |
            | Launch " + testBinary + " | App launches normally |
            | Observe the list of all gestures shown in the top menu | Verify that the expected gestures are displayed |
        "));
    },

// As a QML Application developer I need to be able to select a sensor gesture plugin
    Select_Sensor_Gesture: function()
    {
        // Test meta data
        testApplication = "Gesture";
        testBinary = "Gesture";
        testGoal = "Verify selection of a sensor gesture plugin";
        testPreconditions = "Nil.";
        testGroups = "5.0";

        // Test steps
//        mouseClick(findByProperty("label", testBinary)); wait(500);
        prompt(twiki("---+++ " + testApplication + "<br><br>
           *Goal:* " + testGoal + "<br>
           *Pre-Requisites:* " + testPreconditions + "<br>
           *Tested Binary:* " + testBinary + "<br>

           | *Step* | *Verification* |
           | Launch " + testBinary + " | App launches normally |
           | Select the QtSensors.shake gesture from the gesture list | Verify the QtSensors.shake gesture becomes highlighted and the detection menu now has the title *QtSensors.shake* |
       "));
    },

// As a QML Application developer I need to be able to trigger a sensor gesture plugins
    Trigger_Sensor_Gesture: function()
    {
          // Test meta data
          testApplication = "Gesture";
          testBinary = "Gesture";
          testGoal = "Verify that a sensor gesture is triggered";
          testPreconditions = "Nil.";
          testGroups = "5.0";

          // Test steps
//          mouseClick(findByProperty("label", testBinary)); wait(500);
          prompt(twiki("---+++ " + testApplication + "<br><br>
              *Goal:* " + testGoal + "<br>
              *Pre-Requisites:* " + testPreconditions + "<br>
              *Tested Binary:* " + testBinary + "<br>

              | *Step* | *Verification* |
              | Launch " + testBinary + " | App launches normally |
              | Select the QtSensors.shake gesture from the gesture list and press *start* on the detection menu | Verify that *start* button now reads *stop* and is highlighted |
              | Shake the phone more than 3 times in the X axis | Verify that shake detections are registered |
        "));
    },

// Sensor gestures are not triggered by false positives
    Sensor_Gesture_False_Positives: function()
    {
          // Test meta data
          testApplication = "ShakeIt!";
          testBinary = "ShakeIt!";
          testGoal = "Verify that a sensor gesture doesn't trigger falsely";
          testPreconditions = "Nil.";
          testGroups = "5.0";

          // Test steps
//          mouseClick(findByProperty("label", testBinary)); wait(500);
          prompt(twiki("---+++ " + testApplication + "<br><br>
              *Goal:* " + testGoal + "<br>
              *Pre-Requisites:* " + testPreconditions + "<br>
              *Tested Binary:* " + testBinary + "<br>

              | *Step* | *Verification* |
              | Launch " + testBinary + " | App launches normally |
              | | The display shows* Shake to rotate the triangles* and three tringles are below that |
              | Perform the *Shake* gesture | Verify that *Shake* is displayed and the triangles rotate |
              | | Verify no other gestures register at the same time |
              | Wait for 3 seconds while observing the display | Verify the display now reads *Try another gesture* and the triangles return to the center of the display |
              | Perform the *Slam* gesture | Verify that *Slam* is displayed and the triangles move out from the center of the display |
              | | Verify no other gestures register at the same time |
              | Wait for 3 seconds while observing the display | Verify the display now reads *Try another gesture* and the triangles return to the center of the display |
              | Perform the *Whip* gesture | Verify that the *Whip* is displayed |
              | | Verify no other gestures register at the same time |
              | Wait for 3 seconds while observing the display | Verify the display now reads *Try another gesture* and the triangles return to the center of the display |
              | Perform the *Hover* gesture | Verify that the *hover* is displayed and the triangles move to the top of the display |
              | | Verify no other gestures register at the same time |
              | Wait for 3 seconds while observing the display | Verify the display now reads *Try another gesture* and the triangles return to the center of the display |
              | Perform the *Cover* gesture | Verify that the *Cover* is displayed and the triangles go to the bottom of the display |
              | | Verify no other gestures register at the same time |
              | Wait for 3 seconds while observing the display | Verify the display now reads *Try another gesture* and the triangles return to the center of the display |
              | Perform the *Twist Left* gesture | Verify that the *TwistLeft* is displayed and the triangles move to the left |
              | | Verify no other gestures register at the same time |
              | Wait for 3 seconds while observing the display | Verify the display now reads *Try another gesture* and the triangles return to the center of the display |
              | Perform the *Twist Right* gesture | Verify that the *TwistRight* is displayed and the triangles move to the right |
              | | Verify no other gestures register at the same time |
              | Wait for 3 seconds while observing the display | Verify the display now reads *Try another gesture* and the triangles return to the center of the display |
              | Perform the *Pickup* gesture | Verify that the *Pickup* is displayed |
              | | Verify no other gestures register at the same time |
              | Wait for 3 seconds while observing the display | Verify the display now reads *Try another gesture* and the triangles return to the center of the display |
              | Perform the *Turnover* gesture | Verify that the turnover chime is played |
              | Turn over and wait for 3 seconds while observing the display | Verify the display now reads *Try another gesture* and the triangles return to the center of the display |
              | Perform the *Double Tap* gesture | Verify that the *Double Tap* is displayed |
              | | Verify no other gestures register at the same time |
              | Wait for 3 seconds while observing the display | Verify the display now reads *Try another gesture* and the triangles return to the center of the display |
        "));
    },
}
