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 DDMLIB_JAR := $(HOST_OUT_JAVA_LIBRARIES)/ddmlib-prebuilt.jar
     21 junit_host_jar := $(HOST_OUT_JAVA_LIBRARIES)/junit.jar
     22 HOSTTESTLIB_JAR := $(HOST_OUT_JAVA_LIBRARIES)/hosttestlib.jar
     23 TF_JAR := $(HOST_OUT_JAVA_LIBRARIES)/tradefed-prebuilt.jar
     24 CTS_TF_JAR := $(HOST_OUT_JAVA_LIBRARIES)/cts-tradefed.jar
     25 CTS_TF_EXEC_PATH := $(HOST_OUT_EXECUTABLES)/cts-tradefed
     26 CTS_TF_README_PATH := $(cts_tools_src_dir)/tradefed-host/README
     27 
     28 VMTESTSTF_INTERMEDIATES :=$(call intermediates-dir-for,EXECUTABLES,vm-tests-tf,1,)
     29 VMTESTSTF_JAR := $(VMTESTSTF_INTERMEDIATES)/android.core.vm-tests-tf.jar
     30 
     31 CTS_CORE_CASE_LIST := \
     32 	android.core.tests.libcore.package.dalvik \
     33 	android.core.tests.libcore.package.com \
     34 	android.core.tests.libcore.package.sun \
     35 	android.core.tests.libcore.package.tests \
     36 	android.core.tests.libcore.package.org \
     37 	android.core.tests.libcore.package.libcore \
     38 	android.core.tests.runner
     39 
     40 # Depend on the full package paths rather than the phony targets to avoid
     41 # rebuilding the packages every time.
     42 CTS_CORE_CASES := $(foreach pkg,$(CTS_CORE_CASE_LIST),$(call intermediates-dir-for,APPS,$(pkg))/package.apk)
     43 
     44 -include cts/CtsTestCaseList.mk
     45 CTS_CASE_LIST := $(CTS_CORE_CASE_LIST) $(CTS_TEST_CASE_LIST)
     46 
     47 DEFAULT_TEST_PLAN := $(cts_dir)/$(cts_name)/resource/plans
     48 
     49 $(cts_dir)/all_cts_files_stamp: PRIVATE_JUNIT_HOST_JAR := $(junit_host_jar)
     50 
     51 $(cts_dir)/all_cts_files_stamp: $(CTS_CORE_CASES) $(CTS_TEST_CASES) $(CTS_TEST_CASE_LIST) $(junit_host_jar) $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(VMTESTSTF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(CTS_TF_README_PATH) $(ACP)
     52 # Make necessary directory for CTS
     53 	$(hide) rm -rf $(PRIVATE_CTS_DIR)
     54 	$(hide) mkdir -p $(TMP_DIR)
     55 	$(hide) mkdir -p $(PRIVATE_DIR)/docs
     56 	$(hide) mkdir -p $(PRIVATE_DIR)/tools
     57 	$(hide) mkdir -p $(PRIVATE_DIR)/repository/testcases
     58 	$(hide) mkdir -p $(PRIVATE_DIR)/repository/plans
     59 # Copy executable and JARs to CTS directory
     60 	$(hide) $(ACP) -fp $(VMTESTSTF_JAR) $(PRIVATE_DIR)/repository/testcases
     61 	$(hide) $(ACP) -fp $(DDMLIB_JAR) $(PRIVATE_JUNIT_HOST_JAR) $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(CTS_TF_README_PATH) $(PRIVATE_DIR)/tools
     62 # Change mode of the executables
     63 	$(foreach apk,$(CTS_CASE_LIST),$(call copy-testcase-apk,$(apk)))
     64 	$(foreach testcase,$(CTS_TEST_CASES),$(call copy-testcase,$(testcase)))
     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 jar file name on PRIVATE_CLASSPATH containing junit tests to search for
     72 # $4 : The package prefix of classes to include, possible empty
     73 # $5 : The directory containing vogar expectations files
     74 # $6 : The Android.mk corresponding to the test package (required for host-side tests only)
     75 define generate-core-test-description
     76 @echo "Generate core-test description ("$(notdir $(1))")"
     77 $(hide) java -Xmx256M \
     78 	-classpath $(PRIVATE_CLASSPATH):$(HOST_OUT_JAVA_LIBRARIES)/descGen.jar:$(HOST_JDK_TOOLS_JAR) \
     79 	$(PRIVATE_PARAMS) CollectAllTests $(1) $(2) $(3) "$(4)" $(5) $(6)
     80 endef
     81 
     82 CORE_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core,,COMMON)
     83 BOUNCYCASTLE_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,bouncycastle,,COMMON)
     84 APACHEXML_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,apache-xml,,COMMON)
     85 SQLITEJDBC_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,sqlite-jdbc,,COMMON)
     86 JUNIT_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-junit,,COMMON)
     87 CORETESTS_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-tests,,COMMON)
     88 
     89 GEN_CLASSPATH := $(CORE_INTERMEDIATES)/classes.jar:$(BOUNCYCASTLE_INTERMEDIATES)/classes.jar:$(APACHEXML_INTERMEDIATES)/classes.jar:$(JUNIT_INTERMEDIATES)/classes.jar:$(SQLITEJDBC_INTERMEDIATES)/javalib.jar:$(CORETESTS_INTERMEDIATES)/javalib.jar
     90 
     91 CTS_CORE_XMLS := \
     92 	$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.dalvik.xml \
     93 	$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.com.xml \
     94 	$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.sun.xml \
     95 	$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.tests.xml \
     96 	$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.org.xml \
     97 	$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.libcore.xml
     98 
     99 $(CTS_CORE_XMLS): PRIVATE_CLASSPATH:=$(GEN_CLASSPATH)
    100 # Why does this depend on javalib.jar instead of classes.jar?  Because
    101 # even though the tool will operate on the classes.jar files, the
    102 # build system requires that dependencies use javalib.jar.  If
    103 # javalib.jar is up-to-date, then classes.jar is as well.  Depending
    104 # on classes.jar will build the files incorrectly.
    105 $(CTS_CORE_XMLS): $(CTS_CORE_CASES) $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(CORE_INTERMEDIATES)/javalib.jar $(BOUNCYCASTLE_INTERMEDIATES)/javalib.jar $(APACHEXML_INTERMEDIATES)/javalib.jar $(SQLITEJDBC_INTERMEDIATES)/javalib.jar $(JUNIT_INTERMEDIATES)/javalib.jar $(CORETESTS_INTERMEDIATES)/javalib.jar | $(ACP)
    106 	$(hide) mkdir -p $(CTS_TESTCASES_OUT)
    107 	$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.dalvik,\
    108 		cts/tests/core/libcore/dalvik/AndroidManifest.xml,\
    109 		$(CORETESTS_INTERMEDIATES)/javalib.jar,dalvik,\
    110 		libcore/expectations)
    111 	$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.com,\
    112 		cts/tests/core/libcore/com/AndroidManifest.xml,\
    113 		$(CORETESTS_INTERMEDIATES)/javalib.jar,com,\
    114 		libcore/expectations)
    115 	$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.sun,\
    116 		cts/tests/core/libcore/sun/AndroidManifest.xml,\
    117 		$(CORETESTS_INTERMEDIATES)/javalib.jar,sun,\
    118 		libcore/expectations)
    119 	$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.tests,\
    120 		cts/tests/core/libcore/tests/AndroidManifest.xml,\
    121 		$(CORETESTS_INTERMEDIATES)/javalib.jar,tests,\
    122 		libcore/expectations)
    123 	$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.org,\
    124 		cts/tests/core/libcore/org/AndroidManifest.xml,\
    125 		$(CORETESTS_INTERMEDIATES)/javalib.jar,org,\
    126 		libcore/expectations)
    127 	$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.tests.libcore.package.libcore,\
    128 		cts/tests/core/libcore/libcore/AndroidManifest.xml,\
    129 		$(CORETESTS_INTERMEDIATES)/javalib.jar,libcore,\
    130 		libcore/expectations)
    131 
    132 # ----- Generate the test descriptions for the vm-tests-tf -----
    133 #
    134 CORE_VM_TEST_TF_DESC := $(CTS_TESTCASES_OUT)/android.core.vm-tests-tf.xml
    135 
    136 # core tests only needed to get hold of junit-framework-classes
    137 CORE_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core,,COMMON)
    138 JUNIT_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,core-junit,,COMMON)
    139 
    140 GEN_CLASSPATH := $(CORE_INTERMEDIATES)/classes.jar:$(JUNIT_INTERMEDIATES)/classes.jar:$(VMTESTSTF_JAR):$(DDMLIB_JAR):$(TF_JAR)
    141 
    142 $(CORE_VM_TEST_TF_DESC): PRIVATE_CLASSPATH:=$(GEN_CLASSPATH)
    143 # Please see big comment above on why this line depends on javalib.jar instead of classes.jar
    144 $(CORE_VM_TEST_TF_DESC): $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(CORE_INTERMEDIATES)/javalib.jar $(JUNIT_INTERMEDIATES)/javalib.jar $(VMTESTSTF_JAR) $(DDMLIB_JAR) | $(ACP)
    145 	$(hide) mkdir -p $(CTS_TESTCASES_OUT)
    146 	$(call generate-core-test-description,$(CTS_TESTCASES_OUT)/android.core.vm-tests-tf,\
    147 		cts/tests/vm-tests-tf/AndroidManifest.xml,\
    148 		$(VMTESTSTF_JAR),"",\
    149 		libcore/expectations,\
    150 		cts/tools/vm-tests-tf/Android.mk)
    151 
    152 # Generate the default test plan for User.
    153 # Usage: buildCts.py <testRoot> <ctsOutputDir> <tempDir> <androidRootDir> <docletPath>
    154 
    155 $(DEFAULT_TEST_PLAN): $(cts_dir)/all_cts_files_stamp $(cts_tools_src_dir)/utils/buildCts.py $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(CTS_CORE_XMLS) $(CTS_TEST_XMLS) $(CORE_VM_TEST_TF_DESC) | $(ACP)
    156 	$(hide) $(ACP) -fp $(CTS_CORE_XMLS) $(CTS_TEST_XMLS) $(CORE_VM_TEST_TF_DESC) $(PRIVATE_DIR)/repository/testcases
    157 	$(hide) $(cts_tools_src_dir)/utils/buildCts.py cts/tests/tests/ $(PRIVATE_DIR) $(TMP_DIR) \
    158 		$(TOP) $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar
    159 
    160 # Package CTS and clean up.
    161 #
    162 # TODO:
    163 #   Pack cts.bat into the same zip file as well. See http://buganizer/issue?id=1656821 for more details
    164 INTERNAL_CTS_TARGET := $(cts_dir)/$(cts_name).zip
    165 $(INTERNAL_CTS_TARGET): PRIVATE_NAME := $(cts_name)
    166 $(INTERNAL_CTS_TARGET): PRIVATE_CTS_DIR := $(cts_dir)
    167 $(INTERNAL_CTS_TARGET): PRIVATE_DIR := $(cts_dir)/$(cts_name)
    168 $(INTERNAL_CTS_TARGET): TMP_DIR := $(cts_dir)/temp
    169 $(INTERNAL_CTS_TARGET): $(cts_dir)/all_cts_files_stamp $(DEFAULT_TEST_PLAN)
    170 	$(hide) echo "Package CTS: $@"
    171 	$(hide) cd $(dir $@) && zip -rq $(notdir $@) $(PRIVATE_NAME)
    172 
    173 .PHONY: cts
    174 cts: $(INTERNAL_CTS_TARGET) adb
    175 $(call dist-for-goals,cts,$(INTERNAL_CTS_TARGET))
    176 
    177 define copy-testcase-apk
    178 
    179 $(hide) $(ACP) -fp $(call intermediates-dir-for,APPS,$(1))/package.apk \
    180 	$(PRIVATE_DIR)/repository/testcases/$(1).apk
    181 
    182 endef
    183 
    184 define copy-testcase
    185 
    186 $(hide) $(ACP) -fp $(1) $(PRIVATE_DIR)/repository/testcases/$(notdir $1)
    187 
    188 endef
    189