/****************************************************************************
**
** 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
Ensure various mp3, wav, ogg, oga, spx and flac audio files available for playback
Ensure a valid m3u file referring to locations where indicated media is available on the device
Ensure the device can ping destinations on the network (if applicable)
Have an audio stream url available (e.g. http://202.6.74.107:8060/triplej.mp3 for example)
Ensure access to Internet available to device either via 3G and WiFi
*/
    initTestCase: function()
    {
    },

    play_an_audio_file_data: {
        mp3:[".mp3", "filename", "mpeg audio layer 3"],
        wav:[".wav", "filename", "waveform audio"],
        ogg:[".ogg", "filename", "container format"],
        vorbis:[".oga", "filename", "audio compression format"],
        speex:[".spx", "filename", "speech audio format"],
        flac:[".flac", "filename", "audio file format"]
    },

    play_an_audio_file: function(extension, filename, format)
    {
        // Test meta data
        testTitle = "Multimedia - Play Audio File";
        testBinary = "player";
        testSource = "$QTDIR/qtmultimedia/examples/player";
        testGoal = "Verify that various Audio files can be played.";
        testPreconditions = "Audio files in " + extension + " format are available on device. Launch the native Music player to populate the playlist before opening BGMPTest.";
        testGroups = "BAT, 5.0";

        // 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 |
            | Verify that the playlist has populated the application | |
            | Select the desired "+filename+extension+" and press play | Verify that the " + format + " file is audible on device |

         "));
    },

    basic_player_controls_for_audio_data: {
        mp3:[".mp3", "filename", "mpeg audio layer 3"],
        wav:[".wav", "filename", "waveform audio"],
        ogg:[".ogg", "filename", "container format"],
        vorbis:[".oga", "filename", "audio compression format"],
        speex:[".spx", "filename", "speech audio format"],
        flac:[".flac", "filename", "audio file format"]
    },

    basic_player_controls_for_audio: function(extension, filename, format)
    {
        // Test meta data
        testTitle = "Multimedia - Audio Player Controls";
        testBinary = "player";
        testSource = "$QTDIR/qtmultimedia/examples/player";
        testGoal = "Verify basic API for controlling audio playback ";
        testPreconditions = "a test "+extension+" file is available on device";
        testGroups = "BAT, 5.0";

        // 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 the desired "+filename+extension+" in playlist and press [Play] | Verify that file plays properly from the start |
            | | Verify that the correct track details are displayed in the playlist |
            | Select [Pause] | Verify that file has paused |
            | Select [Play] | Verify that file continues to play properly from where previously paused. |
            | | Verify that the progress bar tracks the progression of the file playback |
            | Select [Next] control | Verify that next file in playlist is playing from start |
            | | Verify that the correct playlist title is highlighted and that the details are correct to reflect the selected audio track |
            | Select [Stop] control | Verify that file has stopped playing |
            | Select [Play] | Verify that file continues to play from start of file. |
            | With file playing, verify that UI volume control slider can change volume up and down | |
            | Select volume at 50% (or thereabout) | |
            | Select [Mute] | Verify that sound is muted while file is playing |
            | | Verify that [Mute] control is displaying the Muted icon |
            | Select [Mute] control again | Verify that sound has reverted back to level selected prior to muting |
            "));
    },

    hardware_volume_controls_for_audio_data: {
        mp3:[".mp3", "filename", "mpeg audio layer 3"],
        wav:[".wav", "filename", "waveform audio"],
        ogg:[".ogg", "filename", "container format"],
        vorbis:[".oga", "filename", "audio compression format"],
        speex:[".spx", "filename", "speech audio format"],
        flac:[".flac", "filename", "audio file format"]
    },

    hardware_volume_controls_for_audio: function(extension, filename, format)
    {
        // Test meta data
        testTitle = "Multimedia - Audio Player Controls";
        testBinary = "player";
        testSource = "$QTDIR/qtmultimedia/examples/player";
        testGoal = "Verify hardware volume control of audio playback ";
        testPreconditions = "a test "+extension+" file is available on device";
        testGroups = "BAT, 5.0";

        // 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 the desired "+filename+extension+" in playlist and press [Play] | Verify that file plays properly from the start |
            | Press the hardware volume keys to increase the volume to the maximum | Verify that the device now plays at maximum volume |
            | Using hardware volume keys, select volume at about 50% | Verify that the device is now playing at about 50% volume |
            | Using hardware keys, take volume down to 0% | Verify that sound is muted while file is playing |
            | Using hardware keys, increase volume | Verify that sound is once again playing from device |
            "));
    },


    basic_playlist_controls_for_audio_data: {
        mp3:[".mp3", "filename", "mpeg audio layer 3"],
        wav:[".wav", "filename", "waveform audio"],
        ogg:[".ogg", "filename", "container format"],
        vorbis:[".oga", "filename", "audio compression format"],
        speex:[".spx", "filename", "speech audio format"],
        flac:[".flac", "filename", "audio file format"]
    },

    basic_playlist_controls_for_audio: function(extension, filename, format)
    {
        // Test meta data
        testTitle = "Multimedia - Audio Player Controls";
        testBinary = "player";
        testSource = "$QTDIR/qtmultimedia/examples/player";
        testGoal = "Verify basic API for controlling playlist playback ";
        testPreconditions = "a test "+extension+" file is available on device";
        testGroups = "BAT, 5.0";

        // 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 'Sequential' as the Play Mode |  |
            | Select the desired "+filename+extension+" in playlist and press [Play] | Verify that file plays properly from the start |
            | | Verify that the correct track details are displayed in the playlist |
            | Select [Next] | Verify that the next file in the playlist is highlighted |
            |  | Verify that the correct audio file is being played from the beginning of the track |
            |  | Verify that there are no audible artifacts or undue lag during this change of track |
            | After some time (10-20 sec), select [Prev] icon | Verify that the previous file in the playlist is being played from start |
            | Let file play till end | Verify player continues playing the next file in the playlist window |
            | After some arbitrary time, Select [Stop] | |
            | Select [Next File] control | Verify that next file in playlist is highlighted |
            | | Verify that file is not automatically playing |
            | Select [Prev] control | Verify that previous file in playlist is highlighted |
            | Select file in playlist | Verify that file plays in player. |
            | Select number of files greater than can be displayed without scrolling in to playlist | Verify that list can be scrolled through |
            | Navigate to the last file in the playlist and select [Next] | Verify that no other track is played |
            | Select 'Loop' as the Play Mode | |
            | Select [Next] | Verify that the next song played is the first song in the playlist |
            | While first song is playing select [Prev] | Verify that the last song in the playlist is now playing |
            | Select [current Loop] from Play Mode | Verify that the same song now plays in a loop |
            | | Verify that selecting [Prev] or [Next] has no effect on the tune played |
            | Select [Current Only] in the Play Mode | Verify that only the selected song plays and stops at the end |
            | Select [Shuffle] | Verify that the playlist is now shuffled in a random fashion |
            | Select [Shuffle] again | Verify that the playlist is again shuffled in a random fashion |
            | Select [Reset] | Verify that the playlist is now back to its original order |
         "));

    },

    seek_controls_for_audio_data: {
        mp3:[".mp3", "filename", "mpeg audio layer 3"],
        wav:[".wav", "filename", "waveform audio"],
        ogg:[".ogg", "filename", "container format"],
        virbis:[".oga", "filename", "audio compression format"],
        speex:[".spx", "filename", "speech audio format"],
        flac:[".flac", "filename", "audio file format"]
    },

    seek_controls_for_audio: function(extension, filename, format)
    {
        // Test meta data
        testTitle = "Multimedia - Audio Seek Controls";
        testBinary = "AudioPlayer";
        testSource = "$QTDIR/qtmultimedia/examples/player";
        testGoal = "Verify FastForward and Rewind functionality of the API";
        testPreconditions = "a test "+extension+" file is available on device";
        testGroups = "BAT, 5.0";

        // 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 [Play] to play the file | |
            | Click on the [Move Forward] control | Verify that file playback has moved forward 5 seconds |
            | Select [Pause] | Verify that the  file has paused the playback |
            | Click on the [Move Forward] control | Verify that the file has moved 5 seconds forward, but is still paused |
            | Select [Play] | Verify that file is now playing from new position |
            | Click on the [Move Backwards] control | Verify that file playback has moved back 5 seconds |
            | Select [Pause] | Verify that the  file has paused the playback |
            | Click on the [Move Backwards] control | Verify that the file has moved 5 seconds backwards, but is still paused |
            | Select [Play] | Verify that file is now playing from new position |
      "));
    },



    basic_controls_for_streamed_audio_content: function()
    {

//*Note* For this test you need a playlist of streaming media urls. Suggest: http://202.6.74.107:8060/triplej.mp3 ; http://www.abc.net.au/streaming/triplej.asx ; rtsp://media1.abc.net.au/broadcast/triplej.rm ; mms://media3.abc.net.au/triplej ; depending on your platform and backend support.

        // Test meta data
        testTitle = "Multimedia - Content Streaming";
        testBinary = "player";
        testSource = "$QTDIR/qtmultimedia/examples/player";
        testGoal = "Verify playback of streaming audio media";
        testPreconditions = "";
        testGroups = "BAT, 5.0";

        // 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 |
           | In player application, Select or Tap [Open] | |
           | In [Open File] navigate and highlight test (streaming) playlist file | |
           | Select or Tap on selected file to return to player UI | Verify selected file has populated playlist |
           | Highlight file in playlist by selecting or clicking it | |
           | Select [Play] | Verify that stream is playing on device |
           | Select [Pause] | Verify that stream is paused on device |
           | | Verify that the [Pause] button has changed to a [Play] button |
           | Select [Play] again | Verify that stream is playing on device |
           | Select [Stop] | |
           | Open local mp3 file in to play list and select it to play | Verify that the mp3 plays while the stream name is still present in the playlist |
           | Re-select the stream in the playlist | Verify that the stream starts playing again |
           | Select [Next File] | Verify that the player started playing the next file in the playlist |
           | Select [Previous File] | Verify that the original stream is playing again |
           | During stream playback, have headphones connected to device | Verify that the sound is now playing through the headphones |
           | Invoke a system notification on the device (such as an incoming SMS) | Verify that the device correctly transmits the audible system notification through the devices speakers and then returns to playing the stream through the headphones |
        "));
    },


    play_sound_effects: function()
    {

      // Test meta data
      testTitle = "Multimedia - SoundEffects Playback";
      testBinary = "player";
      testSource = "$QTDIR/qtmultimedia/examples/player";
      testGoal = "Verify playback of sound effects.";
      testPreconditions = "";
      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 + " | Verify app launches normally |
         | play soundeffect | Verify that a sound effect is audible |
         | Close application | Verify that the application closes without issues |
        "));
    },

    change_volume_of_sound_effects: function()
    {

      // Test meta data
      testTitle = "Multimedia - SoundEffects Playback";
      testBinary = "player";
      testSource = "$QTDIR/qtmultimedia/examples/player";
      testGoal = "Change volume of sound effects.";
      testPreconditions = "";
      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 + " | Verify app launches normally |
         | Set volume of device to maximum | Verify that sound effect now plays at maximum volume |
         | Set volume of device to about 50% volume | Verify that the sound effect now plays at half volume |
         | Set volume of device to minimum | Verify that there is now no audio from device when sound effect is played |
         | Close application | Verify that the application closes without issues |
        "));
    },


    play_sound_effects_over_compressed_audio: function()
    {

        // Test meta data
        testTitle = "Multimedia - SoundEffects Playback";
        testBinary = "player";
        testSource = "$QTDIR/qtmultimedia/examples/player";
        testGoal = "Verify playback of sound effects over audio track.";
        testPreconditions = "player application to provide background playback";
        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 player, start playback of playlist | Audio should be heard from the device |
            | Swipe to background player | Audio should still be heard from player |
            | Launch " + testBinary + " | Verify app launches normally |
            | Touch red rectangle | Verify that a sound effect is audible together with the background track |
            | Touch blue rectangle | Verify that a sound effect is audible together with the background track |
            | Touch green rectangle | Verify that a sound effect is audible together with the background track |
            | Touch yellow rectangle | Verify that a sound effect is audible together with the background track |
            | Touch a combination of rectangles in quick succession | Verify that sound effects trigger on each touch and that the background track can still be heard |
            | Close application | Verify that the application closes without issues |
            |  | Verify that player is still playing audio tracks |
        "));
    }
}
