| # 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 =================)\ |
| ) |