# Copyright (C) 2012 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.
#
# Definitions for the Android NDK build system's internal unit tests.
#
#
# A function which names begin with -test- (e.g. -test-foo) is assumed
# to be an internal unit test. It will be run automatically by ndk-build
# if NDK_UNIT_TESTS is defined in your environment.
#
# Each test should call one of the following functions that will
# register a failure:
#
# $(call test-expect,<expected-value>,<actual-value>)
#
# This will check that <actual-value> is equal to <expected-value>.
# If not, this will print an error message and increment the failure
# counter.
#
# $(call test-assert,<expected-value>,<actual-value>)
#
# This is similar to test-expect, though it will abort the program
# immediately after displaying an error message.
#
# Here's an example that checks that the 'filter' function works correctly:
#
# -test-filter = \
# $(call test-expect,foo,$(filter bar,foo bar))
#
#
-ndk-test-start = \
$(eval _test_name := $1)\
$(eval _test_list += $1)\
$(eval _test_failed :=)\
$(info [$1 RUN])
# End current unit test.
#
-ndk-test-end = \
$(if $(_test_failed),\
$(info [$(_test_name) FAIL])$(error Aborting)\
$(eval _test_failures += $$(_test_name))\
,\
$(info [$(_test_name) OK])\
)
# Define NDK_UNIT_TESTS to 2 to dump each test-expect/assert check.
#
ifeq (2,$(NDK_UNIT_TESTS))
-ndk-test-log = $(info . $(_test_name): $1)
else
-ndk-test-log = $(empty)
endif
test-expect = \
$(call -ndk-test-log,expect '$2' == '$1')\
$(if $(call sne,$1,$2),\
$(info ERROR <$(_test_name)>:$3)\
$(info . expected value:'$1')\
$(info . actual value: '$2')\
$(eval _test_failed := true)\
)
test-assert = \
$(call -ndk-test-log,assert '$2' == '$1')\
$(if $(call sne,$1,$2),\
$(info ASSERT <$(_test_name)>:$3)\
$(info . expected value:'$1')\
$(info . actual value: '$2')\
$(eval _test_failed := true)\
$(error Aborting.)\
)
# Run all the tests, i.e. all functions that are defined with a -test-
# prefix will be called now in succession.
ndk-run-all-tests = \
$(info ================= STARTING NDK-BUILD UNIT TESTS =================)\
$(eval _test_list :=)\
$(eval _test_failures :=)\
$(foreach _test,$(filter -test-%,$(.VARIABLES)),\
$(call -ndk-test-start,$(_test))\
$(call $(_test))\
$(call -ndk-test-end)\
)\
$(eval _test_count := $$(words $$(_test_list)))\
$(eval _test_fail_count := $$(words $$(_test_failures)))\
$(if $(_test_failures),\
$(info @@@@@@@@@@@ FAILED $(_test_fail_count) of $(_test_count) NDK-BUILD UNIT TESTS @@@@@@@)\
$(foreach _test_name,$(_test_failures),\
$(info . $(_test_name)))\
,\
$(info =================== PASSED $(_test_count) NDK-BUILD UNIT TESTS =================)\
)