# Rules for running robolectric tests.
#
# Uses the following variables:
#
#   LOCAL_JAVA_LIBRARIES
#   LOCAL_STATIC_JAVA_LIBRARIES
#   LOCAL_ROBOTEST_FAILURE_FATAL
#   LOCAL_ROBOTEST_TIMEOUT
#   LOCAL_TEST_PACKAGE
#   LOCAL_ROBOTEST_FILES
#   ROBOTEST_FAILURE_FATAL
#   ROBOTEST_FILTER
#   ROBOTEST_RUN_INDIVIDUALLY
#
#
# If ROBOTEST_FAILURE_FATAL is set to true then failing tests will cause a
# build failure. Otherwise failures will be logged but ignored by make.
#
# If ROBOTEST_FILTER is set to a regex then only tests matching that pattern
# will be run. This currently only works at the class level.
#
# TODO: Switch to a JUnit runner which can support method-level test
# filtering and use that rather than grep to implement ROBOTEST_FILTER.
#
# If ROBOTEST_RUN_INDIVIDUALLY is set to true, each test class will be run by a
# different JVM, preventing any interaction between different tests. This is
# significantly slower than running all tests within the same JVM, but prevents
# unwanted interactions.
#
# Tests classes are found by looking for *Test.java files in
# LOCAL_PATH recursively.

################################################
# General settings, independent of the module. #
################################################

### Used for running tests.
ifneq ($(DISABLE_ROBO_RUN_TESTS),true)
    # Where to find Robolectric.
    my_robolectric_script_path := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST))))

    my_collect_target := $(LOCAL_MODULE)-coverage
    my_report_target := $(LOCAL_MODULE)-jacoco
    .PHONY: $(my_collect_target) $(my_report_target)
    # Whether or not to ignore the result of running the robotests.
    # LOCAL_ROBOTEST_FAILURE_FATAL will take precedence over ROBOTEST_FAILURE_FATAL,
    # if present.
    my_failure_fatal := $(if $(LOCAL_ROBOTEST_FAILURE_FATAL)$(ROBOTEST_FAILURE_FATAL),true,false)
    # The timeout for the command. A value of '0' means no timeout. The default is
    # 10 minutes.
    my_timeout := $(if $(LOCAL_ROBOTEST_TIMEOUT),$(LOCAL_ROBOTEST_TIMEOUT),600)
    # Command to filter the list of test classes.
    # If not specified, defaults to including all the tests.
    my_test_filter_command := $(if $(ROBOTEST_FILTER),grep -E "$(ROBOTEST_FILTER)",)

    # The directory containing the sources.
    my_instrument_makefile_dir := $(dir $(ALL_MODULES.$(LOCAL_TEST_PACKAGE).MAKEFILE))
    my_instrument_source_dirs := $(if $(LOCAL_INSTRUMENT_SOURCE_DIRS),\
        $(LOCAL_INSTRUMENT_SOURCE_DIRS),\
        $(my_instrument_makefile_dir)src $(my_instrument_makefile_dir)java)

    my_instrument_srcjars := $(LOCAL_INSTRUMENT_SRCJARS)

    ##########################
    # Used by base_rules.mk. #
    ##########################

    LOCAL_MODULE_CLASS := ROBOLECTRIC
    # This is actually a phony target that is never built.
    LOCAL_BUILT_MODULE_STEM := test.fake
    # Since it is not built, it cannot be installed. But we will define our own
    # dist files, depending on which of the specific targets is invoked.
    LOCAL_UNINSTALLABLE_MODULE := true
    # Do not build it for checkbuild or mma
    LOCAL_DONT_CHECK_MODULE := true

    include $(BUILD_SYSTEM)/base_rules.mk


    #############################
    # Module specific settings. #
    #############################

    ### Used for running tests.

    # The list of test classes. Robolectric requires an explicit list of tests to
    # run, which is compiled from the Java files ending in "Test" within the
    # directory from which this module is invoked.
    ifeq ($(strip $(LOCAL_ROBOTEST_FILES)),)
        LOCAL_ROBOTEST_FILES := $(call find-files-in-subdirs,$(LOCAL_PATH)/src,*Test.java,.)
        LOCAL_ROBOTEST_FILES += $(call find-files-in-subdirs,$(LOCAL_PATH)/src,*Test.kt,.)
    endif
    # Convert the paths into package names by removing .java or *.kt extensions and replacing "/" with "."
    my_tests := $(sort $(subst /,.,$(basename $(LOCAL_ROBOTEST_FILES))))
    ifdef my_test_filter_command
        my_tests := $(sort $(shell echo '$(my_tests)' | tr ' ' '\n' | $(my_test_filter_command)))
    endif
    # The source jars containing the tests.
    my_srcs_jars := \
        $(foreach lib, \
            $(LOCAL_JAVA_LIBRARIES) $(LOCAL_STATIC_JAVA_LIBRARIES), \
            $(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/classes-pre-proguard.jar) \
        $(foreach lib, \
            $(LOCAL_TEST_PACKAGE), \
            $(call intermediates-dir-for,APPS,$(lib),,COMMON)/classes-pre-proguard.jar)
    # The jars needed to run the tests.
    my_jars := \
        $(my_robolectric_jars) \
        $(call java-lib-files,robolectric-host-android_all,HOST) \
        $(call java-lib-files,junitxml) \
        $(my_srcs_jars)



    # Run tests.
    my_phony_target := $(LOCAL_MODULE)
    my_target := $(LOCAL_BUILT_MODULE)
    my_filename_stem := test

    # Define rules that copy android-all jars to the intermediates folder.
    local_android_all_source_jar := $(call java-lib-files,robolectric-host-android_all,HOST)
    android_all_lib_path := prebuilts/misc/common/robolectric/android-all
    my_robolectric_path := $(intermediates.COMMON)/android-all
    copy_android_all_jar_pairs := \
      $(android_all_lib_path)/android-all-4.1.2_r1-robolectric-r1.jar:$(my_robolectric_path)/android-all-4.1.2_r1-robolectric-r1.jar \
      $(android_all_lib_path)/android-all-4.2.2_r1.2-robolectric-r1.jar:$(my_robolectric_path)/android-all-4.2.2_r1.2-robolectric-r1.jar \
      $(android_all_lib_path)/android-all-4.3_r2-robolectric-r1.jar:$(my_robolectric_path)/android-all-4.3_r2-robolectric-r1.jar \
      $(android_all_lib_path)/android-all-4.4_r1-robolectric-r2.jar:$(my_robolectric_path)/android-all-4.4_r1-robolectric-r2.jar \
      $(android_all_lib_path)/android-all-5.0.2_r3-robolectric-r0.jar:$(my_robolectric_path)/android-all-5.0.2_r3-robolectric-r0.jar \
      $(android_all_lib_path)/android-all-5.1.1_r9-robolectric-r2.jar:$(my_robolectric_path)/android-all-5.1.1_r9-robolectric-r2.jar \
      $(android_all_lib_path)/android-all-6.0.1_r3-robolectric-r1.jar:$(my_robolectric_path)/android-all-6.0.1_r3-robolectric-r1.jar \
      $(android_all_lib_path)/android-all-7.0.0_r1-robolectric-r1.jar:$(my_robolectric_path)/android-all-7.0.0_r1-robolectric-r1.jar \
      $(android_all_lib_path)/android-all-7.1.0_r7-robolectric-r1.jar:$(my_robolectric_path)/android-all-7.1.0_r7-robolectric-r1.jar \
      $(android_all_lib_path)/android-all-8.0.0_r4-robolectric-r1.jar:$(my_robolectric_path)/android-all-8.0.0_r4-robolectric-r1.jar \
      $(android_all_lib_path)/android-all-8.1.0-robolectric-4611349.jar:$(my_robolectric_path)/android-all-8.1.0-robolectric-4611349.jar \
      $(android_all_lib_path)/android-all-9-robolectric-4913185-2.jar:$(my_robolectric_path)/android-all-9-robolectric-4913185-2.jar \
      $(android_all_lib_path)/android-all-10-robolectric-5803371.jar:$(my_robolectric_path)/android-all-10-robolectric-5803371.jar \
      $(android_all_lib_path)/android-all-R-beta2-robolectric-6625208.jar:$(my_robolectric_path)/android-all-R-beta2-robolectric-6625208.jar \
      $(local_android_all_source_jar):$(my_robolectric_path)/android-all-current-robolectric-r0.jar
    copy_android_all_jars := $(call copy-many-files, $(copy_android_all_jar_pairs))

    $(my_target): $(copy_android_all_jars)

    include $(my_robolectric_script_path)/robotest-internal.mk
    # clean local variables
    my_java_args :=
    my_phony_target :=
    my_target :=

    # Target for running robolectric tests using jacoco
    my_phony_target := $(my_report_target)
    my_target := $(LOCAL_BUILT_MODULE)-coverage
    my_collect_file := $(my_target)
    my_filename_stem := coverage
    $(my_collect_target): $(my_target)
    $(my_target): $(call java-lib-files,jvm-jacoco-agent,true) $(copy_android_all_jars)

    my_coverage_dir := $(intermediates)/coverage
    my_coverage_file := $(my_coverage_dir)/jacoco.exec

    # List of packages to exclude jacoco from running
    my_jacoco_excludes := \
        org.robolectric.* \
        org.mockito.* \
        org.junit.* \
        org.objectweb.* \
        com.thoughtworks.xstream.*
    # The Jacoco agent JAR.
    my_jacoco_agent_jar := $(call java-lib-files,jvm-jacoco-agent,true)
    # Using Jacoco with Robolectric is broken in 0.7.3 <= version < 0.7.6.
    # In 0.7.6 or above, the parameter "inclnolocationclasses" is needed.
    # See https://github.com/jacoco/jacoco/pull/288 for more
    # In JDK9, if "inclnolocationclasses" is used, we also need to specify
    # exclclassloader=jdk.internal.reflect.DelegatingClassLoader
    # https://github.com/jacoco/jacoco/issues/16
    my_jacoco_agent_args = \
        destfile=$(my_coverage_file) \
        excludes=$(call normalize-path-list, $(my_jacoco_excludes)) \
        inclnolocationclasses=true \
        exclclassloader=jdk.internal.reflect.DelegatingClassLoader \
        append=false
    my_java_args := \
        -javaagent:$(my_jacoco_agent_jar)=$(call normalize-comma-list, $(my_jacoco_agent_args))
    include $(my_robolectric_script_path)/robotest-internal.mk
    # Clear temporary variables
    my_failure_fatal :=
    my_jacoco_agent_jar :=
    my_jacoco_agent_args :=
    my_jacoco_excludes :=
    my_java_args :=
    my_phony_target :=
    my_robolectric_jars :=
    my_target :=
    my_tests :=
    my_filename_stem :=

    # Target for generating code coverage reports using jacoco.exec
    my_target := $(LOCAL_BUILT_MODULE)-jacoco
    $(my_report_target): $(my_target)

    # The JAR file containing the report generation tool.
    my_coverage_report_class := com.google.android.jacoco.reporter.ReportGenerator
    my_coverage_report_jar := $(call java-lib-files,jvm-jacoco-reporter,true)
    my_coverage_srcs_jars := $(my_srcs_jars)
    my_coverage_report_dist_file := $(my_report_target)-html.zip

    ## jacoco code coverage reports
    include $(my_robolectric_script_path)/report-internal.mk
    # Clear temporary variables
    my_coverage_dir :=
    my_coverage_file :=
    my_coverage_report_class :=
    my_coverage_report_dist_file :=
    my_coverage_report_jar :=
    my_coverage_srcs_jars :=
    my_robolectric_script_path :=
    my_robolectric_path :=
    my_srcs_jars :=
    my_target :=
    my_collect_file :=

    my_instrument_makefile_dir :=
    my_instrument_source_dirs :=
    my_instrument_srcjars :=
endif
