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