/****************************************************************************
**
** 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/textedit.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/textedit.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/textedit.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_text: function()
  {
       // Test meta data
       testTitle = "Text Selection";
       testBinary = "qmlscene tests/testapplications/text/text.qml";
       testGoal = "Verify text can be selected via various methods";
       testPreconditions = "None";
       testGroups = "BAT";

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

    | *Step* | *Verification* |
    | Execute '+testBinary+' | "The TextInput item displays an editable line of text." is displayed |
    | Select the Text: Short option | "Hello World" is shown |
    | Press the Select Word button | World is selected |
    | Press the Select All button | Hello World is selected |
    | Press the Select None button | No text is selected |
    | Select the Mouse: On option | |
    | Drag over some text | Only that text is selected. On a touchscreen only device the virtual keyboard may show |
    | Select the Mouse: Off option | |
    | Press the Select None button | No text is selected |
    | Drag over some text | No text is selected. On a touchscreen only device the virtual keyboard may show | '));
  },

  cut_copy_and_paste: function()
  {
      // Test meta data
      testTitle = "Cut, copy and paste";
      testBinary = "qmlscene tests/testapplications/text/textedit.qml";
      testGoal = "Verify selected text can be copied/cut to the clipboard, and returned";
      testPreconditions = "None";
      testGroups = "BAT";

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

    | *Step* | *Verification* |
    | Execute '+testBinary+' | "The TextInput item displays an editable line of text." is displayed |
    | Select the Text: Short option | "Hello World" is shown |
    | Press the Select All button | Hello World is selected |
    | Press the Copy Button | |
    | Tap at the end of the text | Text is no longer selected, cursor is at the text end |
    | Press the Paste Button | "Hello WorldHello World" is shown  |
    | Press the Select Word button | World is highlighted |
    | Press the Cut button | World is removed from the text |
    | Press the Paste button | "Hello WorldHello World" is shown | '));
  },

  activate_links: function()
  {
      // Test meta data
      testTitle = "Link Activation";
      testBinary = "qmlscene tests/testapplications/text/textedit.qml";
      testGoal = "Verify http links in text can be activated";
      testPreconditions = "None";
      testGroups = "BAT";

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

    | *Step* | *Verification* |
    | Execute '+testBinary+' | "The TextInput item displays an editable line of text." is displayed |
    | Select the Text: Links option | "This is a link..." is shown |
    | Tap on the "Qt Docs" text | The border around the TextEdit will become red | '));
  }

}
