From 3889b34ec34fd47aa8eb8d32e4a39de9ea32c569 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 22 Jan 2013 19:43:54 +0400 Subject: [PATCH] Add option to run java tests with run.py --- cmake/OpenCVModule.cmake | 1 + modules/java/CMakeLists.txt | 6 +++ modules/java/test/CMakeLists.txt | 85 +++++++++++++++----------------- modules/java/test/build.xml | 16 ++++-- modules/ts/misc/run.py | 14 ++++++ 5 files changed, 73 insertions(+), 49 deletions(-) diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake index d479093867..b6d129a267 100644 --- a/cmake/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -461,6 +461,7 @@ macro(ocv_create_module) OUTPUT_NAME "${the_module}${OPENCV_DLLVERSION}" DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} + LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} INSTALL_NAME_DIR lib ) diff --git a/modules/java/CMakeLists.txt b/modules/java/CMakeLists.txt index 4ab68cfd01..55d8153b28 100644 --- a/modules/java/CMakeLists.txt +++ b/modules/java/CMakeLists.txt @@ -303,6 +303,12 @@ set_target_properties(${the_module} PROPERTIES LINK_INTERFACE_LIBRARIES "" ) +if(ANDROID) + set_target_properties(${the_module} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}) +else() + set_target_properties(${the_module} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}) +endif() + if(ENABLE_SOLUTION_FOLDERS) set_target_properties(${the_module} PROPERTIES FOLDER "bindings") endif() diff --git a/modules/java/test/CMakeLists.txt b/modules/java/test/CMakeLists.txt index b2c8d10ae3..8f3021991d 100644 --- a/modules/java/test/CMakeLists.txt +++ b/modules/java/test/CMakeLists.txt @@ -1,80 +1,77 @@ ocv_check_dependencies(opencv_java ${OPENCV_MODULE_opencv_java_OPT_DEPS} ${OPENCV_MODULE_opencv_java_REQ_DEPS}) -if(NOT OCV_DEPENDENCIES_FOUND OR NOT ANT_EXECUTABLE) +if(NOT OCV_DEPENDENCIES_FOUND) return() endif() -# TODO: This has the same name as the Android test project. That project should -# probably be renamed. project(opencv_test_java) set(opencv_test_java_bin_dir "${CMAKE_CURRENT_BINARY_DIR}/.build") - set(android_source_dir "${CMAKE_CURRENT_SOURCE_DIR}/../android_test") - set(java_source_dir ${CMAKE_CURRENT_SOURCE_DIR}) # get project sources -file(GLOB_RECURSE opencv_test_java_files RELATIVE "${android_source_dir}" "${android_source_dir}/res/*" "${android_source_dir}/src/*") -ocv_list_filterout(opencv_test_java_files ".svn") -ocv_list_filterout(opencv_test_java_files ".*#.*") +file(GLOB_RECURSE opencv_test_java_files RELATIVE "${android_source_dir}" "${android_source_dir}/res/*" "${android_source_dir}/src/*.java") # These are the files that need to be updated for pure Java. -ocv_list_filterout(opencv_test_java_files ".*OpenCVTestCase.*") -ocv_list_filterout(opencv_test_java_files ".*OpenCVTestRunner.*") +ocv_list_filterout(opencv_test_java_files "OpenCVTest(Case|Runner).java") # These files aren't for desktop Java. -ocv_list_filterout(opencv_test_java_files ".*android.*") +ocv_list_filterout(opencv_test_java_files "/android/") # These are files updated for pure Java. file(GLOB_RECURSE modified_files RELATIVE "${java_source_dir}" "${java_source_dir}/src/*") -ocv_list_filterout(modified_files ".svn") -ocv_list_filterout(modified_files ".*#.*") # These are extra jars needed to run the tests. -file(GLOB_RECURSE lib_files RELATIVE "${java_source_dir}" "${java_source_dir}/lib/*") -ocv_list_filterout(lib_files ".svn") -ocv_list_filterout(lib_files ".*#.*") +file(GLOB_RECURSE lib_files RELATIVE "${java_source_dir}" "${java_source_dir}/lib/*.jar") # copy sources out from the build tree set(opencv_test_java_file_deps "") foreach(f ${opencv_test_java_files}) - add_custom_command( - OUTPUT "${opencv_test_java_bin_dir}/${f}" - COMMAND ${CMAKE_COMMAND} -E copy "${android_source_dir}/${f}" "${opencv_test_java_bin_dir}/${f}" - MAIN_DEPENDENCY "${android_source_dir}/${f}" - COMMENT "Copying ${f}") + add_custom_command(OUTPUT "${opencv_test_java_bin_dir}/${f}" + COMMAND ${CMAKE_COMMAND} -E copy "${android_source_dir}/${f}" "${opencv_test_java_bin_dir}/${f}" + DEPENDS "${android_source_dir}/${f}" + COMMENT "Copying ${f}" + ) list(APPEND opencv_test_java_file_deps "${android_source_dir}/${f}" "${opencv_test_java_bin_dir}/${f}") endforeach() # Overwrite select Android sources with Java-specific sources. # Also, copy over the libs we'll need for testing. foreach(f ${modified_files} ${lib_files}) - add_custom_command( - OUTPUT "${opencv_test_java_bin_dir}/${f}" - COMMAND ${CMAKE_COMMAND} -E copy "${java_source_dir}/${f}" "${opencv_test_java_bin_dir}/${f}" - MAIN_DEPENDENCY "${java_source_dir}/${f}" - COMMENT "Copying ${f}") - list(APPEND opencv_test_java_file_deps "${java_source_dir}/${f}") + add_custom_command(OUTPUT "${opencv_test_java_bin_dir}/${f}" + COMMAND ${CMAKE_COMMAND} -E copy "${java_source_dir}/${f}" "${opencv_test_java_bin_dir}/${f}" + DEPENDS "${java_source_dir}/${f}" + COMMENT "Copying ${f}" + ) + list(APPEND opencv_test_java_file_deps "${java_source_dir}/${f}" "${opencv_test_java_bin_dir}/${f}") endforeach() # Copy the OpenCV jar after it has been generated. -add_custom_command( - OUTPUT "${opencv_test_java_bin_dir}/bin/${JAR_NAME}" - COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/bin/${JAR_NAME}" "${opencv_test_java_bin_dir}/bin/${JAR_NAME}" - COMMENT "Copying the OpenCV jar") -add_custom_target(copy_opencv_jar ALL SOURCES "${opencv_test_java_bin_dir}/bin/${JAR_NAME}") -# ${the_module} is the target for the Java jar. -add_dependencies(copy_opencv_jar ${the_module}) +add_custom_command(OUTPUT "${opencv_test_java_bin_dir}/bin/${JAR_NAME}" + COMMAND ${CMAKE_COMMAND} -E copy "${JAR_FILE}" "${opencv_test_java_bin_dir}/bin/${JAR_NAME}" + DEPENDS "${JAR_FILE}" + COMMENT "Copying the OpenCV jar" + ) -# Copy the ant build file. -file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/build.xml" DESTINATION "${opencv_test_java_bin_dir}") +add_custom_command(OUTPUT "${opencv_test_java_bin_dir}/build.xml" + COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/build.xml" "${opencv_test_java_bin_dir}/build.xml" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/build.xml" + COMMENT "Copying build.xml" + ) # Create a script for running the Java tests and place it in build/bin. -if(WIN32) - file(WRITE "${CMAKE_BINARY_DIR}/bin/opencv_test_java.cmd" "cd ${opencv_test_java_bin_dir}\nset PATH=${EXECUTABLE_OUTPUT_PATH}/Release;%PATH%\nant -DjavaLibraryPath=${EXECUTABLE_OUTPUT_PATH}/Release buildAndTest") - file(WRITE "${CMAKE_BINARY_DIR}/bin/opencv_test_java_D.cmd" "cd ${opencv_test_java_bin_dir}\nset PATH=${EXECUTABLE_OUTPUT_PATH}/Debug;%PATH%\nant -DjavaLibraryPath=${EXECUTABLE_OUTPUT_PATH}/Debug buildAndTest") -else() - file(WRITE "${CMAKE_BINARY_DIR}/bin/opencv_test_java.sh" "cd ${opencv_test_java_bin_dir};\nant -DjavaLibraryPath=${LIBRARY_OUTPUT_PATH} buildAndTest;\ncd -") -endif() +#if(WIN32) + #file(WRITE "${CMAKE_BINARY_DIR}/bin/opencv_test_java.cmd" "cd ${opencv_test_java_bin_dir}\nset PATH=${EXECUTABLE_OUTPUT_PATH}/Release;%PATH%\nant -DjavaLibraryPath=${EXECUTABLE_OUTPUT_PATH}/Release buildAndTest") + #file(WRITE "${CMAKE_BINARY_DIR}/bin/opencv_test_java_D.cmd" "cd ${opencv_test_java_bin_dir}\nset PATH=${EXECUTABLE_OUTPUT_PATH}/Debug;%PATH%\nant -DjavaLibraryPath=${EXECUTABLE_OUTPUT_PATH}/Debug buildAndTest") +#else() + #file(WRITE "${CMAKE_BINARY_DIR}/bin/opencv_test_java.sh" "cd ${opencv_test_java_bin_dir};\nant -DjavaLibraryPath=${LIBRARY_OUTPUT_PATH} buildAndTest;\ncd -") +#endif() + +add_custom_command(OUTPUT "${opencv_test_java_bin_dir}/build/jar/opencv-test.jar" + COMMAND "${ANT_EXECUTABLE}" build + WORKING_DIRECTORY "${opencv_test_java_bin_dir}" + DEPENDS ${opencv_test_java_file_deps} "${opencv_test_java_bin_dir}/build.xml" "${CMAKE_CURRENT_SOURCE_DIR}/build.xml" "${JAR_FILE}" "${opencv_test_java_bin_dir}/bin/${JAR_NAME}" + COMMENT "Build Java tests" + ) -add_custom_target(${PROJECT_NAME} ALL SOURCES ${opencv_test_java_file_deps}) -add_dependencies(opencv_tests ${PROJECT_NAME}) +add_custom_target(${PROJECT_NAME} ALL SOURCES "${opencv_test_java_bin_dir}/build/jar/opencv-test.jar") +add_dependencies(${PROJECT_NAME} ${the_module}) diff --git a/modules/java/test/build.xml b/modules/java/test/build.xml index 5843f7438e..11b25c66f4 100644 --- a/modules/java/test/build.xml +++ b/modules/java/test/build.xml @@ -16,7 +16,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -35,6 +35,7 @@ + @@ -43,13 +44,18 @@ - - - + + + + + + + + diff --git a/modules/ts/misc/run.py b/modules/ts/misc/run.py index d6e61d327d..4351713715 100755 --- a/modules/ts/misc/run.py +++ b/modules/ts/misc/run.py @@ -69,6 +69,8 @@ parse_patterns = ( {'name': "ndk_path", 'default': None, 'pattern': re.compile("^(?:ANDROID_NDK|ANDROID_STANDALONE_TOOLCHAIN)?:PATH=(.*)$")}, {'name': "android_abi", 'default': None, 'pattern': re.compile("^ANDROID_ABI:STRING=(.*)$")}, {'name': "android_executable", 'default': None, 'pattern': re.compile("^ANDROID_EXECUTABLE:FILEPATH=(.*android.*)$")}, + {'name': "ant_executable", 'default': None, 'pattern': re.compile("^ANT_EXECUTABLE:FILEPATH=(.*ant.*)$")}, + {'name': "java_test_binary_dir", 'default': None, 'pattern': re.compile("^opencv_test_java_BINARY_DIR:STATIC=(.*)$")}, {'name': "is_x64", 'default': "OFF", 'pattern': re.compile("^CUDA_64_BIT_DEVICE_CODE:BOOL=(ON)$")},#ugly( {'name': "cmake_generator", 'default': None, 'pattern': re.compile("^CMAKE_GENERATOR:INTERNAL=(.+)$")}, {'name': "cxx_compiler", 'default': None, 'pattern': re.compile("^CMAKE_CXX_COMPILER:FILEPATH=(.+)$")}, @@ -431,6 +433,8 @@ class TestSuite(object): if self.tests_dir and os.path.isdir(self.tests_dir): files = glob.glob(os.path.join(self.tests_dir, self.nameprefix + "*")) files = [f for f in files if self.isTest(f)] + if self.ant_executable and self.java_test_binary_dir: + files.append("java") return files return [] @@ -740,6 +744,16 @@ class TestSuite(object): if os.path.isfile(hostlogpath): return hostlogpath return None + elif path == "java": + cmd = [self.ant_executable, "-DjavaLibraryPath=" + self.tests_dir, "buildAndTest"] + + print >> _stderr, "Run command:", " ".join(cmd) + try: + Popen(cmd, stdout=_stdout, stderr=_stderr, cwd = self.java_test_binary_dir + "/.build").wait() + except OSError: + pass + + return None else: cmd = [exe] if self.options.help: