# Copyright (C) 2016 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Rules to generate a tests zip file that included test modules
# based on the configuration.

LOCAL_PATH := $(call my-dir)
include $(LOCAL_PATH)/tests/instrumentation_test_list.mk
-include $(wildcard vendor/*/build/tasks/tests/instrumentation_test_list.mk)

my_modules := \
    $(instrumentation_tests)

my_package_name := continuous_instrumentation_tests

include $(BUILD_SYSTEM)/tasks/tools/package-modules.mk

.PHONY: continuous_instrumentation_tests
continuous_instrumentation_tests : $(my_package_zip)

name := $(TARGET_PRODUCT)-continuous_instrumentation_tests-$(FILE_NAME_TAG)
$(call dist-for-goals, continuous_instrumentation_tests, $(my_package_zip):$(name).zip)

# Also build this when you run "make tests".
tests: continuous_instrumentation_tests

# Include test em files in emma metadata
ifeq ($(EMMA_INSTRUMENT_STATIC),true)
    $(EMMA_META_ZIP) : continuous_instrumentation_tests
endif

# Rules to generate an API-coverage report based on the above tests

# Coverage report output location
coverage_out := $(call intermediates-dir-for,PACKAGING,continuous_instrumentation_tests_coverage)
coverage_report := $(coverage_out)/api_coverage.html

# Framework API descriptions
api_text := frameworks/base/api/system-current.txt
api_xml := $(coverage_out)/api.xml
$(api_xml) : $(api_text) $(APICHECK)
	$(hide) echo "Converting API file to XML: $@"
	$(hide) mkdir -p $(dir $@)
	$(hide) $(APICHECK_COMMAND) -convert2xml $< $@

# CTS API coverage tool
api_coverage_exe := $(HOST_OUT_EXECUTABLES)/cts-api-coverage
dexdeps_exe := $(HOST_OUT_EXECUTABLES)/dexdeps

# APKs to measure for coverage
test_apks := $(call intermediates-dir-for,PACKAGING,continuous_instrumentation_tests)/DATA/app/*

# Rule to generate the coverage report
api_coverage_dep := $(my_package_zip) $(api_coverage_exe) $(dexdeps_exe) $(api_xml)
$(coverage_report): PRIVATE_API_COVERAGE_EXE := $(api_coverage_exe)
$(coverage_report): PRIVATE_DEXDEPS_EXE := $(dexdeps_exe)
$(coverage_report): PRIVATE_API_XML := $(api_xml)
$(coverage_report): PRIVATE_REPORT_TITLE := "APCT API Coverage Report"
$(coverage_report): PRIVATE_TEST_APKS := $(test_apks)
$(coverage_report): $(api_coverage_dep) | $(ACP)
	$(hide) mkdir -p $(dir $@)
	$(hide) $(PRIVATE_API_COVERAGE_EXE) -d $(PRIVATE_DEXDEPS_EXE) \
		-a $(PRIVATE_API_XML) -t $(PRIVATE_REPORT_TITLE) -f html -o $@ $(PRIVATE_TEST_APKS)
	@ echo $(PRIVATE_REPORT_TITLE): file://$$(cd $(dir $@); pwd)/$(notdir $@)

.PHONY: continuous_instrumentation_tests_api_coverage
continuous_instrumentation_tests_api_coverage : $(coverage_report)

# Include the coverage report in the dist folder
$(call dist-for-goals, continuous_instrumentation_tests_api_coverage, \
	$(coverage_report):$(name)-api_coverage.html)

# Also build this when you run "make tests".
# This allow us to not change the build server config.
tests : continuous_instrumentation_tests_api_coverage

# Reset temp vars
coverage_out :=
coverage_report :=
api_text :=
api_xml :=
api_coverage_exe :=
dexdeps_exe :=
test_apks :=
api_coverage_dep :=
