/****************************************************************************
**
** 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 = {

    text_formatting_data: {
        // Text type, autotext, plain text, rich text, styled text
        BasicText: ["Basic","plain, unformatted red text","plain, unformatted red text","plain, unformatted red text","plain, unformatted red text"],
        Rich: ["Rich","bold style","surrounding b,/b tags and no formatting","bold style","bold style"]
    },

    text_formatting: function(texttype,autoformat,plainformat,richformat,styledformat) {
        // Test Meta-data
        testTitle = "Text Formats";
        testBinary = "qmlscene tests/testapplications/text/text.qml";
        testGoal = "Verify that text shows correctly when displayed in different formats";
        testPreconditions = "None";
        testGroups = "BAT";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run ' + testBinary + ' | Verify that the Text application is displayed |
    | Select Text: '+texttype+', Format: AutoText controls | A single line of text is shown |
    | | Qt Quick should be rendered with '+autoformat+' |
    | Select the Wrap: Word option | A block of text is shown |
    | Select the Format: PlainText option | Qt Quick should be shown with '+plainformat+' |
    | Select the Format: RichText option | Qt Quick should be shown with '+richformat+' |
    | Select the Format: StyledText option | Qt Quick should be shown with '+styledformat+' |'));
    },

    text_wrapping_data: {
        // Text type, No wrap, word wrap, wrap anywhere, auto wrap
        Basic: ["Basic",
            "two lines, wrapped at the newline (Qt Quick consists...)",
            "many lines, with no broken words",
            "many lines, words broken at the text boundary",
            "many lines, with no broken words"],
        Long: ["Long",
            "one lone line",
            "two lines, wrapped at the - (topboxesand...),",
            "many lines, wrapped at the boundary",
            "many lines, wrapped at the boundary, and specifically the - in set-top"],
        Rich: ["Rich",
            "two lines, wrapped at the break (Qt Quick consists...)",
            "many lines, with no broken words",
            "many lines, words broken at the text boundary",
            "many lines, with no broken words"]
    },

    text_wrapping: function(texttype,noWrap,wordWrap,anywhereWrap,autoWrap) {
        // Test Meta-data
        testTitle = "Wrap Modes";
        testBinary = "qmlscene tests/testapplications/text/text.qml";
        testGoal = "Verify that text wraps correctly with different wrap methods and text formats";
        testPreconditions = "None";
        testGroups = "BAT";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run ' + testBinary + ' | Verify that the Text application is displayed |
    | Select Text: '+texttype+', Format: AutoText controls | Verify '+noWrap+' is displayed |
    | Select the Wrap: Word option | Verify '+wordWrap+' is displayed |
    | Select the Wrap: Anywhere option | Verify '+anywhereWrap+' is displayed |
    | Select the Wrap: Auto option | Verify '+autoWrap+' is displayed |'));
    },

    text_styling_data: {
        // Text type
        Basic: ["Basic"],
        Long: ["Long"],
        Rich: ["Rich"]
    },

    text_styling: function(texttype) {
        // Test Meta-data
        testTitle = "Style Effects";
        testBinary = "qmlscene tests/testapplications/text/text.qml";
        testGoal = "Verify that styling (underline, strikeout etc) works as intended";
        testPreconditions = "None";
        testGroups = "BAT";

        // Test Steps
        prompt(twiki('---+++ ' + testTitle + '<br><br>
        *Goal:* ' + testGoal + '<br>
        *Pre-Requisites:* ' + testPreconditions + '<br>
        *Tested Binary:* ' + testBinary + '<br>
    | *Step* | *Verification* |
    | Run ' + testBinary + ' | Verify that the Text application is displayed |
    | Select Text: '+texttype+', Wrap: WordWrap | Verify the text is displayed, wrapped if necessary |
    | Select the U_Line: On option | Verify an underline is drawn under each character |
    | Select the Strike: On option | Verify a strikethrough is drawn through each character |
    | Select the Style: Outline option | Verify each character is red and has a green outline around it |
    | Select the SColor: Blue option | Verify each character is red and has a blue outline around it |
    | Select the Style: Raised option | Verify each character is red and has a blue shadow behind and below it |
    | Select the Style: Sunken option | Verify each character is red and has a blue shadow behind and above it |'));
    }
}