Home | History | Annotate | Download | only in tasks
      1 # Copyright (C) 2008 The Android Open Source Project
      2 #
      3 # Licensed under the Apache License, Version 2.0 (the "License");
      4 # you may not use this file except in compliance with the License.
      5 # You may obtain a copy of the License at
      6 #
      7 #      http://www.apache.org/licenses/LICENSE-2.0
      8 #
      9 # Unless required by applicable law or agreed to in writing, software
     10 # distributed under the License is distributed on an "AS IS" BASIS,
     11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 # See the License for the specific language governing permissions and
     13 # limitations under the License.
     14 
     15 cts_dir := $(HOST_OUT)/cts
     16 cts_tools_src_dir := cts/tools
     17 
     18 cts_name := android-cts
     19 
     20 CTS_EXECUTABLE := startcts
     21 ifeq ($(HOST_OS),windows)
     22     CTS_EXECUTABLE_PATH := $(cts_tools_src_dir)/host/etc/cts.bat
     23 else
     24     CTS_EXECUTABLE_PATH := $(cts_tools_src_dir)/utils/$(CTS_EXECUTABLE)
     25 endif
     26 CTS_HOST_JAR := $(HOST_OUT_JAVA_LIBRARIES)/cts.jar
     27 
     28 DDMLIB_JAR := $(HOST_OUT_JAVA_LIBRARIES)/ddmlib-prebuilt.jar
     29 junit_host_jar := $(HOST_OUT_JAVA_LIBRARIES)/junit.jar
     30 HOSTTESTLIB_JAR := $(HOST_OUT_JAVA_LIBRARIES)/hosttestlib.jar
     31 
     32 CTS_CORE_CASE_LIST := \
     33 	android.core.tests.dom \
     34 	android.core.tests.luni.io \
     35 	android.core.tests.luni.lang \
     36 	android.core.tests.luni.net \
     37 	android.core.tests.luni.util \
     38 	android.core.tests.xml \
     39 	android.core.tests.runner
     40 
     41 -include cts/CtsTestCaseList.mk
     42 CTS_CASE_LIST := $(CTS_CORE_CASE_LIST) $(CTS_TEST_CASE_LIST)
     43 
     44 DEFAULT_TEST_PLAN := $(PRIVATE_DIR)/resource/plans
     45 
     46 $(cts_dir)/all_cts_files_stamp: PRIVATE_JUNIT_HOST_JAR := $(junit_host_jar)
     47 
     48 -include cts/CtsHostLibraryList.mk
     49 $(cts_dir)/all_cts_files_stamp: $(CTS_CASE_LIST) $(junit_host_jar) $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(ACP)
     50 # Make necessary directory for CTS
     51 	@rm -rf $(PRIVATE_CTS_DIR)
     52 	@mkdir -p $(TMP_DIR)
     53 	@mkdir -p $(PRIVATE_DIR)/docs
     54 	@mkdir -p $(PRIVATE_DIR)/tools
     55 	@mkdir -p $(PRIVATE_DIR)/repository/testcases
     56 	@mkdir -p $(PRIVATE_DIR)/repository/plans
     57 # Copy executable and JARs to CTS directory
     58 	$(hide) $(ACP) -fp $(CTS_HOST_JAR) $(CTS_EXECUTABLE_PATH) $(DDMLIB_JAR) $(PRIVATE_JUNIT_HOST_JAR) $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(PRIVATE_DIR)/tools
     59 # Change mode of the executables
     60 	$(hide) chmod ug+rwX $(PRIVATE_DIR)/tools/$(notdir $(CTS_EXECUTABLE_PATH))
     61 	$(foreach apk,$(CTS_CASE_LIST), \
     62 			$(call copy-testcase-apk,$(apk)))
     63 # Copy CTS host config to CTS directory
     64 	$(hide) $(ACP) -fp $(cts_tools_src_dir)/utils/host_config.xml $(PRIVATE_DIR)/repository/
     65 	$(hide) touch $@
     66 
     67 # Generate the test descriptions for the core-tests
     68 # Parameters:
     69 # $1 : The output file where the description should be written (without the '.xml' extension)
     70 # $2 : The AndroidManifest.xml corresponding to the test package
     71 # $3 : The name of the TestSuite generator class to use
     72 # $4 : The Android.mk corresponding to the test package (required for host-side tests only)
     73 define generate-core-test-description
     74 @echo "Generate core-test description ("$(notdir $(1))")"
     75 $(hide) java $(PRIVATE_JAVAOPTS) \
     76 	-classpath $(PRIVATE_CLASSPATH) \
     77 	$(PRIVATE_PARAMS) CollectAllTests $(1) \
     78 	$(2) $(3) $(4)
     79 endef
     80 
     81 CORE_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core,,COMMON)
     82 JUNIT_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-junit,,COMMON)
     83 RUNNER_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-junitrunner,,COMMON)
     84 SUPPORT_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-tests-support,,COMMON)
     85 DOM_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-tests-dom,,COMMON)
     86 XML_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-tests-xml,,COMMON)
     87 TESTS_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-tests,,COMMON)
     88 GEN_CLASSPATH := $(CORE_INTERMEDIATES)/classes.jar:$(JUNIT_INTERMEDIATES)/classes.jar:$(RUNNER_INTERMEDIATES)/classes.jar:$(SUPPORT_INTERMEDIATES)/classes.jar:$(DOM_INTERMEDIATES)/classes.jar:$(XML_INTERMEDIATES)/classes.jar:$(TESTS_INTERMEDIATES)/classes.jar:$(CORE_INTERMEDIATES)/javalib.jar:$(JUNIT_INTERMEDIATES)/javalib.jar:$(RUNNER_INTERMEDIATES)/javalib.jar:$(SUPPORT_INTERMEDIATES)/javalib.jar:$(DOM_INTERMEDIATES)/javalib.jar:$(XML_INTERMEDIATES)/javalib.jar:$(TESTS_INTERMEDIATES)/javalib.jar:$(HOST_OUT_JAVA_LIBRARIES)/descGen.jar:$(HOST_JDK_TOOLS_JAR)
     89 
     90 $(cts_dir)/all_cts_core_files_stamp: PRIVATE_CLASSPATH:=$(GEN_CLASSPATH)
     91 $(cts_dir)/all_cts_core_files_stamp: PRIVATE_JAVAOPTS:=-Xmx256M
     92 $(cts_dir)/all_cts_core_files_stamp: PRIVATE_PARAMS:=-Dcts.useSuppliedTestResult=true
     93 $(cts_dir)/all_cts_core_files_stamp: PRIVATE_PARAMS+=-Dcts.useEnhancedJunit=true
     94 # Why does this depend on javalib.jar instead of classes.jar?  Because
     95 # even though the tool will operate on the classes.jar files, the
     96 # build system requires that dependencies use javalib.jar.  If
     97 # javalib.jar is up-to-date, then classes.jar is as well.  Depending
     98 # on classes.jar will build the files incorrectly.
     99 $(cts_dir)/all_cts_core_files_stamp: $(CTS_CORE_CASE_LIST) $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(CORE_INTERMEDIATES)/javalib.jar $(JUNIT_INTERMEDIATES)/javalib.jar $(RUNNER_INTERMEDIATES)/javalib.jar $(SUPPORT_INTERMEDIATES)/javalib.jar $(DOM_INTERMEDIATES)/javalib.jar $(XML_INTERMEDIATES)/javalib.jar $(TESTS_INTERMEDIATES)/javalib.jar $(cts_dir)/all_cts_files_stamp | $(ACP)
    100 	$(call generate-core-test-description,$(cts_dir)/$(cts_name)/repository/testcases/android.core.tests.dom,\
    101 		cts/tests/core/dom/AndroidManifest.xml,\
    102 		tests.dom.AllTests)
    103 	$(call generate-core-test-description,$(cts_dir)/$(cts_name)/repository/testcases/android.core.tests.luni.io,\
    104 		cts/tests/core/luni-io/AndroidManifest.xml,\
    105 		tests.luni.AllTestsIo)
    106 	$(call generate-core-test-description,$(cts_dir)/$(cts_name)/repository/testcases/android.core.tests.luni.lang,\
    107 		cts/tests/core/luni-lang/AndroidManifest.xml,\
    108 		tests.luni.AllTestsLang)
    109 	$(call generate-core-test-description,$(cts_dir)/$(cts_name)/repository/testcases/android.core.tests.luni.net,\
    110 		cts/tests/core/luni-net/AndroidManifest.xml,\
    111 		tests.luni.AllTestsNet)
    112 	$(call generate-core-test-description,$(cts_dir)/$(cts_name)/repository/testcases/android.core.tests.luni.util,\
    113 		cts/tests/core/luni-util/AndroidManifest.xml,\
    114 		tests.luni.AllTestsUtil)
    115 	$(call generate-core-test-description,$(cts_dir)/$(cts_name)/repository/testcases/android.core.tests.xml,\
    116 		cts/tests/core/xml/AndroidManifest.xml,\
    117 		tests.xml.AllTests)
    118 	$(hide) touch $@
    119 
    120 
    121 # ----- Generate the test descriptions for the vm-tests -----
    122 #
    123 CORE_VM_TEST_DESC := $(cts_dir)/$(cts_name)/repository/testcases/android.core.vm-tests
    124 
    125 VMTESTS_INTERMEDIATES :=$(call intermediates-dir-for,EXECUTABLES,vm-tests,1,)
    126 # core tests only needed to get hold of junit-framework-classes
    127 CORE_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core,,COMMON)
    128 JUNIT_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-junit,,COMMON)
    129 RUNNER_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-junitrunner,,COMMON)
    130 TESTS_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-tests,,COMMON)
    131 
    132 GEN_CLASSPATH := $(CORE_INTERMEDIATES)/classes.jar:$(JUNIT_INTERMEDIATES)/classes.jar:$(RUNNER_INTERMEDIATES)/classes.jar:$(TESTS_INTERMEDIATES)/classes.jar:$(VMTESTS_INTERMEDIATES)/android.core.vm-tests.jar:$(HOST_OUT_JAVA_LIBRARIES)/descGen.jar:$(HOSTTESTLIB_JAR):$(DDMLIB_JAR):$(HOST_JDK_TOOLS_JAR)
    133 
    134 $(CORE_VM_TEST_DESC): PRIVATE_CLASSPATH:=$(GEN_CLASSPATH)
    135 $(CORE_VM_TEST_DESC): PRIVATE_PARAMS:=-Dcts.useSuppliedTestResult=true
    136 $(CORE_VM_TEST_DESC): PRIVATE_PARAMS+=-Dcts.useEnhancedJunit=true
    137 $(CORE_VM_TEST_DESC): PRIVATE_JAVAOPTS:=-Xmx256M
    138 # Please see big comment above on why this line depends on javalib.jar instead of classes.jar
    139 $(CORE_VM_TEST_DESC): vm-tests $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(CORE_INTERMEDIATES)/javalib.jar $(JUNIT_INTERMEDIATES)/javalib.jar $(RUNNER_INTERMEDIATES)/javalib.jar $(VMTESTS_INTERMEDIATES)/android.core.vm-tests.jar $(TESTS_INTERMEDIATES)/javalib.jar  $(HOSTTESTLIB_JAR) $(DDMLIB_JAR) $(cts_dir)/all_cts_files_stamp | $(ACP)
    140 	$(call generate-core-test-description,$(CORE_VM_TEST_DESC),\
    141 		cts/tests/vm-tests/AndroidManifest.xml,\
    142 		dot.junit.AllJunitHostTests, cts/tools/vm-tests/Android.mk)
    143 	$(ACP) -fv $(VMTESTS_INTERMEDIATES)/android.core.vm-tests.jar $(PRIVATE_DIR)/repository/testcases/android.core.vm-tests.jar
    144 
    145 # Move app security host-side tests to the repository
    146 APP_SECURITY_LIB := $(cts_dir)/$(cts_name)/repository/testcases/CtsAppSecurityTests.jar
    147 
    148 $(APP_SECURITY_LIB): $(HOST_OUT_JAVA_LIBRARIES)/CtsAppSecurityTests.jar $(cts_dir)/all_cts_files_stamp $(ACP)
    149 	$(ACP) -fv $(HOST_OUT_JAVA_LIBRARIES)/CtsAppSecurityTests.jar $(APP_SECURITY_LIB)
    150 
    151 # Generate the default test plan for User.
    152 # Usage: buildCts.py <testRoot> <ctsOutputDir> <tempDir> <androidRootDir> <docletPath>
    153 $(DEFAULT_TEST_PLAN): $(cts_dir)/all_cts_files_stamp $(cts_dir)/all_cts_core_files_stamp $(cts_tools_src_dir)/utils/buildCts.py $(CORE_VM_TEST_DESC) $(APP_SECURITY_LIB) $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar
    154 	$(hide) $(cts_tools_src_dir)/utils/buildCts.py cts/tests/tests/ $(PRIVATE_DIR) $(TMP_DIR) \
    155 		$(TOP) $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar
    156 
    157 # Package CTS and clean up.
    158 #
    159 # TODO:
    160 #   Pack cts.bat into the same zip file as well. See http://buganizer/issue?id=1656821 for more details
    161 INTERNAL_CTS_TARGET := $(cts_dir)/$(cts_name).zip
    162 $(INTERNAL_CTS_TARGET): PRIVATE_NAME := $(cts_name)
    163 $(INTERNAL_CTS_TARGET): PRIVATE_CTS_DIR := $(cts_dir)
    164 $(INTERNAL_CTS_TARGET): PRIVATE_DIR := $(cts_dir)/$(cts_name)
    165 $(INTERNAL_CTS_TARGET): TMP_DIR := $(cts_dir)/temp
    166 $(INTERNAL_CTS_TARGET): $(cts_dir)/all_cts_files_stamp $(DEFAULT_TEST_PLAN) $(CORE_VM_TEST_DESC)
    167 	@echo "Package CTS: $@"
    168 	$(hide) cd $(dir $@) && zip -rq $(notdir $@) $(PRIVATE_NAME)
    169 
    170 .PHONY: cts
    171 cts: $(INTERNAL_CTS_TARGET) adb
    172 $(call dist-for-goals,cts,$(INTERNAL_CTS_TARGET))
    173 
    174 define copy-testcase-apk
    175 
    176 $(hide) $(ACP) -fp $(call intermediates-dir-for,APPS,$(1))/package.apk \
    177 	$(PRIVATE_DIR)/repository/testcases/$(1).apk
    178 
    179 endef
    180