From 9d34e51cdb7ccc74eaf851f1784433616bc9c31a Mon Sep 17 00:00:00 2001 From: Zack Galbreath Date: Fri, 3 Feb 2017 13:22:36 -0500 Subject: AndroidTestUtilities: ignore exit status of ls adb used to suffer from a bug where `adb shell` would return 0 irrespective the exit status of the underlying process that it executed. This is now fixed for newer versions of Android (N+). As a result, attempting to `adb shell ls` a nonexistent file can now result in a non-zero exit status. Updating check_device_file_exists to ignore the exit status of `adb shell` fixes this bug for newer Android devices. --- Modules/AndroidTestUtilities/PushToAndroidDevice.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Modules/AndroidTestUtilities/PushToAndroidDevice.cmake b/Modules/AndroidTestUtilities/PushToAndroidDevice.cmake index d8ca730..04529b1 100644 --- a/Modules/AndroidTestUtilities/PushToAndroidDevice.cmake +++ b/Modules/AndroidTestUtilities/PushToAndroidDevice.cmake @@ -39,7 +39,9 @@ function(android_push_test_files_to_device) # if(file_exists) will return true. macro(check_device_file_exists device_file file_exists) set(${file_exists} "") - execute_adb_command(shell ls ${device_file}) + execute_process( + COMMAND ${adb_executable} shell ls ${device_file} + OUTPUT_VARIABLE out_var ERROR_VARIABLE out_var) if(NOT out_var) # when a directory exists but is empty the output is empty set(${file_exists} "YES") else() -- cgit v0.12 From 8a5cb84b0e5ef3deac4e241d0d4f3e9932daadaa Mon Sep 17 00:00:00 2001 From: Zack Galbreath Date: Fri, 3 Feb 2017 15:44:51 -0500 Subject: AndroidTestUtilities: do not require ExternalData unconditionally Attempting to use AndroidTestUtilities to simply install some local files on device can result in the following error: Neither ExternalData_URL_TEMPLATES nor ExternalData_OBJECT_STORES is set We no longer require these ExternalData-specific variables to be set if no such remote data files are requested. Fixes: #16529 --- Modules/AndroidTestUtilities.cmake | 17 ++++++++++++----- Tests/RunCMake/AndroidTestUtilities/RunCMakeTest.cmake | 1 + Tests/RunCMake/AndroidTestUtilities/SetupTest4.cmake | 13 +++++++++++++ .../AndroidTestUtilities/SetupTest4Build-check.cmake | 5 +++++ 4 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 Tests/RunCMake/AndroidTestUtilities/SetupTest4.cmake create mode 100644 Tests/RunCMake/AndroidTestUtilities/SetupTest4Build-check.cmake diff --git a/Modules/AndroidTestUtilities.cmake b/Modules/AndroidTestUtilities.cmake index a0a74fa..62d04f3 100644 --- a/Modules/AndroidTestUtilities.cmake +++ b/Modules/AndroidTestUtilities.cmake @@ -110,11 +110,18 @@ function(android_add_test_data test_name) endforeach() set(DATA_TARGET_NAME "${test_name}") - ExternalData_Expand_Arguments( - ${DATA_TARGET_NAME} - extern_data_output - ${AST_FILES}) - ExternalData_Add_Target(${DATA_TARGET_NAME}) + string(FIND "${AST_FILES}" "DATA{" data_files_found) + if(${data_files_found} GREATER "-1") + # Use ExternalData if any DATA{} files were found. + ExternalData_Expand_Arguments( + ${DATA_TARGET_NAME} + extern_data_output + ${AST_FILES}) + ExternalData_Add_Target(${DATA_TARGET_NAME}) + else() + add_custom_target(${DATA_TARGET_NAME} ALL) + set(extern_data_output ${AST_FILES}) + endif() # For regular files on Linux, just copy them directly. foreach(path ${AST_FILES}) diff --git a/Tests/RunCMake/AndroidTestUtilities/RunCMakeTest.cmake b/Tests/RunCMake/AndroidTestUtilities/RunCMakeTest.cmake index f0ae24b..7d031d4 100644 --- a/Tests/RunCMake/AndroidTestUtilities/RunCMakeTest.cmake +++ b/Tests/RunCMake/AndroidTestUtilities/RunCMakeTest.cmake @@ -18,3 +18,4 @@ endfunction() run_ATU(SetupTest1 "") run_ATU(SetupTest2 "tests") run_ATU(SetupTest3 "tests") +run_ATU(SetupTest4 "") diff --git a/Tests/RunCMake/AndroidTestUtilities/SetupTest4.cmake b/Tests/RunCMake/AndroidTestUtilities/SetupTest4.cmake new file mode 100644 index 0000000..9a27266 --- /dev/null +++ b/Tests/RunCMake/AndroidTestUtilities/SetupTest4.cmake @@ -0,0 +1,13 @@ +enable_testing() +include(AndroidTestUtilities) + +find_program(adb_executable adb) + +set(test_files "data/a.txt") + +set(ANDROID 1) + +android_add_test_data(setup_test + FILES ${test_files} + DEVICE_TEST_DIR "/data/local/tests/example1" + DEVICE_OBJECT_STORE "/sdcard/.ExternalData/SHA") diff --git a/Tests/RunCMake/AndroidTestUtilities/SetupTest4Build-check.cmake b/Tests/RunCMake/AndroidTestUtilities/SetupTest4Build-check.cmake new file mode 100644 index 0000000..ef7569d --- /dev/null +++ b/Tests/RunCMake/AndroidTestUtilities/SetupTest4Build-check.cmake @@ -0,0 +1,5 @@ +include(${CMAKE_CURRENT_LIST_DIR}/check.cmake) +compare_build_to_expected(FILES + "data/a.txt" + ) +check_for_setup_test() -- cgit v0.12