From e137af3a42be53d723311520b1d5a0a9cc65787f Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 6 Sep 2011 09:12:15 +0200 Subject: Added test for creation of QtQuick application Added more QtQuick tests and did some refactorings according to re-appearing code. Completed the Qt Quick Wizards test from QtCreatorTestingMatrix. Change-Id: I857d9f3c3809221e2df3e096b3926a8d5d36b828 Reviewed-on: http://codereview.qt-project.org/4238 Reviewed-by: Qt Sanity Bot Reviewed-by: Bill King --- tests/system/shared/qtquick.py | 125 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 tests/system/shared/qtquick.py (limited to 'tests/system/shared/qtquick.py') diff --git a/tests/system/shared/qtquick.py b/tests/system/shared/qtquick.py new file mode 100644 index 0000000000..cfd8ee2f28 --- /dev/null +++ b/tests/system/shared/qtquick.py @@ -0,0 +1,125 @@ +processStarted = False +processExited = False + +# for easier re-usage (because Python hasn't an enum type) +class QtQuickConstants: + class Components: + BUILTIN = 1 + SYMBIAN = 2 + MEEGO_HARMATTAN = 4 + EXISTING_QML = 8 + + class Destinations: + DESKTOP = 1 + SIMULATOR = 2 + SYMBIAN = 4 + MAEMO5 = 8 + HARMATTAN = 16 + + @staticmethod + def getStringForComponents(components): + if components==QtQuickConstants.Components.BUILTIN: + return "Built-in elements only (for all platforms)" + elif components==QtQuickConstants.Components.SYMBIAN: + return "Qt Quick Components for Symbian" + elif components==QtQuickConstants.Components.MEEGO_HARMATTAN: + return "Qt Quick Components for Meego/Harmattan" + elif components==QtQuickConstants.Components.EXISTING_QML: + return "Use an existing .qml file" + else: + return None + + @staticmethod + def getStringForDestination(destination): + if destination==QtQuickConstants.Destinations.DESKTOP: + return "Desktop" + elif destination==QtQuickConstants.Destinations.SYMBIAN: + return "Symbian Device" + elif destination==QtQuickConstants.Destinations.MAEMO5: + return "Maemo5" + elif destination==QtQuickConstants.Destinations.SIMULATOR: + return "Qt Simulator" + elif destination==QtQuickConstants.Destinations.HARMATTAN: + return "Harmattan" + else: + return None + +def handleProcessStarted(object): + global processStarted + processStarted = True + +def handleProcessExited(object, exitCode): + global processExited + processExited = True + +# parameter components can only be one of the Constants defined in QtQuickConstants.Components +def chooseComponents(components=QtQuickConstants.Components.BUILTIN): + rbComponentToChoose = waitForObject("{type='QRadioButton' text='%s' visible='1'}" + % QtQuickConstants.getStringForComponents(components), 20000) + if rbComponentToChoose.checked: + test.passes("Selected QRadioButton is '%s'" % QtQuickConstants.getStringForComponents(components)) + else: + clickButton(rbComponentToChoose) + test.verify(rbComponentToChoose.checked, "Selected QRadioButton is '%s'" + % QtQuickConstants.getStringForComponents(components)) + +# parameter destination can be an OR'd value of QtQuickConstants.Destinations +def chooseDestination(destination=QtQuickConstants.Destinations.DESKTOP): + # DESKTOP should be always accessible + destDesktop = waitForObject("{type='QCheckBox' text='%s' visible='1'}" + % QtQuickConstants.getStringForDestination(QtQuickConstants.Destinations.DESKTOP), 20000) + mustCheck = destination & QtQuickConstants.Destinations.DESKTOP==QtQuickConstants.Destinations.DESKTOP + if (mustCheck and not destDesktop.checked) or (not mustCheck and destDesktop.checked): + clickButton(destDesktop) + # following destinations depend on the build environment - added for further/later tests + available = [QtQuickConstants.Destinations.SYMBIAN, QtQuickConstants.Destinations.MAEMO5, + QtQuickConstants.Destinations.SIMULATOR, QtQuickConstants.Destinations.HARMATTAN] + for current in available: + mustCheck = destination & current == current + try: + target = findObject("{type='QCheckBox' text='%s' visible='1'}" % QtQuickConstants.getStringForDestination(current)) + if (mustCheck and not target.checked) or (not mustCheck and target.checked): + clickButton(target) + except LookupError: + if mustCheck: + test.fail("Failed to check destination '%s'" % QtQuickConstants.getStringForDestination(current)) + +def runAndCloseApp(): + global buildSucceeded, buildFinished, processStarted, processExited + buildSucceeded = buildFinished = processStarted = processExited = False + installLazySignalHandler("{type='ProjectExplorer::ApplicationLaucher'}", "processStarted()", "handleProcessStarted") + installLazySignalHandler("{type='ProjectExplorer::ApplicationLaucher'}", "processExited(int)", "handleProcessExited") + runButton = waitForObject("{type='Core::Internal::FancyToolButton' text='Run' visible='1'}", 20000) + clickButton(runButton) + waitForBuildFinished() + waitFor("processStarted==True", 10000) + if not buildSucceeded: + test.log("Build inside run wasn't successful - leaving test") + invokeMenuItem("File", "Exit") + return False + if not processStarted: + test.fatal("Couldn't start application - leaving test") + invokeMenuItem("File", "Exit") + return False + # the following is currently a work-around for not using hooking into subprocesses + setWindowState(waitForObject(":Qt Creator_Core::Internal::MainWindow", 20000), WindowState.Minimize) + nativeType("") + waitFor("processExited==True",10000) + setWindowState(waitForObject(":Qt Creator_Core::Internal::MainWindow", 20000), WindowState.Normal) + return True + +def runAndCloseQtQuickUI(): + global processStarted, processExited + processStarted = processExited = False + installLazySignalHandler("{type='ProjectExplorer::ApplicationLaucher'}", "processStarted()", "handleProcessStarted") + installLazySignalHandler("{type='ProjectExplorer::ApplicationLaucher'}", "processExited(int)", "handleProcessExited") + runButton = waitForObject("{type='Core::Internal::FancyToolButton' text='Run' visible='1'}", 20000) + clickButton(runButton) + waitFor("processStarted==True", 10000) + # the following is currently a work-around for not using hooking into subprocesses + setWindowState(waitForObject(":Qt Creator_Core::Internal::MainWindow", 20000), WindowState.Minimize) + nativeType("") + waitFor("processExited==True", 10000) + setWindowState(waitForObject(":Qt Creator_Core::Internal::MainWindow", 20000), WindowState.Normal) + return True + -- cgit v1.2.1