on xenial help sign in
First passes at installing scripts to run tests
commit5a702fe9317f338c3cda69ff733bda3d320fe024 authorMichael Terry <michael.terry@canonical.com> dateThu 14 Apr 2016, 18:10 (11 years ago) parent3892902
17 files changed+143−32
cmake/modules/QmlTest.cmake+68−3 debian/control+3−2 debian/unity8-fake-env.install+4 tests/CMakeLists.txt+14 tests/mocks/AccountsService/CMakeLists.txt−1 tests/mocks/CMakeLists.txt+13−14 tests/mocks/Cursor/CMakeLists.txt+1−1 tests/mocks/IntegratedLightDM/CMakeLists.txt−1 tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/CMakeLists.txt+1−1 tests/mocks/Unity/Application/ApplicationInfo.cpp+5−2 tests/mocks/Unity/Application/CMakeLists.txt+1−1 tests/mocks/Unity/Launcher/MockLauncherItem.cpp+6−2 tests/qmltests/CMakeLists.txt+13 tests/qmltests/Components/CMakeLists.txt+4 tests/qmltests/tst_Shell.qml+2−2 tests/uqmlscene/CMakeLists.txt+4 tests/utils/modules/Unity/Test/CMakeLists.txt+4−2
cmake/modules/QmlTest.cmake+68−3
@@ -71,6 +71,8 @@ function(add_qml_unittest PATH COMPONENT_NAME)
7171 ${ARGN}
7272 ARGS -input ${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml ${QMLTEST_ARGS}
7373 )
74+
75+ install_qmltest("${PATH}" "${COMPONENT_NAME}")
7476endfunction()
7577
7678
@@ -91,6 +93,8 @@ function(add_manual_qml_test PATH COMPONENT_NAME)
9193 ${ARGN}
9294 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml ${QMLTEST_ARGS}
9395 )
96+
97+ install_qmltest("${PATH}" "${COMPONENT_NAME}")
9498endfunction()
9599
96100
@@ -209,6 +213,67 @@ endfunction()
209213
210214################### INTERNAL ####################
211215
216+function(install_qmltest PATH COMPONENT_NAME)
217+ set(filename "${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml")
218+ set(out_filename "${CMAKE_CURRENT_BINARY_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml")
219+ if (EXISTS "${filename}")
220+ file(READ "${filename}" contents)
221+ string(REGEX REPLACE "(import \"[./]*)/qml" "\\1" contents "${contents}")
222+ file(WRITE "${out_filename}" "${contents}")
223+ install(FILES "${out_filename}"
224+ DESTINATION "${SHELL_APP_DIR}/tests/qmltests/${PATH}"
225+ )
226+ endif()
227+endfunction()
228+
229+function(add_test_target TARGET_NAME)
230+ cmake_parse_arguments(TEST "" "" "COMMAND;ENVIRONMENT;DEPENDS" ${ARGN})
231+
232+ add_custom_target(${TARGET_NAME}
233+ env ${TEST_ENVIRONMENT}
234+ ${TEST_COMMAND}
235+ DEPENDS ${TEST_DEPENDS}
236+ )
237+
238+ # Now write the above test into a shell script that we can run on an
239+ # installed system.
240+ set(script "#!/bin/sh\n\n")
241+ foreach(ONE_ENV ${TEST_ENVIRONMENT})
242+ set(script "${script}export ${ONE_ENV}\n")
243+ endforeach()
244+ set(script "${script}export UNITY_TESTING_DATADIR=\"${CMAKE_INSTALL_PREFIX}/${SHELL_APP_DIR}/\"\n")
245+ set(script "${script}\n")
246+ foreach(ONE_CMD ${TEST_COMMAND})
247+ if (NOT ONE_CMD MATCHES "\\$\\(")
248+ # skip variables that look like subcommands like $(FUNCTION)
249+ set(script "${script}'${ONE_CMD}' ")
250+ endif()
251+ endforeach()
252+ set(script "${script}$@")
253+
254+ # Now some replacements...
255+ # replace build/source roots with their install paths
256+ string(REPLACE "${CMAKE_BINARY_DIR}/tests/mocks" "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/qml/mocks" script "${script}")
257+ string(REPLACE "${CMAKE_BINARY_DIR}/tests/uqmlscene" "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}" script "${script}")
258+ string(REPLACE "${CMAKE_BINARY_DIR}/tests/utils/modules" "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/qml/utils" script "${script}")
259+ string(REPLACE "${CMAKE_BINARY_DIR}/plugins" "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/qml" script "${script}")
260+ string(REPLACE "${CMAKE_SOURCE_DIR}/tests/qmltests" "${CMAKE_INSTALL_PREFIX}/${SHELL_APP_DIR}/tests/qmltests" script "${script}")
261+ # tests like to write xml output to our builddir; we don't need that
262+ string(REGEX REPLACE "( '--parameter')? '-o'( '--parameter')? '[^ ]*,xunitxml' " " " script "${script}")
263+
264+ file(GENERATE
265+ OUTPUT "${CMAKE_BINARY_DIR}/tests/scripts/${TARGET_NAME}.sh"
266+ CONTENT "${script}"
267+ )
268+
269+ install(FILES "${CMAKE_BINARY_DIR}/tests/scripts/${TARGET_NAME}.sh"
270+ PERMISSIONS OWNER_EXECUTE OWNER_READ
271+ GROUP_EXECUTE GROUP_READ
272+ WORLD_EXECUTE WORLD_READ
273+ DESTINATION "${SHELL_PRIVATE_LIBDIR}/tests"
274+ )
275+endfunction()
276+
212277# add_qmltest_target(target_name target
213278# COMMAND test_exe [arg1 [...]] # execute this test with arguments
214279# [...] # see above for available arguments:
@@ -225,9 +290,9 @@ function(add_qmltest_target TARGET_NAME TARGET)
225290 set(function "$(FUNCTION)")
226291 endif()
227292
228− add_custom_target(${TARGET_NAME}
229− env ${QMLTEST_ENVIRONMENT}
230− ${QMLTEST_COMMAND} ${function}
293+ add_test_target(${TARGET_NAME}
294+ ENVIRONMENT ${QMLTEST_ENVIRONMENT}
295+ COMMAND ${QMLTEST_COMMAND} ${function}
231296 DEPENDS ${TARGET} ${QMLTEST_DEPENDS}
232297 )
233298
debian/control+3−2
@@ -168,7 +168,6 @@ Depends: autopilot-qt5 (>= 1.4),
168168 xvfb,
169169 ${misc:Depends},
170170 ${python3:Depends},
171− ${shlibs:Depends},
172171Description: Test package for Unity 8 shell
173172 Autopilot tests for the unity8 package
174173
@@ -176,7 +175,9 @@ Package: unity8-fake-env
176175Architecture: any
177176Multi-Arch: same
178177Pre-Depends: ${misc:Pre-Depends},
179−Depends: ${misc:Depends},
178+Depends: dbus-test-runner,
179+ qtdeclarative5-dev-tools,
180+ ${misc:Depends},
180181 ${shlibs:Depends},
181182Provides: unity-application-impl,
182183 unity-application-impl-14,
debian/unity8-fake-env.install+4
@@ -3,4 +3,8 @@ usr/bin/unity-mock-indicator-service
33usr/lib/*/unity8/qml/mocks
44usr/lib/*/unity8/qml/nonmirplugins
55usr/lib/*/unity8/qml/scopefakes
6+usr/lib/*/unity8/qml/utils
7+usr/lib/*/unity8/tests
8+usr/lib/*/unity8/uqmlscene
69usr/share/unity8/mocks
10+usr/share/unity8/tests
tests/CMakeLists.txt+14
@@ -48,6 +48,7 @@ macro(unity8_parse_arguments)
4848 list(APPEND ld_paths
4949 ${UNITY_MOCKPATH}/libusermetrics
5050 ${UNITY_MOCKPATH}/IntegratedLightDM/liblightdm
51+ ${UNITY_MOCKPATH}/QMenuModel
5152 )
5253 endif()
5354
@@ -126,6 +127,19 @@ function(add_unity8_qmlbenchmark PATH COMPONENT_NAME ITERATIONS)
126127 add_unity8_qmltest(${PATH} ${COMPONENT_NAME} ITERATIONS ${ITERATIONS} ${ARGN})
127128endfunction()
128129
130+# add files needed for qml tests
131+function(add_unity8_qmltest_data PATH COMPONENT_NAME)
132+ set(filename "${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/${COMPONENT_NAME}.qml")
133+ install(FILES "${filename}"
134+ DESTINATION "${SHELL_APP_DIR}/tests/qmltests/${PATH}"
135+ )
136+endfunction()
137+
138+
139+install(DIRECTORY graphics
140+ DESTINATION "${SHELL_APP_DIR}/tests"
141+)
142+
129143
130144# Actual test definitions
131145add_subdirectory(libs)
tests/mocks/AccountsService/CMakeLists.txt−1
@@ -6,6 +6,5 @@ add_library(MockAccountsService-qml MODULE
66qt5_use_modules(MockAccountsService-qml DBus Qml)
77
88add_unity8_mock(AccountsService 0.1 AccountsService
9− PREFIX mocks
109 TARGETS MockAccountsService-qml
1110 )
tests/mocks/CMakeLists.txt+13−14
@@ -11,21 +11,20 @@ macro(add_unity8_mock PLUGIN VERSION PATH)
1111 set(single PREFIX)
1212 cmake_parse_arguments(MOCK "" "${single}" "" ${ARGN})
1313
14− if(MOCK_PREFIX)
15− export_qmlfiles(${PLUGIN} ${PATH}
16− DESTINATION ${SHELL_INSTALL_QML}/${MOCK_PREFIX}
17− TARGET_PREFIX ${MOCK_PREFIX}-Mock
18− ${MOCK_UNPARSED_ARGUMENTS}
19− )
20− export_qmlplugin(${PLUGIN} ${VERSION} ${PATH}
21− DESTINATION ${SHELL_INSTALL_QML}/${MOCK_PREFIX}
22− TARGET_PREFIX ${MOCK_PREFIX}-Mock
23− ${MOCK_UNPARSED_ARGUMENTS}
24− )
25− else()
26− export_qmlfiles(${PLUGIN} ${PATH} TARGET_PREFIX Mock ${MOCK_UNPARSED_ARGUMENTS})
27− export_qmlplugin(${PLUGIN} ${VERSION} ${PATH} TARGET_PREFIX Mock ${MOCK_UNPARSED_ARGUMENTS})
14+ if (NOT MOCK_PREFIX)
15+ set(MOCK_PREFIX mocks)
2816 endif()
17+
18+ export_qmlfiles(${PLUGIN} ${PATH}
19+ DESTINATION ${SHELL_INSTALL_QML}/${MOCK_PREFIX}
20+ TARGET_PREFIX ${MOCK_PREFIX}-Mock
21+ ${MOCK_UNPARSED_ARGUMENTS}
22+ )
23+ export_qmlplugin(${PLUGIN} ${VERSION} ${PATH}
24+ DESTINATION ${SHELL_INSTALL_QML}/${MOCK_PREFIX}
25+ TARGET_PREFIX ${MOCK_PREFIX}-Mock
26+ ${MOCK_UNPARSED_ARGUMENTS}
27+ )
2928endmacro()
3029
3130add_subdirectory(AccountsService)
tests/mocks/Cursor/CMakeLists.txt+1−1
@@ -1 +1 @@
1−add_unity8_mock(Cursor 1.0 Cursor PREFIX mocks)
1+add_unity8_mock(Cursor 1.0 Cursor)
tests/mocks/IntegratedLightDM/CMakeLists.txt−1
@@ -43,7 +43,6 @@ target_link_libraries(MockLightDM-qml
4343qt5_use_modules(MockLightDM-qml DBus Gui Qml)
4444
4545add_unity8_mock(IntegratedLightDM 0.1 IntegratedLightDM
46− PREFIX mocks
4746 TARGETS MockLightDM-qml
4847 ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/liblightdm"
4948)
tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/CMakeLists.txt+1−1
@@ -7,4 +7,4 @@ add_library(MockSecurityPrivacy MODULE ${MOCK_SECURITYPRIVACY_SOURCES})
77
88qt5_use_modules(MockSecurityPrivacy Qml Quick Core)
99
10−add_unity8_mock(Ubuntu.SystemSettings.SecurityPrivacy 1.0 Ubuntu/SystemSettings/SecurityPrivacy PREFIX mocks TARGETS MockSecurityPrivacy)
10+add_unity8_mock(Ubuntu.SystemSettings.SecurityPrivacy 1.0 Ubuntu/SystemSettings/SecurityPrivacy TARGETS MockSecurityPrivacy)
tests/mocks/Unity/Application/ApplicationInfo.cpp+5−2
@@ -120,8 +120,11 @@ void ApplicationInfo::setSession(Session* session)
120120
121121void ApplicationInfo::setIconId(const QString &iconId)
122122{
123− setIcon(QString("../../tests/graphics/applicationIcons/%2@18.png")
124− .arg(iconId));
123+ QString datadir(qgetenv("UNITY_TESTING_DATADIR"));
124+ if (datadir.isEmpty())
125+ datadir = "../.."; // relative path for code checkout
126+
127+ setIcon(QUrl(datadir + "/tests/graphics/applicationIcons/" + iconId + "@18.png"));
125128}
126129
127130void ApplicationInfo::setScreenshotId(const QString &screenshotId)
tests/mocks/Unity/Application/CMakeLists.txt+1−1
@@ -29,7 +29,7 @@ set_target_properties(NonMirUnityApplicationQml PROPERTIES OUTPUT_NAME FakeUnity
2929qt5_use_modules(FakeUnityApplicationQml Core Quick DBus)
3030qt5_use_modules(NonMirUnityApplicationQml Core Quick DBus)
3131
32−add_unity8_mock(Unity.Application 0.1 Unity/Application PREFIX mocks TARGETS FakeUnityApplicationQml)
32+add_unity8_mock(Unity.Application 0.1 Unity/Application TARGETS FakeUnityApplicationQml)
3333add_unity8_mock(Unity.Application 0.1 Unity/Application
3434 PREFIX nonmirplugins
3535 TARGETS NonMirUnityApplicationQml
tests/mocks/Unity/Launcher/MockLauncherItem.cpp+6−2
@@ -29,7 +29,7 @@ MockLauncherItem::MockLauncherItem(const QString &appId, const QString& desktopF
2929 m_appId(appId),
3030 m_desktopFile(desktopFile),
3131 m_name(name),
32− m_icon("../../tests/graphics/applicationIcons/" + icon + ".png"),
32+ m_icon(icon),
3333 m_pinned(false),
3434 m_running(false),
3535 m_recent(false),
@@ -63,7 +63,11 @@ QString MockLauncherItem::name() const
6363
6464QString MockLauncherItem::icon() const
6565{
66− return m_icon;
66+ QString datadir(qgetenv("UNITY_TESTING_DATADIR"));
67+ if (datadir.isEmpty())
68+ datadir = "../.."; // relative path for code checkout
69+
70+ return datadir + "/tests/graphics/applicationIcons/" + m_icon + ".png";
6771}
6872
6973bool MockLauncherItem::pinned() const
tests/qmltests/CMakeLists.txt+13
@@ -6,11 +6,13 @@ add_unity8_qmltest(. DisabledScreenNotice)
66add_unity8_qmltest(. Shell LIGHTDM)
77add_unity8_qmltest(. ShellWithPin LIGHTDM)
88add_unity8_qmltest(. DeviceConfiguration)
9+add_unity8_qmltest_data(. EdgeBarrierControls)
910add_unity8_qmltest(Components Background)
1011add_unity8_qmltest(Components Carousel)
1112add_unity8_qmltest(Components Dialogs LIGHTDM)
1213add_unity8_qmltest(Components DraggingArea)
1314add_unity8_qmltest(Components LazyImage)
15+add_unity8_qmltest_data(Components/tst_LazyImage ImageControls)
1416add_unity8_qmltest(Components Lockscreen)
1517add_unity8_qmltest(Components ModeSwitchWarningDialog)
1618add_unity8_qmltest(Components PhysicalKeysMapper)
@@ -53,6 +55,7 @@ add_unity8_qmltest(Dash/Previews PreviewTextSummary)
5355add_unity8_qmltest(Dash/Previews PreviewVideoPlayback)
5456add_unity8_qmltest(Dash/Previews PreviewWidgetFactory)
5557add_unity8_qmltest(Dash/Previews PreviewZoomableImage)
58+add_unity8_qmltest_data(Dash/Previews MockPreviewWidget)
5659add_unity8_qmltest(Dash/Filters FilterOptionSelector)
5760add_unity8_qmltest(Dash/Filters FilterRangeInput)
5861add_unity8_qmltest(Dash/Filters FilterValueSlider)
@@ -67,11 +70,13 @@ add_unity8_qmltest(Greeter Greeter LIGHTDM)
6770add_unity8_qmltest(Greeter Infographics LIGHTDM)
6871add_unity8_qmltest(Greeter NarrowView LIGHTDM)
6972add_unity8_qmltest(Greeter WideView LIGHTDM)
73+add_unity8_qmltest_data(Greeter TestView)
7074add_unity8_qmltest(Launcher Launcher)
7175add_unity8_qmltest(Notifications Notifications)
7276add_unity8_qmltest(Notifications VisualSnapDecisionsQueue)
7377add_unity8_qmltest(Notifications OptionToggle)
7478add_unity8_qmltest(Notifications SwipeToAct)
79+add_unity8_qmltest_data(Notifications Notification)
7580add_unity8_qmltest(Panel ActiveCallHint)
7681add_unity8_qmltest(Panel IndicatorItem)
7782add_unity8_qmltest(Panel IndicatorItemRow)
@@ -80,6 +85,7 @@ add_unity8_qmltest(Panel IndicatorsBar)
8085add_unity8_qmltest(Panel IndicatorsMenu)
8186add_unity8_qmltest(Panel MenuContent)
8287add_unity8_qmltest(Panel Panel)
88+add_unity8_qmltest_data(Panel IndicatorTest)
8389add_unity8_qmltest(Panel/Indicators IndicatorsLight)
8490add_unity8_qmltest(Panel/Indicators MenuItemFactory)
8591add_unity8_qmltest(Panel/Indicators MessageMenuItemFactory)
@@ -92,6 +98,13 @@ add_unity8_qmltest(Stages SessionContainer)
9298add_unity8_qmltest(Stages TabletStage)
9399add_unity8_qmltest(Stages WindowResizeArea)
94100add_unity8_qmltest(Stages Splash)
101+add_unity8_qmltest_data(Stages ApplicationCheckBox)
102+add_unity8_qmltest_data(Stages RecursingChildSessionControl)
103+add_unity8_qmltest_data(Stages SizeHintField)
104+add_unity8_qmltest_data(Stages SurfaceManagerControls)
105+add_unity8_qmltest_data(Stages SurfaceManagerField)
95106add_unity8_qmltest(Tutorial Tutorial LIGHTDM)
96107add_unity8_qmltest(Wizard Wizard ENVIRONMENT "OXIDE_NO_SANDBOX=1")
97108add_unity8_qmltest(utils/Unity/Test UnityTest)
109+add_unity8_qmltest_data(utils/Unity/Test MockObjectForInstanceOfTest)
110+add_unity8_qmltest_data(utils/Unity/Test MockObjectForInstanceOfTestChild)
tests/qmltests/Components/CMakeLists.txt+4
@@ -16,6 +16,10 @@ target_link_libraries(DragHandleTestExec UbuntuGesturesQml UbuntuGestures)
1616
1717add_unity8_uitest(DragHandle DragHandleTestExec ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/plugins/Ubuntu/Gestures)
1818add_manual_qml_test(. DragHandle IMPORT_PATHS ${UNITY_IMPORT_PATHS})
19+add_unity8_qmltest_data(tst_DragHandle BidirectionalShowable)
20+add_unity8_qmltest_data(tst_DragHandle HorizontalShowable)
21+add_unity8_qmltest_data(tst_DragHandle SimpleButton)
22+add_unity8_qmltest_data(tst_DragHandle VerticalShowable)
1923
2024########## tst_EdgeDragEvaluator
2125add_executable(EdgeDragEvaluatorTestExec tst_EdgeDragEvaluator.cpp)
tests/qmltests/tst_Shell.qml+2−2
@@ -570,8 +570,8 @@ Rectangle {
570570 hints: {"x-canonical-private-affirmative-tint": "true"},
571571 summary: "Tom Ato",
572572 body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
573− icon: "../../tests/graphics/avatars/funky.png",
574− secondaryIcon: "../../tests/graphics/applicationIcons/facebook.png",
573+ icon: Qt.resolvedUrl("../graphics/avatars/funky.png"),
574+ secondaryIcon: Qt.resolvedUrl("../graphics/applicationIcons/facebook.png"),
575575 actions: [{ id: "ok_id", label: "Ok"},
576576 { id: "cancel_id", label: "Cancel"},
577577 { id: "notreally_id", label: "Not really"},
tests/uqmlscene/CMakeLists.txt+4
@@ -23,3 +23,7 @@ target_link_libraries(uqmlscene
2323 ${XCB_LDFLAGS}
2424 UbuntuGestures
2525 )
26+
27+install(TARGETS uqmlscene
28+ RUNTIME DESTINATION ${SHELL_PRIVATE_LIBDIR}
29+ )
tests/utils/modules/Unity/Test/CMakeLists.txt+4−2
@@ -26,7 +26,9 @@ if (ENABLE_TOUCH_EMULATION)
2626 target_link_libraries(UnityTestQml ${MOUSETOUCHADAPTOR_LIBS_LDFLAGS})
2727endif()
2828
29+# To find libUbuntuGestures.so
30+set_target_properties(UnityTestQml PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}")
31+
2932qt5_use_modules(UnityTestQml Core Quick Test)
3033
31−export_qmlfiles(Unity.Test Unity/Test)
32−export_qmlplugin(Unity.Test 0.1 Unity/Test TARGETS UnityTestQml)
34+add_unity8_mock(Unity.Test 0.1 Unity/Test PREFIX utils TARGETS UnityTestQml)