on xenial help sign in
Generate meta test scripts and use them for autopkgtests
e5c9087Michael Terry
cmake/modules/QmlTest.cmake+51−15
@@ -258,16 +258,36 @@ function(add_manual_test COMPONENT_NAME TARGET)
258endfunction()
258endfunction()
259
259
260
260
261−################### INTERNAL ####################
261+# add_meta_test(target)
262+#
263+# Adds a test target that will run one of our "meta" test targets, like
264+# xvfbuitests. This script will run the specified suite of tests on an
265+# installed system.
262
266
263−function(add_test_target TARGET_NAME)
267+function(add_meta_test TARGET_NAME)
264− cmake_parse_arguments(TEST "" "" "COMMAND;ENVIRONMENT;DEPENDS" ${ARGN})
268+ cmake_parse_arguments(TEST "" "" "DEPENDS" ${ARGN})
265
269
266− add_custom_target(${TARGET_NAME}
270+ add_custom_target(${TARGET_NAME})
267− env ${TEST_ENVIRONMENT}
271+
268− ${TEST_COMMAND}
272+ set(filename "${CMAKE_BINARY_DIR}/tests/scripts/${TARGET_NAME}.sh")
273+ file(WRITE "${filename}" "#!/bin/sh\n\nset -e\n\n")
274+
269− DEPENDS ${TEST_DEPENDS}
275+ add_meta_dependencies(${TARGET_NAME} DEPENDS ${TEST_DEPENDS})
276+ # else we will write the rest of the script as we add cmake targets
277+
278+ install(FILES "${filename}"
279+ PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE
280+ GROUP_EXECUTE GROUP_READ
281+ WORLD_EXECUTE WORLD_READ
282+ DESTINATION "${SHELL_PRIVATE_LIBDIR}/tests/scripts"
270 )
283 )
284+endfunction()
285+
286+
287+################### INTERNAL ####################
288+
289+function(install_test_script TARGET_NAME)
290+ cmake_parse_arguments(TEST "" "" "COMMAND;ENVIRONMENT" ${ARGN})
271
291
272 # Now write the above test into a shell script that we can run on an
292 # Now write the above test into a shell script that we can run on an
273 # installed system.
293 # installed system.
@@ -279,10 +299,7 @@ function(add_test_target TARGET_NAME)
279 set(script "${script}export UNITY_TESTING_LIBDIR=\"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}\"\n")
299 set(script "${script}export UNITY_TESTING_LIBDIR=\"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}\"\n")
280 set(script "${script}\n")
300 set(script "${script}\n")
281 foreach(ONE_CMD ${TEST_COMMAND})
301 foreach(ONE_CMD ${TEST_COMMAND})
282− if (NOT ONE_CMD MATCHES "\\$\\(")
283− # skip variables that look like subcommands like $(FUNCTION)
284− set(script "${script}'${ONE_CMD}' ")
302+ set(script "${script}'${ONE_CMD}' ")
285− endif()
286 endforeach()
303 endforeach()
287 set(script "${script}$@")
304 set(script "${script}$@")
288
305
@@ -331,6 +348,20 @@ function(add_test_target TARGET_NAME)
331 )
348 )
332endfunction()
349endfunction()
333
350
351+function(add_meta_dependencies UPSTREAM_TARGET)
352+ cmake_parse_arguments(TEST "" "" "DEPENDS" ${ARGN})
353+
354+ foreach(depend ${TEST_DEPENDS})
355+ add_dependencies(${UPSTREAM_TARGET} ${depend})
356+
357+ # add target to the meta test script that we will install on system
358+ set(filename "${CMAKE_BINARY_DIR}/tests/scripts/${UPSTREAM_TARGET}.sh")
359+ if (EXISTS "${filename}")
360+ file(APPEND "${filename}" "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/tests/scripts/${depend}.sh\n")
361+ endif()
362+ endforeach()
363+endfunction()
364+
334# add_qmltest_target(target_name target
365# add_qmltest_target(target_name target
335# COMMAND test_exe [arg1 [...]] # execute this test with arguments
366# COMMAND test_exe [arg1 [...]] # execute this test with arguments
336# [...] # see above for available arguments:
367# [...] # see above for available arguments:
@@ -347,12 +378,17 @@ function(add_qmltest_target TARGET_NAME TARGET)
347 set(function "$(FUNCTION)")
378 set(function "$(FUNCTION)")
348 endif()
379 endif()
349
380
350− add_test_target(${TARGET_NAME}
381+ add_custom_target(${TARGET_NAME}
351− ENVIRONMENT ${QMLTEST_ENVIRONMENT}
382+ env ${QMLTEST_ENVIRONMENT}
352− COMMAND ${QMLTEST_COMMAND} ${function}
383+ ${QMLTEST_COMMAND} ${function}
353 DEPENDS ${TARGET} ${QMLTEST_DEPENDS}
384 DEPENDS ${TARGET} ${QMLTEST_DEPENDS}
354 )
385 )
355
386
387+ install_test_script(${TARGET_NAME}
388+ ENVIRONMENT ${QMLTEST_ENVIRONMENT}
389+ COMMAND ${QMLTEST_COMMAND}
390+ )
391+
356 if(QMLTEST_ADD_TEST)
392 if(QMLTEST_ADD_TEST)
357 add_test(
393 add_test(
358 NAME ${TARGET_NAME}
394 NAME ${TARGET_NAME}
@@ -370,7 +406,7 @@ function(add_qmltest_target TARGET_NAME TARGET)
370 endif()
406 endif()
371
407
372 foreach(UPSTREAM_TARGET ${QMLTEST_TARGETS})
408 foreach(UPSTREAM_TARGET ${QMLTEST_TARGETS})
373− add_dependencies(${UPSTREAM_TARGET} ${TARGET_NAME})
409+ add_meta_dependencies(${UPSTREAM_TARGET} DEPENDS ${TARGET_NAME})
374 endforeach()
410 endforeach()
375endfunction()
411endfunction()
376
412
debian/control+2
@@ -177,6 +177,8 @@ Multi-Arch: same
177Pre-Depends: ${misc:Pre-Depends},
177Pre-Depends: ${misc:Pre-Depends},
178Depends: dbus-test-runner,
178Depends: dbus-test-runner,
179 qtdeclarative5-dev-tools,
179 qtdeclarative5-dev-tools,
180+ unity8 (= ${source:Version}),
181+ xvfb,
180 ${misc:Depends},
182 ${misc:Depends},
181 ${shlibs:Depends},
183 ${shlibs:Depends},
182Provides: unity-application-impl,
184Provides: unity-application-impl,
debian/tests/control+2−3
@@ -1,8 +1,7 @@
1Tests: qmluitests.sh
1Tests: qmluitests.sh
2Restrictions: allow-stderr
2Restrictions: allow-stderr
3−Depends: @,
3+Depends: dpkg-dev,
4− @builddeps@,
4+ unity8-tests,
5− xvfb,
6
5
7Tests: autopilot.sh
6Tests: autopilot.sh
8Restrictions: allow-stderr,
7Restrictions: allow-stderr,
debian/tests/qmluitests.sh+3−15
@@ -1,21 +1,9 @@
1#!/bin/sh
1#!/bin/sh
2+# -*- Mode: sh; indent-tabs-mode: nil; tab-width: 4 -*-
2
3
3# log all commands and abort on error
4# log all commands and abort on error
4set -xe
5set -xe
5
6
6−SHELL_QML_PATH=$(pkg-config --variable=plugindir unity-shell-api)
7+DEB_HOST_MULTIARCH=$(dpkg-architecture -qDEB_HOST_MULTIARCH)
7−UNITY_SOURCE_DIR=$(readlink -f $(dirname $(readlink -f $0))/../..)
8
8
9−dh_auto_configure -- -DCMAKE_INSTALL_LOCALSTATEDIR="/var" \
9+/usr/lib/$DEB_HOST_MULTIARCH/unity8/tests/scripts/xvfballtests
10− -DARTIFACTS_DIR=${ADT_ARTIFACTS} \
11− -DUNITY_PLUGINPATH=${SHELL_QML_PATH} \
12− -DUNITY_MOCKPATH=${SHELL_QML_PATH}/mocks
13−dh_auto_build --parallel -- -C tests/mocks
14−dh_auto_build --parallel -- -C tests/plugins
15−dh_auto_build --parallel -- -C tests/qmltests
16−dh_auto_build --parallel -- -C tests/uqmlscene
17−dh_auto_build --parallel -- -C tests/utils
18−
19−export UNITY_SOURCE_DIR
20−
21−dh_auto_build --parallel -- -k xvfballtests
tests/CMakeLists.txt+5−8
@@ -1,17 +1,14 @@
1include(QmlTest)
1include(QmlTest)
2
2
3# QML tests that do not require graphical capabilities.
3# QML tests that do not require graphical capabilities.
4−add_custom_target(unittests)
4+add_meta_test(unittests)
5
5
6# QML tests that require graphical capabilities.
6# QML tests that require graphical capabilities.
7−add_custom_target(uitests)
7+add_meta_test(uitests)
8−add_custom_target(xvfbuitests)
8+add_meta_test(xvfbuitests)
9
9
10−add_custom_target(alltests)
11−add_dependencies(alltests unittests uitests)
10+add_meta_test(alltests DEPENDS unittests uitests)
12−
13−add_custom_target(xvfballtests)
14−add_dependencies(xvfballtests unittests xvfbuitests)
11+add_meta_test(xvfballtests DEPENDS unittests xvfbuitests)
15
12
16# Support libraries and plugins
13# Support libraries and plugins
17add_subdirectory(mocks)
14add_subdirectory(mocks)