From f57967aa847ccd0abda13c538ed7e384e6540476 Mon Sep 17 00:00:00 2001 From: Damian Jansen Date: Tue, 25 Oct 2011 13:39:44 +1000 Subject: [PATCH] Text system tests Basic tests for the QtQuick Text element Change-Id: I25156055867d9fd4aa6b0b1bad789444894b7960 Reviewed-by: Daniel Kovacic Reviewed-by: Natalia Shubina --- tests/system/sys_text.qtt | 145 ++++++++++ tests/testapplications/text/Button.qml | 59 ++++ tests/testapplications/text/ControlView.qml | 65 +++++ tests/testapplications/text/text.qml | 289 ++++++++++++++++++++ 4 files changed, 558 insertions(+) create mode 100644 tests/system/sys_text.qtt create mode 100644 tests/testapplications/text/Button.qml create mode 100644 tests/testapplications/text/ControlView.qml create mode 100644 tests/testapplications/text/text.qml diff --git a/tests/system/sys_text.qtt b/tests/system/sys_text.qtt new file mode 100644 index 0000000000..0b31688089 --- /dev/null +++ b/tests/system/sys_text.qtt @@ -0,0 +1,145 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $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 + '

+ *Goal:* ' + testGoal + '
+ *Pre-Requisites:* ' + testPreconditions + '
+ *Tested Binary:* ' + testBinary + '
+ | *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 + '

+ *Goal:* ' + testGoal + '
+ *Pre-Requisites:* ' + testPreconditions + '
+ *Tested Binary:* ' + testBinary + '
+ | *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 + '

+ *Goal:* ' + testGoal + '
+ *Pre-Requisites:* ' + testPreconditions + '
+ *Tested Binary:* ' + testBinary + '
+ | *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 |')); + } +} \ No newline at end of file diff --git a/tests/testapplications/text/Button.qml b/tests/testapplications/text/Button.qml new file mode 100644 index 0000000000..95252bfab2 --- /dev/null +++ b/tests/testapplications/text/Button.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +MouseArea { + property string buttontext: "" + width: parent.width / 4 + height: parent.height - 4 + Rectangle { + anchors.fill: parent + radius: 5 + color: "lightgray" + border.color: "black" + } + Text { + anchors.centerIn: parent + text: buttontext + color: "black" + } +} \ No newline at end of file diff --git a/tests/testapplications/text/ControlView.qml b/tests/testapplications/text/ControlView.qml new file mode 100644 index 0000000000..a3a4a70507 --- /dev/null +++ b/tests/testapplications/text/ControlView.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +ListView { + id: controlviewitem + property string controlname: "" + property variant controlvalue + signal reset + height: 40; width: 200; highlightRangeMode: ListView.StrictlyEnforceRange + orientation: ListView.Horizontal; snapMode: ListView.SnapOneItem + preferredHighlightBegin: 50; preferredHighlightEnd: 150; + delegate: Rectangle { height: 40; width: 100; border.color: "black" + Text { anchors.centerIn: parent; width: parent.width; text: model.name; elide: Text.ElideRight; horizontalAlignment: Text.AlignHCenter } } + header: headfoot + footer: headfoot + Component { + id: headfoot + Rectangle { + MouseArea { id: resetbutton; anchors.fill: parent; onClicked: { reset(); } } + color: "lightgray"; height: 40; width: 50; border.color: "gray" + Text { id: headertext; anchors.centerIn: parent; wrapMode: Text.WrapAnywhere + rotation: -40; text: controlviewitem.controlname; font.pixelSize: 12; horizontalAlignment: Text.AlignHCenter } + } + } +} \ No newline at end of file diff --git a/tests/testapplications/text/text.qml b/tests/testapplications/text/text.qml new file mode 100644 index 0000000000..28166c962c --- /dev/null +++ b/tests/testapplications/text/text.qml @@ -0,0 +1,289 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + height: 360; width: 640 + + Connections { target: pointvalue; onReset: { textelement.font.pointSize = 12 } } + + Item { + id: textpanel + height: 360 + width: 440 + Text { + id: textelement + height: parent.height - 20; width: parent.width - 20 + anchors.centerIn: parent + + text: { textvalue.model.get(textvalue.currentIndex).value } + textFormat: { formatvalue.model.get(formatvalue.currentIndex).value } + color: { colorvalue.model.get(colorvalue.currentIndex).value } + elide: { elidevalue.model.get(elidevalue.currentIndex).value } + font.bold: { boldvalue.model.get(boldvalue.currentIndex).value } + font.italic: { italicsvalue.model.get(italicsvalue.currentIndex).value } + font.capitalization: { capsvalue.model.get(capsvalue.currentIndex).value } + font.family: { familyvalue.model.get(familyvalue.currentIndex).value } + font.strikeout: strikeoutvalue.currentIndex + font.underline: underlinevalue.currentIndex + font.letterSpacing: { lspacingvalue.model.get(lspacingvalue.currentIndex).value } + font.wordSpacing: { wspacingvalue.model.get(wspacingvalue.currentIndex).value } + font.weight: { weightvalue.model.get(weightvalue.currentIndex).value } + font.pointSize: { pointvalue.model.get(pointvalue.currentIndex).value } + font.pixelSize: { pixelvalue.model.get(pixelvalue.currentIndex).value } + horizontalAlignment: { halignvalue.model.get(halignvalue.currentIndex).value } + verticalAlignment: { valignvalue.model.get(valignvalue.currentIndex).value } + wrapMode: { wrapvalue.model.get(wrapvalue.currentIndex).value } + maximumLineCount: { maxlinevalue.model.get(maxlinevalue.currentIndex).value } + lineHeight: { lineheightvalue.model.get(lineheightvalue.currentIndex).value } + lineHeightMode: { lineheightmodevalue.model.get(lineheightmodevalue.currentIndex).value } + smooth: { smoothvalue.model.get(smoothvalue.currentIndex).value } + style: { stylevalue.model.get(stylevalue.currentIndex).value } + styleColor: { stylecolorvalue.model.get(stylecolorvalue.currentIndex).value } + + Rectangle{ color: "transparent"; border.color: "green"; anchors.fill: parent } + } + + Text { + id: infopanel + anchors { left: parent.left; leftMargin: 10; bottom: parent.bottom } + height: 150; color: "black"; width: 150 + function elidename() { + switch (textelement.elide) { + case Text.ElideNone: return "None"; + case Text.ElideLeft: return "Left"; + case Text.ElideMiddle: return "Middle"; + case Text.ElideRight: return "Right"; + } + } + text: + "LineCount: "+textelement.lineCount+" of "+textelement.maximumLineCount+ + "\nPaintedHeight/Width: "+textelement.paintedHeight+"/"+textelement.paintedWidth+ + "\nPointSize: "+textelement.font.pointSize+ + "\nPixelSize: "+textelement.font.pixelSize+ + "\nTruncated: "+textelement.truncated+ + "\nElide: "+ elidename() + + } + } + + Item { + id: controlpanel + width: 200; height: parent.height + anchors.right: parent.right + Rectangle { anchors.fill: parent; color: "transparent"; border.color: "black" } + ListView { id: controls; model: controlsmodel; anchors.fill: parent; clip: true; cacheBuffer: 500 } + VisualItemModel { + id: controlsmodel + ControlView { + id: textvalue + controlname: "Text" + model: textmodel + ListModel { id: textmodel } + Component.onCompleted: { + textmodel.append({ "name": "Basic", + "value": "Qt Quick is a collection of technologies that are designed to help developers create the kind of intuitive, "+ + "modern, fluid user interfaces that are increasingly used on mobile phones, media players, set-top boxes and other "+ + "portable devices.\n"+ + "Qt Quick consists of a rich set of user interface elements, a declarative language for describing user interfaces "+ + "and a language runtime. "+ + "A collection of C++ APIs is used to integrate these high level features with classic Qt applications."}); + textmodel.append({ "name": "Short", + "value": "Button Text."}); + textmodel.append({ "name": "Long", + "value": "QtQuickisacollectionoftechnologiesthataredesignedtohelpdeveloperscreatethekindofintuitive,"+ + "modern,fluiduserinterfacesthatareincreasinglyusedonmobilephones,mediaplayers,set-topboxesandother"+ + "portabledevices."}); + textmodel.append({ "name": "Rich", + "value": "Qt Quick is a collection of technologies that are designed to help developers create the kind of intuitive, "+ + "modern, fluid user interfaces that are increasingly used on mobile phones, media players, set-top boxes and other "+ + "portable devices.
"+ + "Qt Quick consists of a rich set of user interface elements, a declarative language for describing user interfaces "+ + "and a language runtime. "+ + "A collection of C++ APIs is used to integrate these high level features with classic Qt applications."}); + } + } + ControlView { + id: formatvalue + controlname: "Format" + model: ListModel { ListElement { name: "Auto"; value: Text.AutoText } ListElement { name: "Plain"; value: Text.PlainText } + ListElement { name: "Rich"; value: Text.RichText } ListElement { name: "Styled"; value: Text.StyledText } } } + ControlView { + id: colorvalue + controlname: "Color" + model: ListModel { ListElement { name: "Red"; value: "red" } + ListElement { name: "Green"; value: "green" } ListElement { name: "Blue"; value: "blue" } } + } + ControlView { + id: elidevalue + controlname: "Elide" + model: ListModel { ListElement { name: "None"; value: Text.ElideNone } ListElement { name: "Left"; value: Text.ElideLeft } + ListElement { name: "Middle"; value: Text.ElideMiddle } ListElement { name: "Right"; value: Text.ElideRight } } + } + ControlView { + id: boldvalue + controlname: "Bold" + model: ListModel { ListElement { name: "Off"; value: false } ListElement { name: "On"; value: true } } + } + ControlView { + id: italicsvalue + controlname: "Italic" + model: ListModel { ListElement { name: "Off"; value: false } ListElement { name: "On"; value: true } } + } + ControlView { + id: capsvalue + controlname: "Cap10n" + model: ListModel { + ListElement { name: "Mixed"; value: Font.MixedCase } ListElement { name: "Upper"; value: Font.AllUppercase } + ListElement { name: "Lower"; value: Font.AllLowercase } ListElement { name: "SmallCaps"; value: Font.SmallCaps } + ListElement { name: "Capitals"; value: Font.Capitalize } + } + } + ControlView { + id: familyvalue + controlname: "Font" + property variant fontfamilies + function setModel() { + familiesmodel.clear(); + for (var i = 0; i < fontfamilies.length; ++i) { + familiesmodel.append({ "name": fontfamilies[i], "value": fontfamilies[i] }); + } + familyvalue.currentIndex = 0; + } + model: familiesmodel + ListModel { id: familiesmodel } + Component.onCompleted: { fontfamilies = Qt.fontFamilies(); setModel(); } + } + ControlView { + id: lspacingvalue + controlname: "LSpacing" + model: ListModel { ListElement { name: "0"; value: 0 } ListElement { name: "1"; value: 1 } ListElement { name: "2.5"; value: 2.5 } } } + ControlView { + id: wspacingvalue + controlname: "WSpacing" + model: ListModel { ListElement { name: "-1"; value: -1 } ListElement { name: "8"; value: 8 } ListElement { name: "20"; value: 20 } } } + ControlView { + id: pixelvalue + controlname: "Pixel" + model: ListModel { ListElement { name: "-1"; value: -1 } ListElement { name: "8"; value: 8 } ListElement { name: "20"; value: 20 } } } + ControlView { + id: pointvalue + controlname: "Point" + model: ListModel { ListElement { name: "-1"; value: -1 } ListElement { name: "8"; value: 8 } ListElement { name: "20"; value: 20 } } } + ControlView { + id: strikeoutvalue + controlname: "Strike" + model: ListModel { ListElement { name: "Off"; value: false } ListElement { name: "On"; value: true } } } + ControlView { + id: underlinevalue + controlname: "U_line" + model: ListModel { ListElement { name: "Off"; value: false } ListElement { name: "On"; value: true } } } + ControlView { + id: weightvalue + controlname: "Weight" + model: ListModel { ListElement { name: "Light"; value: Font.Light } ListElement { name: "Normal"; value: Font.Normal } + ListElement { name: "DemiBold"; value: Font.DemiBold } ListElement { name: "Bold"; value: Font.Bold } + ListElement { name: "Black"; value: Font.Black } } + Component.onCompleted: { currentIndex = 1 } // set to default + } + ControlView { + id: halignvalue + controlname: "HAlign" + model: ListModel { ListElement { name: "Left"; value: Text.AlignLeft } ListElement { name: "Right"; value: Text.AlignRight } + ListElement { name: "Center"; value: Text.AlignHCenter } ListElement { name: "Justify"; value: Text.AlignJustify } } } + ControlView { + id: valignvalue + controlname: "VAlign" + model: ListModel { ListElement { name: "Top"; value: Text.AlignTop } ListElement { name: "Bottom"; value: Text.AlignBottom } + ListElement { name: "Center"; value: Text.AlignVCenter } } } + ControlView { + id: maxlinevalue + controlname: "Lines" + model: ListModel { ListElement { name: "Max"; value: 2147483647 } ListElement { name: "1"; value: 1 } + ListElement { name: "2"; value: 2 } ListElement { name: "10"; value: 10 }} } + ControlView { + id: lineheightvalue + controlname: "LHeight" + model: ListModel { ListElement { name: "1"; value: 1.0 } ListElement { name: "2"; value: 2.0 } ListElement { name: "30"; value: 30.0 }} } + ControlView { + id: lineheightmodevalue + controlname: "LHMode" + model: ListModel { + ListElement { name: "Multiply"; value: Text.ProportionalHeight } ListElement { name: "Fixed"; value: Text.FixedHeight } } } + ControlView { + id: smoothvalue + controlname: "Smooth" + model: ListModel { ListElement { name: "Off"; value: false } ListElement { name: "On"; value: true } } } + ControlView { + id: stylevalue + controlname: "Style" + model: ListModel { ListElement { name: "Normal"; value: Text.Normal } ListElement { name: "Outline"; value: Text.Outline } + ListElement { name: "Raised"; value: Text.Raised } ListElement { name: "Sunken"; value: Text.Sunken } } } + ControlView { + id: stylecolorvalue + controlname: "SColor" + model: ListModel { ListElement { name: "Green"; value: "green" } ListElement { name: "Blue"; value: "blue" } } } + ControlView { + id: wrapvalue + controlname: "Wrap" + model: ListModel { ListElement { name: "None"; value: Text.NoWrap } ListElement { name: "Word"; value: Text.WordWrap } + ListElement { name: "Anywhere"; value: Text.WrapAnywhere } ListElement { name: "Wrap"; value: Text.Wrap } } } + } + } +} + + + + + + + + + + + + + + + + +