diff options
author | Christian Stenger <christian.stenger@nokia.com> | 2011-09-06 09:12:15 +0200 |
---|---|---|
committer | Bill King <bill.king@nokia.com> | 2011-09-08 10:51:17 +0200 |
commit | e137af3a42be53d723311520b1d5a0a9cc65787f (patch) | |
tree | c936da607e447d59a3e77c5322bf428c51ff99a7 /tests/system/shared/qtquick.py | |
parent | 4bf42e7885acbf52927eb030541ac7b2c8468d75 (diff) | |
download | qt-creator-e137af3a42be53d723311520b1d5a0a9cc65787f.tar.gz |
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 <qt_sanity_bot@ovi.com>
Reviewed-by: Bill King <bill.king@nokia.com>
Diffstat (limited to 'tests/system/shared/qtquick.py')
-rw-r--r-- | tests/system/shared/qtquick.py | 125 |
1 files changed, 125 insertions, 0 deletions
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("<Alt+F4>") + 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("<Alt+F4>") + waitFor("processExited==True", 10000) + setWindowState(waitForObject(":Qt Creator_Core::Internal::MainWindow", 20000), WindowState.Normal) + return True + |