/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $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=qtdeclarative

testcase = {

    using_section_delegates: function()
    {
        // Test Meta-data
        testTitle = "Using and changing section delegate properties";
        testBinary = "sections.qml";
        testSource: "$QTDIR/qtdeclarative/tests/system/listview";
        testGoal = "Verify that a Component can be set as a section header, using various properties for different collections.";
        testPreconditions = "None";
        testGroups = "BAT,QtQuick 2.0";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run '+testBinary+' | Application has started, showing a ListView |
    | | The view shows a single character section header for each element |
    | Press the Criteria button | The section headers now show the full name of each item |
    | Press Property | The section headers now show the id value for the items |
    | Press Criteria | The section headers now only show i - the first character of id |
    | Press Property | The section headers show the first character of the item names |'));
    },

    updating_sections: function()
    {
        // Test Meta-data
        testTitle = "Updating Collected Sections";
        testBinary = "sections.qml";
        testSource: "$QTDIR/qtdeclarative/tests/system/listview";
        testGoal = "Verify that a section is updated when items are added.";
        testPreconditions = "None";
        testGroups = "BAT,QtQuick 2.0";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run '+testBinary+' | Application has started, showing a ListView |
    | | The view shows a single character section header for each element |
    | Press the + button | A duplicate of every name is added |
    |  | Each duplicate is place in the same section as the original |'));
    },

    changing_section_delegates: function()
    {
        // Test Meta-data
        testTitle = "Changing Section Delegates";
        testBinary = "sections.qml";
        testSource: "$QTDIR/qtdeclarative/tests/system/listview";
        testGoal = "Verify that a section delegate can be changed.";
        testPreconditions = "None";
        testGroups = "BAT,QtQuick 2.0";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run '+testBinary+' | Application has started, showing a ListView |
    | | The view shows a single character section header for each element |
    | Press the Delegate button | The section headers now show as light blue rectangles |
    | Press the Criteria button | The headers show as full names, still within light blue rectangles |'));
    },

    altering_listview_primary_properties: function()
    {
        // Test Meta-data
        testTitle = "Altering ListView primary properties";
        testBinary = "alteredViews.qml";
        testSource: "$QTDIR/qtdeclarative/tests/system/listview";
        testGoal = "Verify that the model and delegate for a ListView can be changed";
        testPreconditions = "None";
        testGroups = "BAT,QtQuick 2.0";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run '+testBinary+' | Application has started, showing a ListView |
    | | The view shows items named Model1_1 - 5, and the delegates are white with a black border |
    | Press the Mod button | The view now shows items named Model2_1 - 5 |
    | Press Del | The delegates are now golden with a black border |
    | Press Mod, then Del | The view again shows items named Model1_1 - 5, and are white |'));
    },

    altering_listview_orientation: function()
    {
        // Test Meta-data
        testTitle = "Altering ListView orientation";
        testBinary = "alteredViews.qml";
        testSource: "$QTDIR/qtdeclarative/tests/system/listview";
        testGoal = "Verify that the orientation of a listview can be changed at runtime";
        testPreconditions = "None";
        testGroups = "BAT,QtQuick 2.0";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run '+testBinary+' | Application has started, showing a ListView |
    | | The view shows items named Model1_1 - 5, and the delegates are white with a black border |
    | Press the Ori button | The view is now displayed in a horizontal orientation |
    |  | The delegates should have resized quickly and smoothly, and the text rotated anticlockwise (both animated) |
    | Press Del | The delegates are now golden with a black border, still in horizontal orientation |
    | Press Ori | The view again shows in a vertical orientation, with the golden delegates |'));
    },

    basic_view_transition: function()
    {
        // Test Meta-data
        testTitle = "Basic View Transitions";
        testBinary = "viewTransitions.qml";
        testSource: "$QTDIR/qtdeclarative/tests/system/listview";
        testGoal = "Verify a basic transition can be applied to a ListView action";
        testPreconditions = "None";
        testGroups = "BAT,QtQuick 2.0";
        testRequirements = "QTBUG-21504: Enable transitions for add/move/remove operations on views";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run '+testBinary+' | Application has started, showing a ListView |
    | Press the Set A button | The Set A button shows green |
    | Press Add | A new yellow item fades in after the currently selected item |
    |  | The other items slide down, with a slight delay for each item, giving it a flowing effect |
    | Select the new item | |
    | Press To Top | The item changes to light blue and moves to the top, curving out to the right of the ListView |
    | Select an item near the top and press Remove | The selected item fades out |
    |  | The other items slide up, with a slight delay for each item, giving it a flowing effect |'));
    },

    switching_view_transition: function() {
        // Test Meta-data
        testTitle = "Switching View Transitions";
        testBinary = "viewTransitions.qml";
        testSource: "$QTDIR/qtdeclarative/tests/system/listview";
        testGoal = "Verify a basic ListView transition can be changed to another";
        testPreconditions = "None";
        testGroups = "BAT,QtQuick 2.0";
        testRequirements = "QTBUG-21504: Enable transitions for add/move/remove operations on views";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run '+testBinary+' | Application has started, showing a ListView |
    | Press the Set A button | The Set A button shows green |
    | Press Add | A new yellow item fades in after the currently selected item |
    |  | The other items slide down, with a slight delay for each item, giving it a flowing effect |
    | Select the new item | |
    | Press To Top | The item changes to light blue and moves to the top, curving out to the right of the ListView |
    | Select an item near the top and press Remove | The selected item fades out |
    |  | The other items slide up, with a slight delay for each item, giving it a flowing effect |
    | Press the Set B button | The Set B button shows green |
        | Press Add | A new yellow item pops in after the currently selected item |
    |  | The other items tumble down in a disorderly manner |
    | Select the new item | |
    | Press To Top | The item changes from red to light blue and curves out to the right of the ListView, bouncing in at the top |
    | Select an item near the top and press Remove | The selected item pops out |
    |  | The other items slide up, with a slight delay for each item, giving it a flowing effect |'));
    },

    different_transitions_for_every_operation: function() {
        // Test Meta-data
        testTitle = "Different Transitions for all Operations";
        testBinary = "viewTransitions.qml";
        testSource: "$QTDIR/qtdeclarative/tests/system/listview";
        testGoal = "Verify a different Transition can be applied to displacement from adding, moving and removing.";
        testPreconditions = "None";
        testGroups = "BAT,QtQuick 2.0";
        testRequirements = "QTBUG-21504: Enable transitions for add/move/remove operations on views";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run '+testBinary+' | Application has started, showing a ListView |
    | Press the Set C button | The Set C button shows green |
    | Press Add | A new yellow item swoops in from the side |
    |  | The other items jitter down, with a slight delay for each item |
    | Select the new item | |
    | Press To Top | The item changes from red to light blue and moves to the top, curving out to the right of the ListView |
    | | The other items bounce down in a solid block |
    | Select an item near the top and press Remove | The selected item fades out in a flashing manner |
    |  | The other items snap up, with a slight delay for each item |
    | Press the Append button a few times | Each added item swoops in from alternating sides | '));
    },

    delegates_and_effects: function() {
        testTitle = "Delegates and effects";
        testBinary = "viewTransitions.qml";
        testSource: "$QTDIR/qtdeclarative/tests/system/listview";
        testGoal = "Verify a delegate in transition can show effects.";
        testPreconditions = "None";
        testGroups = "BAT,QtQuick 2.0";
        testRequirements = "QTBUG-21504: Enable transitions for add/move/remove operations on views";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run '+testBinary+' | Application has started, showing a ListView |
    | Press the Set D button | The Set D button shows green |
    | Select a lower item | The item is highlighted |
    | Press To Top | The item fades to red particles, shifts to the top, and fades back to a normal delegate |
    | | The other items shuffle down |'));
    },

    attached_onremove_property: function() {
        testTitle = "Using the attached onRemove property";
        testBinary = "onRemove.qml";
        testSource: "$QTDIR/qtdeclarative/tests/system/listview";
        testGoal = "Verify the onRemove attached property can be assigned.";
        testPreconditions = "None";
        testGroups = "BAT,QtQuick 2.0";
        testRequirements = "QTBUG-21504: Enable transitions for add/move/remove operations on views";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run '+testBinary+' | Application has started, showing a ListView |
    | Press the <b>-</b> button | The selected item disappears in a shower of sparks |'));
    }
}
