1# Copyright (C) 2012 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# Definitions for the Android NDK build system's internal unit tests. 16# 17 18# 19# A function which names begin with -test- (e.g. -test-foo) is assumed 20# to be an internal unit test. It will be run automatically by ndk-build 21# if NDK_UNIT_TESTS is defined in your environment. 22# 23# Each test should call one of the following functions that will 24# register a failure: 25# 26# $(call test-expect,<expected-value>,<actual-value>) 27# 28# This will check that <actual-value> is equal to <expected-value>. 29# If not, this will print an error message and increment the failure 30# counter. 31# 32# $(call test-assert,<expected-value>,<actual-value>) 33# 34# This is similar to test-expect, though it will abort the program 35# immediately after displaying an error message. 36# 37# Here's an example that checks that the 'filter' function works correctly: 38# 39# -test-filter = \ 40# $(call test-expect,foo,$(filter bar,foo bar)) 41# 42# 43 44-ndk-test-start = \ 45 $(eval _test_name := $1)\ 46 $(eval _test_list += $1)\ 47 $(eval _test_failed :=)\ 48 $(info [$1 RUN]) 49 50# End current unit test. 51# 52-ndk-test-end = \ 53 $(if $(_test_failed),\ 54 $(info [$(_test_name) FAIL])$(error Aborting)\ 55 $(eval _test_failures += $$(_test_name))\ 56 ,\ 57 $(info [$(_test_name) OK])\ 58 ) 59 60# Define NDK_UNIT_TESTS to 2 to dump each test-expect/assert check. 61# 62ifeq (2,$(NDK_UNIT_TESTS)) 63-ndk-test-log = $(info . $(_test_name): $1) 64else 65-ndk-test-log = $(empty) 66endif 67 68test-expect = \ 69 $(call -ndk-test-log,expect '$2' == '$1')\ 70 $(if $(call sne,$1,$2),\ 71 $(info ERROR <$(_test_name)>:$3)\ 72 $(info . expected value:'$1')\ 73 $(info . actual value: '$2')\ 74 $(eval _test_failed := true)\ 75 ) 76 77test-assert = \ 78 $(call -ndk-test-log,assert '$2' == '$1')\ 79 $(if $(call sne,$1,$2),\ 80 $(info ASSERT <$(_test_name)>:$3)\ 81 $(info . expected value:'$1')\ 82 $(info . actual value: '$2')\ 83 $(eval _test_failed := true)\ 84 $(error Aborting.)\ 85 ) 86 87# Run all the tests, i.e. all functions that are defined with a -test- 88# prefix will be called now in succession. 89ndk-run-all-tests = \ 90 $(info ================= STARTING NDK-BUILD UNIT TESTS =================)\ 91 $(eval _test_list :=)\ 92 $(eval _test_failures :=)\ 93 $(foreach _test,$(filter -test-%,$(.VARIABLES)),\ 94 $(call -ndk-test-start,$(_test))\ 95 $(call $(_test))\ 96 $(call -ndk-test-end)\ 97 )\ 98 $(eval _test_count := $$(words $$(_test_list)))\ 99 $(eval _test_fail_count := $$(words $$(_test_failures)))\ 100 $(if $(_test_failures),\ 101 $(info @@@@@@@@@@@ FAILED $(_test_fail_count) of $(_test_count) NDK-BUILD UNIT TESTS @@@@@@@)\ 102 $(foreach _test_name,$(_test_failures),\ 103 $(info . $(_test_name)))\ 104 ,\ 105 $(info =================== PASSED $(_test_count) NDK-BUILD UNIT TESTS =================)\ 106 ) 107