1afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# 2afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# Copyright (C) 2011 The Android Open Source Project 3afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# 4afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# Licensed under the Apache License, Version 2.0 (the "License"); 5afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# you may not use this file except in compliance with the License. 6afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# You may obtain a copy of the License at 7afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# 8afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# http://www.apache.org/licenses/LICENSE-2.0 9afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# 10afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# Unless required by applicable law or agreed to in writing, software 11afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# distributed under the License is distributed on an "AS IS" BASIS, 12afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# See the License for the specific language governing permissions and 14afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# limitations under the License. 15afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# 16afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers 17afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersifndef ANDROID_COMMON_TEST_MK 18afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian RogersANDROID_COMMON_TEST_MK = true 19afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers 20afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersinclude art/build/Android.common_path.mk 21afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers 221fe5e5cce85a3cdc64a8d226a8ef4e6134c2b9ebAndreas Gampe# We need to set a define for the nativetest dir so that common_runtime_test will know the right 231fe5e5cce85a3cdc64a8d226a8ef4e6134c2b9ebAndreas Gampe# path. (The problem is being a 32b test on 64b device, which is still located in nativetest64). 241fe5e5cce85a3cdc64a8d226a8ef4e6134c2b9ebAndreas GampeART_TARGET_CFLAGS += -DART_TARGET_NATIVETEST_DIR=${ART_TARGET_NATIVETEST_DIR} 251fe5e5cce85a3cdc64a8d226a8ef4e6134c2b9ebAndreas Gampe 26afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# List of known broken tests that we won't attempt to execute. The test name must be the full 27afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# rule name such as test-art-host-oat-optimizing-HelloWorld64. 281c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas GampeART_TEST_KNOWN_BROKEN := \ 291c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-host-run-test-gcstress-optimizing-no-prebuild-004-SignalTest32 \ 301c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-host-run-test-gcstress-optimizing-prebuild-004-SignalTest32 \ 311c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-host-run-test-gcstress-optimizing-norelocate-004-SignalTest32 \ 321c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-host-run-test-gcstress-optimizing-relocate-004-SignalTest32 \ 331c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-host-run-test-gcverify-optimizing-no-prebuild-004-SignalTest32 \ 341c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-host-run-test-gcverify-optimizing-prebuild-004-SignalTest32 \ 351c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-host-run-test-gcverify-optimizing-norelocate-004-SignalTest32 \ 361c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-host-run-test-gcverify-optimizing-relocate-004-SignalTest32 \ 371c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-host-run-test-optimizing-no-prebuild-004-SignalTest32 \ 381c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-host-run-test-optimizing-prebuild-004-SignalTest32 \ 391c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-host-run-test-optimizing-norelocate-004-SignalTest32 \ 401c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-host-run-test-optimizing-relocate-004-SignalTest32 \ 411c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-target-run-test-gcstress-optimizing-prebuild-004-SignalTest32 \ 421c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-target-run-test-gcstress-optimizing-norelocate-004-SignalTest32 \ 431c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-target-run-test-gcstress-default-prebuild-004-SignalTest32 \ 441c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-target-run-test-gcstress-default-norelocate-004-SignalTest32 \ 451c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-target-run-test-gcstress-optimizing-relocate-004-SignalTest32 \ 461c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-target-run-test-gcstress-default-relocate-004-SignalTest32 \ 471c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-target-run-test-gcstress-optimizing-no-prebuild-004-SignalTest32 \ 481c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampe test-art-target-run-test-gcstress-default-no-prebuild-004-SignalTest32 49afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers 50f61b5377068f22c0be7b2f6e62961e620408beb2Nicolas Geoffray# List of known failing tests that when executed won't cause test execution to not finish. 51f61b5377068f22c0be7b2f6e62961e620408beb2Nicolas Geoffray# The test name must be the full rule name such as test-art-host-oat-optimizing-HelloWorld64. 52f61b5377068f22c0be7b2f6e62961e620408beb2Nicolas GeoffrayART_TEST_KNOWN_FAILING := 53afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers 54afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# Keep going after encountering a test failure? 55e7655c554403dbac5110b7e3aa875116814a8dc3Andreas GampeART_TEST_KEEP_GOING ?= true 56afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers 575242c0ab0505f0f038b15c3d934a79a6b4e5ef17Ian Rogers# Do you want all tests, even those that are time consuming? 585242c0ab0505f0f038b15c3d934a79a6b4e5ef17Ian RogersART_TEST_FULL ?= true 595242c0ab0505f0f038b15c3d934a79a6b4e5ef17Ian Rogers 605242c0ab0505f0f038b15c3d934a79a6b4e5ef17Ian Rogers# Do you want optimizing compiler tests run? 615242c0ab0505f0f038b15c3d934a79a6b4e5ef17Ian RogersART_TEST_OPTIMIZING ?= $(ART_TEST_FULL) 625242c0ab0505f0f038b15c3d934a79a6b4e5ef17Ian Rogers 635242c0ab0505f0f038b15c3d934a79a6b4e5ef17Ian Rogers# Do you want tracing tests run? 645242c0ab0505f0f038b15c3d934a79a6b4e5ef17Ian RogersART_TEST_TRACE ?= $(ART_TEST_FULL) 655242c0ab0505f0f038b15c3d934a79a6b4e5ef17Ian Rogers 66701aa645a3e61fe8866000bb66b1287196a5536aIan Rogers# Do you want tests with GC verification enabled run? 67701aa645a3e61fe8866000bb66b1287196a5536aIan RogersART_TEST_GC_VERIFY ?= $(ART_TEST_FULL) 68701aa645a3e61fe8866000bb66b1287196a5536aIan Rogers 698a14b75d876ad20f08087664070354fa6f65a029Ian Rogers# Do you want tests with the GC stress mode enabled run? 708a14b75d876ad20f08087664070354fa6f65a029Ian RogersART_TEST_GC_STRESS ?= $(ART_TEST_FULL) 718a14b75d876ad20f08087664070354fa6f65a029Ian Rogers 72a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light# Do you want run-tests with relocation enabled? 73a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex LightART_TEST_RUN_TEST_RELOCATE ?= $(ART_TEST_FULL) 74a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light 75a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light# Do you want run-tests with relocation disabled? 76a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex LightART_TEST_RUN_TEST_NO_RELOCATE ?= $(ART_TEST_FULL) 77a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light 789d722533b0ef6547ee0ab5286f65af98451c36e4Alex Light# Do you want run-tests with prebuild disabled? 799d722533b0ef6547ee0ab5286f65af98451c36e4Alex LightART_TEST_RUN_TEST_NO_PREBUILD ?= $(ART_TEST_FULL) 80a59dd80f9f48cb750d329d4d4af2d99d72b484d1Alex Light 813bb12b9bea020e2b797ec3fe6bc253d33189ed97Nicolas Geoffray# Do you want run-tests with prebuild enabled? 823bb12b9bea020e2b797ec3fe6bc253d33189ed97Nicolas GeoffrayART_TEST_RUN_TEST_PREBUILD ?= true 833bb12b9bea020e2b797ec3fe6bc253d33189ed97Nicolas Geoffray 84bfac14acef0c2327ef8c28f146dd17d009aa8669Alex Light# Do you want failed tests to have their artifacts cleaned up? 85bfac14acef0c2327ef8c28f146dd17d009aa8669Alex LightART_TEST_RUN_TEST_ALWAYS_CLEAN ?= true 86bfac14acef0c2327ef8c28f146dd17d009aa8669Alex Light 87afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# Define the command run on test failure. $(1) is the name of the test. Executed by the shell. 88afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersdefine ART_TEST_FAILED 89afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers ( [ -f $(ART_HOST_TEST_DIR)/skipped/$(1) ] || \ 90afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers (mkdir -p $(ART_HOST_TEST_DIR)/failed/ && touch $(ART_HOST_TEST_DIR)/failed/$(1) && \ 91afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers echo $(ART_TEST_KNOWN_FAILING) | grep -q $(1) \ 92afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers && (echo -e "$(1) \e[91mKNOWN FAILURE\e[0m") \ 93d2c0b097261f8c55139bfb6426c89f3d0f8deb8aIan Rogers || (echo -e "$(1) \e[91mFAILED\e[0m" >&2 ))) 94afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersendef 95afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers 96afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# Define the command run on test success. $(1) is the name of the test. Executed by the shell. 97afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# The command checks prints "PASSED" then checks to see if this was a top-level make target (e.g. 98afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# "mm test-art-host-oat-HelloWorld32"), if it was then it does nothing, otherwise it creates a file 99afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# to be printed in the passing test summary. 100afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersdefine ART_TEST_PASSED 101afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers ( echo -e "$(1) \e[92mPASSED\e[0m" && \ 102afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers (echo $(MAKECMDGOALS) | grep -q $(1) || \ 103afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers (mkdir -p $(ART_HOST_TEST_DIR)/passed/ && touch $(ART_HOST_TEST_DIR)/passed/$(1)))) 104afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersendef 105afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers 106afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# Define the command run on test success of multiple prerequisites. $(1) is the name of the test. 107afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# When the test is a top-level make target then a summary of the ran tests is produced. Executed by 108afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# the shell. 109afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersdefine ART_TEST_PREREQ_FINISHED 110afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers (echo -e "$(1) \e[32mCOMPLETE\e[0m" && \ 111afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers (echo $(MAKECMDGOALS) | grep -q -v $(1) || \ 112afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers (([ -d $(ART_HOST_TEST_DIR)/passed/ ] \ 113afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers && (echo -e "\e[92mPASSING TESTS\e[0m" && ls -1 $(ART_HOST_TEST_DIR)/passed/) \ 114afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers || (echo -e "\e[91mNO TESTS PASSED\e[0m")) && \ 115afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers ([ -d $(ART_HOST_TEST_DIR)/skipped/ ] \ 116afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers && (echo -e "\e[93mSKIPPED TESTS\e[0m" && ls -1 $(ART_HOST_TEST_DIR)/skipped/) \ 117afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers || (echo -e "\e[92mNO TESTS SKIPPED\e[0m")) && \ 118afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers ([ -d $(ART_HOST_TEST_DIR)/failed/ ] \ 1195182915657a6002672c6e1b421043f1ae6a4186aIan Rogers && (echo -e "\e[91mFAILING TESTS\e[0m" >&2 && ls -1 $(ART_HOST_TEST_DIR)/failed/ >&2) \ 120afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers || (echo -e "\e[92mNO TESTS FAILED\e[0m")) \ 121afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers && ([ ! -d $(ART_HOST_TEST_DIR)/failed/ ] && rm -r $(ART_HOST_TEST_DIR) \ 122afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers || (rm -r $(ART_HOST_TEST_DIR) && false))))) 123afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersendef 124afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers 125afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# Define the command executed by the shell ahead of running an art test. $(1) is the name of the 126afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# test. 127afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersdefine ART_TEST_SKIP 128afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers ((echo $(ART_TEST_KNOWN_BROKEN) | grep -q -v $(1) \ 129afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers && ([ ! -d $(ART_HOST_TEST_DIR)/failed/ ] || [ $(ART_TEST_KEEP_GOING) = true ])\ 130afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers && echo -e "$(1) \e[95mRUNNING\e[0m") \ 131afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers || ((mkdir -p $(ART_HOST_TEST_DIR)/skipped/ && touch $(ART_HOST_TEST_DIR)/skipped/$(1) \ 132afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers && ([ -d $(ART_HOST_TEST_DIR)/failed/ ] \ 133afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers && echo -e "$(1) \e[93mSKIPPING DUE TO EARLIER FAILURE\e[0m") \ 134afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers || echo -e "$(1) \e[93mSKIPPING BROKEN TEST\e[0m") && false)) 135afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersendef 136afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers 137afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# Create a build rule to create the dex file for a test. 138afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# $(1): module prefix, e.g. art-test-dex 139afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# $(2): input test directory in art/test, e.g. HelloWorld 140afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# $(3): target output module path (default module path is used on host) 141afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers# $(4): additional dependencies 1421a2f84e80e852b1e210ed54fa995f3d781a23bd3Ian Rogers# $(5): a make variable used to collate target dependencies, e.g ART_TEST_TARGET_OAT_HelloWorld_DEX 1431a2f84e80e852b1e210ed54fa995f3d781a23bd3Ian Rogers# $(6): a make variable used to collate host dependencies, e.g ART_TEST_HOST_OAT_HelloWorld_DEX 144afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersdefine build-art-test-dex 145afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers ifeq ($(ART_BUILD_TARGET),true) 146afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers include $(CLEAR_VARS) 147afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_MODULE := $(1)-$(2) 148afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_SRC_FILES := $(call all-java-files-under, $(2)) 149afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_NO_STANDARD_LIBRARIES := true 150afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_DEX_PREOPT := false 151afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_ADDITIONAL_DEPENDENCIES := art/build/Android.common_test.mk $(4) 152afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_MODULE_TAGS := tests 153afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_JAVA_LIBRARIES := $(TARGET_CORE_JARS) 154afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_MODULE_PATH := $(3) 155afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_DEX_PREOPT_IMAGE_LOCATION := $(TARGET_CORE_IMG_OUT) 156afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers include $(BUILD_JAVA_LIBRARY) 157532714abd50c547f0fdbe830f811d99e621e2d34Brian Carlstrom $(5) := $$(LOCAL_INSTALLED_MODULE) 158afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers endif 159afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers ifeq ($(ART_BUILD_HOST),true) 160afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers include $(CLEAR_VARS) 161afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_MODULE := $(1)-$(2) 162afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_SRC_FILES := $(call all-java-files-under, $(2)) 163afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_NO_STANDARD_LIBRARIES := true 164afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_DEX_PREOPT := false 165afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_ADDITIONAL_DEPENDENCIES := art/build/Android.common_test.mk $(4) 166afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_JAVA_LIBRARIES := $(HOST_CORE_JARS) 167afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers LOCAL_DEX_PREOPT_IMAGE := $(HOST_CORE_IMG_LOCATION) 168afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers include $(BUILD_HOST_DALVIK_JAVA_LIBRARY) 1691a2f84e80e852b1e210ed54fa995f3d781a23bd3Ian Rogers $(6) := $$(LOCAL_INSTALLED_MODULE) 170afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers endif 171afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersendef 172afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogers 173afd9acc30bdd11cdd12d8209eb994cb371c65e33Ian Rogersendif # ANDROID_COMMON_TEST_MK 174