1b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard/* 2b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * Copyright (C) 2017 The Android Open Source Project 3b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * 4b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * Licensed under the Apache License, Version 2.0 (the "License"); 5b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * you may not use this file except in compliance with the License. 6b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * You may obtain a copy of the License at 7b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * 8b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * http://www.apache.org/licenses/LICENSE-2.0 9b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * 10b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * Unless required by applicable law or agreed to in writing, software 11b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * distributed under the License is distributed on an "AS IS" BASIS, 12b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * See the License for the specific language governing permissions and 14b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * limitations under the License. 15b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard */ 16b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard 17b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard#ifndef ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ENVIRONMENT_TEARDOWN 18b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard#define ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ENVIRONMENT_TEARDOWN 19b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard 20b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard#include <android-base/logging.h> 21b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard 22b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocardnamespace android { 23b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocardnamespace hardware { 24b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocardnamespace audio { 25b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocardnamespace common { 26b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocardnamespace test { 27b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocardnamespace utility { 28b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard 29b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocardnamespace doc { 30b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocardnamespace detail { 31b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocardconst char* getTestName() { 32b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard return ::testing::UnitTest::GetInstance()->current_test_info()->name(); 33b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard} 34b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard} // namespace detail 35b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard 36b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard/** Document the current test case. 37b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * Eg: calling `doc::test("Dump the state of the hal")` in the "debugDump" test 38b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * will output: 39b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * <testcase name="debugDump" status="run" time="6" 40b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * classname="AudioPrimaryHidlTest" 41b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard description="Dump the state of the hal." /> 42b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * see 43b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md#logging-additional-information 44b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard */ 45b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocardvoid test(const std::string& testCaseDocumentation) { 46b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard ::testing::Test::RecordProperty("description", testCaseDocumentation); 47b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard} 48b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard 49b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard/** Document why a test was not fully run. Usually due to an optional feature 50b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard * not implemented. */ 51b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocardvoid partialTest(const std::string& reason) { 52b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard LOG(INFO) << "Test " << detail::getTestName() << " partially run: " << reason; 53b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard ::testing::Test::RecordProperty("partialyRunTest", reason); 54b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard} 55b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard 56b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard/** Add a note to the test. */ 57b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocardvoid note(const std::string& note) { 58b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard LOG(INFO) << "Test " << detail::getTestName() << " noted: " << note; 59b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard ::testing::Test::RecordProperty("note", note); 60b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard} 61b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard} // namespace doc 62b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard 63dc874e08c6fec8529d354ee31c1367a27aa66a2aKevin Rocard} // namespace utility 64dc874e08c6fec8529d354ee31c1367a27aa66a2aKevin Rocard} // namespace test 65dc874e08c6fec8529d354ee31c1367a27aa66a2aKevin Rocard} // namespace common 66dc874e08c6fec8529d354ee31c1367a27aa66a2aKevin Rocard} // namespace audio 67dc874e08c6fec8529d354ee31c1367a27aa66a2aKevin Rocard} // namespace hardware 68dc874e08c6fec8529d354ee31c1367a27aa66a2aKevin Rocard} // namespace android 69b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard 70b6d79ff11249e5fa8aec6a1af4a32dbf301e9064Kevin Rocard#endif // ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ENVIRONMENT_TEARDOWN 71