/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd and/or its subsidiary(-ies).
** 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$
**
****************************************************************************/

//TESTED_COMPONENT=src/multimedia

testcase = {

/* Notes
*/
    initTestCase: function()
    {
    },

    take_a_photo: function()
    {
        // Test meta data
        testTitle = "Multimedia - Still Camera";
        testBinary = "camera";
        testSource = "qt5/qtmultimedia/examples/camera"
        testGoal = "Verify that a photo can be taken with the camera.";
        testPreconditions = "None";
        testGroups = "BAT, 1.2";

        // Test steps
        prompt(twiki("---+++ " + testTitle + "<br><br>
            *Goal:* " + testGoal + "<br>
            *Pre-Requisites:* " + testPreconditions + "<br>
            *Tested Binary:* " + testBinary + "<br>

            | *Step* | *Verification* |
            | Launch " + testTitle + " | App launches normally |
            | If device has lens cover, make sure it is open | |
            | Select Image tab to put camera in still mode | Verify the intended scene is reproduced in the preview pane/viewfinder |
            | Select Capture Photo | Verify that image is shown on screen for preview |
            | | Verify that a new file is in the Images folder and accessible with the image viewer |
            | Select given image | Verify that it is a true representation of the intended screen |
            | | Verify the image has no unintended artifacts and noise and is properly formatted |
        "));
    },

    change_camera_settings: function()
    {
        // Test meta data
        testTitle = "Multimedia - Still Camera, Change Settings";
        testBinary = "camera";
        testSource = "qt5/qtmultimedia/examples/camera"
        testGoal = "Verify that the camera can change its Still Camera settings successfully.";
        testPreconditions = None";
        testGroups = "BAT, 1.2";

        // Test steps
        prompt(twiki("---+++ " + testTitle + "<br><br>
        *Goal:* " + testGoal + "<br>
        *Pre-Requisites:* " + testPreconditions + "<br>
        *Tested Binary:* " + testBinary + "<br>

            | *Step* | *Verification* |
            | Launch " + testBinary + " | App launches normally |
            | If device has lens cover, make sure it is open | |
            | Select the primary camera device from Menu/Devices | Verify the viewfinder is displaying the scene from the main camera device |
            | Select Capture Photo | Verify that a photo was taken and that a preview image is shown on screen |
            | Select the secondary camera device from Menu/Devices | Verify the viewfinder is displaying the scene from the secondary camera device |
            | Select Capture Photo | Verify that a photo was taken from the secondary camera device and that a preview image is shown on screen |
            | Change Exposure Compensation on the slider in the main UI | Verify that the change in value affects the picture quality in expected fashion |
            | Select Settings/File/Settings | Verify that you have an option to change Image Resolution, Image Format and Quality |
            | Change Image Resolution to another supported resolution | Verify that you can take stills with various resolutions |
            | Select Flash always on from the settings menu | Verify that when photo is taken, the flash is always triggered |
            | Select No Flash on from the menu | Verify that despite the lack of natural light, the flash will not trigger when taking photos |
            | Change Image Format to another supported format | Verify that you can take stills with various Image Formats |
            | Select Settings/Device/Secondary Device | Verify that you can see the view from the Front Facing Camera on the viewfinder |
            |  | Verify that you can take still images from the Front Facing Camera |
            | Select Settings/File/Exit | Verify that the application has now closed |

        "));
    },

    take_a_video: function()
    {
        // Test meta data
        testTitle = "Multimedia - Video Camera, Take Video";
        testBinary = "camera";
        testSource = "qt5/qtmultimedia/examples/camera"
        testGoal = "Verify that the camera can capture and save an audio/video file.";
        testPreconditions = "None";
        testGroups = "BAT, 1.2";

        // Test steps
        prompt(twiki("---+++ " + testTitle + "<br><br>
            *Goal:* " + testGoal + "<br>
            *Pre-Requisites:* " + testPreconditions + "<br>
            *Tested Binary:* " + testBinary + "<br>

            | *Step* | *Verification* |
            | Launch " + testBinary + " | App launches normally |
            | Select Video icon to put camera in video mode | Verify the intended scene is reproduced in the preview/viewfinder |
            | Select Record Video | Verify that video is shown on screen for preview |
            | Select Stop | Verify that the recording has now stopped |
            | | Verify that the video file is available in the camera preview pane |
            | Select given video | Verify that it is a true representation of the intended screen |
            | | Verify the image has no unintended artifacts and noise and is properly formatted |
        "));
    },

    change_video_settings: function()
    {
        // Test meta data
        testApplication = "Multimedia - Video Camera, Change Video Settings";
        testBinary = "camera";
        testSource = "qt5/qtmultimedia/examples/camera"
        testGoal = "Verify that the camera can change its Video settings successfully.";
        testPreconditions = "None";
        testGroups = "BAT";

        // Test steps
        prompt(twiki("---+++ " + testTitle + "<br><br>
             *Goal:* " + testGoal + "<br>
            *Pre-Requisites:* " + testPreconditions + "<br>
            *Tested Binary:* " + testBinary + "<br>

            | *Step* | *Verification* |
            | Launch " + testBinary + " | App launches normally |
            | If device has lens cover, make sure it is open | |
            | Select Video tab to put camera in video mode | Verify the intended scene is reproduced in the preview/viewfinder |
            | In the Menu Bar, select Settings/Devices | Verify that you can select Primary and Secondary Camera on Device |
            | Select Secondary Camera | Verify that devise is now showing video stream from Front Facing camera |
            | Select Settings/File/Settings | Verify that you now have the option to select Audio Codecs, Resolution Sample Rate, Framerate, Quality, Video Codecs and Container Format |
            | Change Audio Codecs to another supported Codecs | Verify that camera can record |
            | Change Resolution to another supported Resolution | Verify that camera can record |
            | Change Sample Rate to another supported Sample Rate | Verify that camera can record |
            | Change Framerate to another supported Framerate | Verify that camera can record |
            | Change Quality | Verify that camera can record |
            | Change Video Codecs to another supported Video Codecs | Verify that camera can record |
            | Change Container Format | Verify that camera can record |
            | Change Quality | Verify that camera can record |
        "));
    },
}
