1LOCAL_MODULE_CLASS := FAKE 2LOCAL_IS_HOST_MODULE := true 3LOCAL_DONT_CHECK_MODULE := true 4LOCAL_UNINSTALLABLE_MODULE := true 5LOCAL_BUILT_MODULE_STEM := test.fake 6 7# Construct the runtime classpath. 8classpath_jars := $(call java-lib-files, $(test_runtime_libraries), HOST) 9 10# Construct the list of test classes from the source file names. 11test_source_files := $(call find-files-in-subdirs, $(test_source_directory), "*Test.java", .) 12# Filter out tests that will not pass running under make. 13test_source_files := $(filter-out org/robolectric/internal/GradleManifestFactoryTest.java, $(test_source_files)) 14 15# Convert the test source file paths into package names by removing ".java" extension and replacing "/" with "." 16test_class_names := $(subst /,., $(basename $(test_source_files))) 17# Remove whitespace and sort the tests in alphabetical order. 18test_class_names := $(sort $(shell echo '$(test_class_names)' | tr ' ' '\n')) 19 20include $(BUILD_SYSTEM)/base_rules.mk 21 22# Define rules that copy test resource files to the intermediates folder. 23intermediates := $(call local-intermediates-dir) 24copy_test_resource_files := 25ifdef test_resources_directory 26 test_resources_target_path := $(intermediates)/src/test/resources 27 test_resource_files := $(call find-files-in-subdirs, $(test_resources_directory), "*" -and -type f, .) 28 copy_test_resource_file_pairs := $(foreach j, $(test_resource_files), $(test_resources_directory)/$(j):$(test_resources_target_path)/$(j)) 29 copy_test_resource_files := $(call copy-many-files, $(copy_test_resource_file_pairs)) 30endif 31 32# Define rules that copy android-all jars to the intermediates folder. 33p_android_all_source_jar := $(call intermediates-dir-for, JAVA_LIBRARIES, robolectric_android-all-stub, , COMMON)/classes-with-res.jar 34android_all_source_dir := prebuilts/misc/common/robolectric/android-all 35android_all_target_dir := $(intermediates)/android-all 36copy_android_all_jar_pairs := \ 37 $(android_all_source_dir)/android-all-4.1.2_r1-robolectric-r1.jar:$(android_all_target_dir)/android-all-4.1.2_r1-robolectric-r1.jar \ 38 $(android_all_source_dir)/android-all-4.2.2_r1.2-robolectric-r1.jar:$(android_all_target_dir)/android-all-4.2.2_r1.2-robolectric-r1.jar \ 39 $(android_all_source_dir)/android-all-4.3_r2-robolectric-r1.jar:$(android_all_target_dir)/android-all-4.3_r2-robolectric-r1.jar \ 40 $(android_all_source_dir)/android-all-4.4_r1-robolectric-r2.jar:$(android_all_target_dir)/android-all-4.4_r1-robolectric-r2.jar \ 41 $(android_all_source_dir)/android-all-5.0.2_r3-robolectric-r0.jar:$(android_all_target_dir)/android-all-5.0.2_r3-robolectric-r0.jar \ 42 $(android_all_source_dir)/android-all-5.1.1_r9-robolectric-r2.jar:$(android_all_target_dir)/android-all-5.1.1_r9-robolectric-r2.jar \ 43 $(android_all_source_dir)/android-all-6.0.1_r3-robolectric-r1.jar:$(android_all_target_dir)/android-all-6.0.1_r3-robolectric-r1.jar \ 44 $(android_all_source_dir)/android-all-7.0.0_r1-robolectric-r1.jar:$(android_all_target_dir)/android-all-7.0.0_r1-robolectric-r1.jar \ 45 $(android_all_source_dir)/android-all-7.1.0_r7-robolectric-r1.jar:$(android_all_target_dir)/android-all-7.1.0_r7-robolectric-r1.jar \ 46 $(android_all_source_dir)/android-all-8.0.0_r4-robolectric-r1.jar:$(android_all_target_dir)/android-all-8.0.0_r4-robolectric-r1.jar \ 47 $(android_all_source_dir)/android-all-8.1.0-robolectric-r4458339.jar:$(android_all_target_dir)/android-all-8.1.0-robolectric-r4458339.jar \ 48 $(p_android_all_source_jar):$(android_all_target_dir)/android-all-P-robolectric-r0.jar 49copy_android_all_jars := $(call copy-many-files, $(copy_android_all_jar_pairs)) 50 51# If debugging the tests was requested, set up the JVM parameters to enable it. 52debug_test_args := 53ifdef debug_tests 54 # The arguments to the JVM needed to debug the tests. 55 # - server: wait for connection rather than connecting to a debugger 56 # - transport: how to accept debugger connections (sockets) 57 # - address: the host and port on which to accept debugger connections 58 # - suspend: do not start running any code until the debugger connects 59 debug_test_args := -Xdebug -agentlib:jdwp=server=y,transport=dt_socket,address=localhost:5005,suspend=y 60endif 61 62# Snapshot the variables so they cannot be polluted before the module is built. 63$(LOCAL_BUILT_MODULE): private_java := $(JAVA) 64$(LOCAL_BUILT_MODULE): private_debug_test_args := $(debug_test_args) 65$(LOCAL_BUILT_MODULE): private_test_base_dir := $(intermediates) 66$(LOCAL_BUILT_MODULE): private_test_class_names := $(test_class_names) 67$(LOCAL_BUILT_MODULE): private_host_jdk_tools_jar := $(HOST_JDK_TOOLS_JAR) 68$(LOCAL_BUILT_MODULE): private_android_all_dir := $(android_all_target_dir) 69$(LOCAL_BUILT_MODULE): private_classpath_jars := $(call normalize-path-list, $(classpath_jars)) 70 71.PHONY: $(LOCAL_BUILT_MODULE) 72 73# Define the basic recipe for building this module to execute the tests. 74$(LOCAL_BUILT_MODULE): $(copy_test_resource_files) $(copy_android_all_jars) $(classpath_jars) 75 $(hide) $(private_java) \ 76 -Drobolectric.offline=true \ 77 -Drobolectric.dependency.dir=$(private_android_all_dir) \ 78 -Drobolectric-tests.base-dir=$(private_test_base_dir) \ 79 $(private_debug_test_args) \ 80 -cp $(private_host_jdk_tools_jar):$(private_test_base_dir):$(private_classpath_jars) \ 81 org.junit.runner.JUnitCore \ 82 $(private_test_class_names)