From: Damian Jansen Date: Tue, 3 Apr 2012 04:21:23 +0000 (+1000) Subject: AnimatedSprite system tests X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=73dffd7b38045e50d3dc568251bfe5d79aa84e0f;p=konrad%2Fqtdeclarative.git AnimatedSprite system tests Basic sprite tests to validate frame rate and source changes Change-Id: I0279e89c55a4b5da5a0ee00a40c53ede1e27390a Reviewed-by: Alan Alpert --- diff --git a/tests/system/sys_animatedsprite.qtt b/tests/system/sys_animatedsprite.qtt new file mode 100644 index 0000000..87d1a01 --- /dev/null +++ b/tests/system/sys_animatedsprite.qtt @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** 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 = { + + basic_animated_sprite_usage: function() + { + // Test Meta-data + testTitle = "Using AnimatedSprite elements"; + testBinary = "animatedsprite.qml"; + testSource: "$QTDIR/qtdeclarative/tests/system/animatedsprite"; + testGoal = "Verify an AnimatedSprite can be used to display an animating character."; + testPreconditions = "None"; + testGroups = "BAT,QtQuick 2.0"; + + // Test Steps + prompt(twiki('---+++ ' + testTitle + '

+ *Goal:* ' + testGoal + '
+ *Pre-Requisites:* ' + testPreconditions + '
+ *Tested Binary:* ' + testBinary + '
+ | *Step* | *Verification* | + | Run '+testBinary+' | Application has started, showing a teddy bear blinking and moving its head and arms | + | | Watching closely, note that after the bear points its paw, it will look right, then look left, then blink | + | Press the Reverse button | After the bear points its paw, it should blink, then look left, then look right | + | Press the FPS "+" button 10 times | The FPS label shows 15 | + | | The bear is animating quickly | + | Press the FPS "-" button 10 times | The FPS label shows 5 | + | | The bear is animating slowly |')); + }, + + changing_a_sprite_source: function() + { + // Test Meta-data + testTitle = "Changing a sprite source"; + testBinary = "animatedsprite.qml"; + testSource: "$QTDIR/qtdeclarative/tests/system/animatedspriteadvance"; + testGoal = "Verify an AnimatedSprite source property can be changed, redrawing the new sprite."; + testPreconditions = "None"; + testGroups = "BAT,QtQuick 2.0"; + + // Test Steps + prompt(twiki('---+++ ' + testTitle + '

+ *Goal:* ' + testGoal + '
+ *Pre-Requisites:* ' + testPreconditions + '
+ *Tested Binary:* ' + testBinary + '
+ | *Step* | *Verification* | + | Run '+testBinary+' | Application has started, showing a teddy bear blinking and moving its head and arms | + | | The bear\'s eyes are brown | + | Press the blue button under the Eyes control | The bear\'s eyes are blue | + | Press the white button under the Body control | The bear is now a polar bear with blue eyes | + | Press the gray button under the Body control | The blue eyed polar bear\'s face and abdomen are now gray | + | | All of the items are still animating in sync |')); + }, + + changing_the_animation_timing_method: function() + { + // Test Meta-data + testTitle = "Changing the method used to animate a sprite"; + testBinary = "animatedsprite.qml"; + testSource: "$QTDIR/qtdeclarative/tests/system/animatedsprite"; + testGoal = "Verify an AnimatedSprite can be timed using application frame sync or a specified frame rate."; + testPreconditions = "None"; + testGroups = "BAT,QtQuick 2.0"; + + // Test Steps + prompt(twiki('---+++ ' + testTitle + '

+ *Goal:* ' + testGoal + '
+ *Pre-Requisites:* ' + testPreconditions + '
+ *Tested Binary:* ' + testBinary + '
+ | *Step* | *Verification* | + | Run '+testBinary+' | Application has started, showing a teddy bear blinking and moving its head and arms | + | Press FrameSync | Rate should show FrameSync | + | | The bear should be animating very fast and the FPS counter should still be 5 | + | Press FrameSync | The bear should be again animating slowly, Rate should show FrameRate | + | Press the FPS "-" button 5 times | FPS should show 0 | + | | The bear should be not moving | + | Press the FPS "-" button | The FPS label should show -1 | + | | The bear should be not moving | + | Press the FPS "+" button twice | FPS should show 1 | + | | The bear should be animating slowly |')); + } +} diff --git a/tests/testapplications/animatedsprite/animatedsprite.qml b/tests/testapplications/animatedsprite/animatedsprite.qml new file mode 100644 index 0000000..5a08671 --- /dev/null +++ b/tests/testapplications/animatedsprite/animatedsprite.qml @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: main + + property bool reversed: false + property real speed: 5 + property bool framesync: false + + width: 320 + height: 480 + color: "lightgray" + + Column { + id: controls + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + anchors.bottomMargin: 30 + width: parent.width - 10 + spacing: 5 + Text { + text: framesync ? "Rate: FrameSync" : "Rate: FrameRate" + width: controls.width + height: 50 + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + MouseArea { + anchors.fill: parent + onClicked: framesync = !framesync + } + Rectangle { anchors.fill: parent; color: "transparent"; border.color: "black"; radius: 5 } + } + Text { + text: reversed ? "Reverse" : "Forward" + width: controls.width + height: 50 + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + MouseArea { + anchors.fill: parent + onClicked: reversed = !reversed + } + Rectangle { anchors.fill: parent; color: "transparent"; border.color: "black"; radius: 5 } + } + + Text { + text: "FPS: "+s1.frameRate + width: controls.width + height: 50 + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + Rectangle { + height: parent.height + width: height + Text { anchors.centerIn: parent; text: "-" } + MouseArea { + anchors.fill: parent + onClicked: speed = speed - 1 + } + } + Rectangle { + height: parent.height + width: height + anchors.right: parent.right + Text { anchors.centerIn: parent; text: "+" } + MouseArea { + anchors.fill: parent + onClicked: speed = speed + 1 + } + } + Rectangle { anchors.fill: parent; color: "transparent"; border.color: "black"; radius: 5 } + } + } + + AnimatedSprite { + id: s1 + anchors.centerIn: parent + anchors.verticalCenterOffset: -80 + running: true + height: 125 + width: 125 + frameCount: 13 + frameDuration: 50 + frameRate: speed + frameSync: framesync + reverse: reversed + interpolate: false + source: "bear_tiles.png" + } +} diff --git a/tests/testapplications/animatedsprite/animatedspriteadvance.qml b/tests/testapplications/animatedsprite/animatedspriteadvance.qml new file mode 100644 index 0000000..50f1a18 --- /dev/null +++ b/tests/testapplications/animatedsprite/animatedspriteadvance.qml @@ -0,0 +1,201 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Rectangle { + id: main + + width: 320 + height: 480 + color: "lightgray" + Column { + Text { text: "Current frame: "+s1.currentFrame } + Text { text: "Delay: " + animcontroller.interval + "msec" } + } + + Row { + height: parent.height / 3 + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + spacing: 5 + Column { + height: parent.height + width: 80 + Text { id: bodytxt; width: parent.width; text: "Body"; horizontalAlignment: Text.AlignHCenter } + Rectangle { + height: 30 + width: parent.width + color: "white" + MouseArea { + anchors.fill: parent + onClicked: { s1.source = "bear_polar.png" } + } + } + Rectangle { + height: 30 + width: parent.width + color: "black" + MouseArea { + anchors.fill: parent + onClicked: { s1.source = "bear_black.png" } + } + } + Rectangle { + height: 30 + width: parent.width + color: "brown" + MouseArea { + anchors.fill: parent + onClicked: { s1.source = "bear_brown.png" } + } + } + } + Column { + height: parent.height + width: 80 + Text { id: eyestxt; width: parent.width; text: "Eyes"; horizontalAlignment: Text.AlignHCenter } + Rectangle { + height: 30 + width: parent.width + color: "brown" + MouseArea { + anchors.fill: parent + onClicked: { s2.source = "bear_eyes_brown.png" } + } + } + Rectangle { + height: 30 + width: parent.width + color: "blue" + MouseArea { + anchors.fill: parent + onClicked: { s2.source = "bear_eyes_blue.png" } + } + } + Rectangle { + height: 30 + width: parent.width + color: "green" + MouseArea { + anchors.fill: parent + onClicked: { s2.source = "bear_eyes_green.png" } + } + } + } + Column { + height: parent.height + width: 80 + Text { id: furtxt; width: parent.width; text: "Fur"; horizontalAlignment: Text.AlignHCenter } + Rectangle { + height: 30 + width: parent.width + color: "orange" + MouseArea { + anchors.fill: parent + onClicked: { s3.source = "bear_fur_orange.png" } + } + } + Rectangle { + height: 30 + width: parent.width + color: "gray" + MouseArea { + anchors.fill: parent + onClicked: { s3.source = "bear_fur_gray.png" } + } + } + Rectangle { + height: 30 + width: parent.width + color: "magenta" + MouseArea { + anchors.fill: parent + onClicked: { s3.source = "bear_fur_pink.png" } + } + } + } + } + + function advanceall() { + s1.advance(); + s2.advance(); + s3.advance(); + if (s2.currentFrame!=s1.currentFrame || s3.currentFrame!=s1.currentFrame) + console.log("Frames out of sync!") + } + + AnimatedSprite { + id: s1 + x: 100 + y: 100 + running: true + paused: true + height: 125 + width: 125 + frameCount: 13 + interpolate: false + source: "bear_brown.png" + } + + AnimatedSprite { + id: s2 + anchors.fill: s1 + running: true + paused: s1.paused + frameCount: 13 + interpolate: false + source: "bear_eyes_brown.png" + onSourceChanged: { currentFrame = s1.currentFrame } + } + + AnimatedSprite { + id: s3 + anchors.fill: s1 + running: true + paused: s1.paused + frameCount: 13 + interpolate: false + source: "bear_fur_orange.png" + onSourceChanged: { currentFrame = s1.currentFrame } + } + + Timer { id: animcontroller; interval: 75; running: true; repeat: true; onTriggered: { advanceall(); } } +} diff --git a/tests/testapplications/animatedsprite/bear_black.png b/tests/testapplications/animatedsprite/bear_black.png new file mode 100644 index 0000000..d014132 Binary files /dev/null and b/tests/testapplications/animatedsprite/bear_black.png differ diff --git a/tests/testapplications/animatedsprite/bear_brown.png b/tests/testapplications/animatedsprite/bear_brown.png new file mode 100644 index 0000000..514d456 Binary files /dev/null and b/tests/testapplications/animatedsprite/bear_brown.png differ diff --git a/tests/testapplications/animatedsprite/bear_eyes_blue.png b/tests/testapplications/animatedsprite/bear_eyes_blue.png new file mode 100644 index 0000000..aca9172 Binary files /dev/null and b/tests/testapplications/animatedsprite/bear_eyes_blue.png differ diff --git a/tests/testapplications/animatedsprite/bear_eyes_brown.png b/tests/testapplications/animatedsprite/bear_eyes_brown.png new file mode 100644 index 0000000..2790f81 Binary files /dev/null and b/tests/testapplications/animatedsprite/bear_eyes_brown.png differ diff --git a/tests/testapplications/animatedsprite/bear_eyes_green.png b/tests/testapplications/animatedsprite/bear_eyes_green.png new file mode 100644 index 0000000..31f4944 Binary files /dev/null and b/tests/testapplications/animatedsprite/bear_eyes_green.png differ diff --git a/tests/testapplications/animatedsprite/bear_fur_gray.png b/tests/testapplications/animatedsprite/bear_fur_gray.png new file mode 100644 index 0000000..782b244 Binary files /dev/null and b/tests/testapplications/animatedsprite/bear_fur_gray.png differ diff --git a/tests/testapplications/animatedsprite/bear_fur_orange.png b/tests/testapplications/animatedsprite/bear_fur_orange.png new file mode 100644 index 0000000..5334fc7 Binary files /dev/null and b/tests/testapplications/animatedsprite/bear_fur_orange.png differ diff --git a/tests/testapplications/animatedsprite/bear_fur_pink.png b/tests/testapplications/animatedsprite/bear_fur_pink.png new file mode 100644 index 0000000..efbde0d Binary files /dev/null and b/tests/testapplications/animatedsprite/bear_fur_pink.png differ diff --git a/tests/testapplications/animatedsprite/bear_polar.png b/tests/testapplications/animatedsprite/bear_polar.png new file mode 100644 index 0000000..dab96b9 Binary files /dev/null and b/tests/testapplications/animatedsprite/bear_polar.png differ diff --git a/tests/testapplications/animatedsprite/bear_tiles.png b/tests/testapplications/animatedsprite/bear_tiles.png new file mode 100644 index 0000000..6bbb2a9 Binary files /dev/null and b/tests/testapplications/animatedsprite/bear_tiles.png differ