Audio V4: Make test helper version independent
Bug: 38184704
Test: compile
Change-Id: Ia9ec81ccbad1d7411fdc570ae6dd728dd1520065
diff --git a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp
index fd175de..73bf61c 100644
--- a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp
+++ b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp
@@ -20,6 +20,7 @@
#include <cmath>
#include <cstddef>
#include <cstdio>
+#include <initializer_list>
#include <limits>
#include <string>
#include <vector>
@@ -40,9 +41,11 @@
#include "utility/AssertOk.h"
#include "utility/Documentation.h"
#include "utility/EnvironmentTearDown.h"
+#define AUDIO_HAL_VERSION V2_0
#include "utility/PrettyPrintAudioTypes.h"
#include "utility/ReturnIn.h"
+using std::initializer_list;
using std::string;
using std::to_string;
using std::vector;
@@ -856,7 +859,7 @@
ASSERT_IS_OK(device->getHwAvSync()));
static void checkGetNoParameter(IStream* stream, hidl_vec<hidl_string> keys,
- vector<Result> expectedResults) {
+ initializer_list<Result> expectedResults) {
hidl_vec<ParameterValue> parameters;
Result res;
ASSERT_OK(stream->getParameters(keys, returnIn(res, parameters)));
@@ -924,8 +927,7 @@
TEST_IO_STREAM(standby, "Make sure the stream can be put in stanby",
ASSERT_OK(stream->standby())) // can not fail
-static vector<Result> invalidStateOrNotSupported = {Result::INVALID_STATE,
- Result::NOT_SUPPORTED};
+static constexpr auto invalidStateOrNotSupported = {Result::INVALID_STATE, Result::NOT_SUPPORTED};
TEST_IO_STREAM(startNoMmap,
"Starting a mmaped stream before mapping it should fail",
diff --git a/audio/common/2.0/default/Android.bp b/audio/common/2.0/default/Android.bp
index c111476..ac66479 100644
--- a/audio/common/2.0/default/Android.bp
+++ b/audio/common/2.0/default/Android.bp
@@ -1,5 +1,5 @@
//
-// Copyright (C) 2017 The Android Open Source Project
+// Copyright (C) 2016 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.
diff --git a/audio/common/2.0/default/HidlUtils.cpp b/audio/common/2.0/default/HidlUtils.cpp
index 9b617bb..9771b7b 100644
--- a/audio/common/2.0/default/HidlUtils.cpp
+++ b/audio/common/2.0/default/HidlUtils.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2016 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.
diff --git a/audio/common/2.0/default/HidlUtils.h b/audio/common/2.0/default/HidlUtils.h
index 3d39933..24543b1 100644
--- a/audio/common/2.0/default/HidlUtils.h
+++ b/audio/common/2.0/default/HidlUtils.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2016 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.
diff --git a/audio/common/test/utility/include/utility/AssertOk.h b/audio/common/test/utility/include/utility/AssertOk.h
index 1b8abb5..11e1c24 100644
--- a/audio/common/test/utility/include/utility/AssertOk.h
+++ b/audio/common/test/utility/include/utility/AssertOk.h
@@ -17,7 +17,7 @@
#define ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_ASSERTOK_H
#include <algorithm>
-#include <vector>
+#include <initializer_list>
#include <hidl/Status.h>
@@ -33,7 +33,6 @@
// This is a detail namespace, thus it is OK to import a class as nobody else is
// allowed to use it
using ::android::hardware::Return;
-using ::android::hardware::audio::V2_0::Result;
template <class T>
inline ::testing::AssertionResult assertIsOk(const char* expr, const Return<T>& ret) {
@@ -50,6 +49,7 @@
}
// Expect two equal Results
+template <class Result>
inline ::testing::AssertionResult assertResult(const char* e_expr, const char* r_expr,
Result expected, Result result) {
return ::testing::AssertionResult(expected == result)
@@ -58,6 +58,7 @@
}
// Expect two equal Results one being wrapped in an OK Return
+template <class Result>
inline ::testing::AssertionResult assertResult(const char* e_expr, const char* r_expr,
Result expected, const Return<Result>& ret) {
return continueIfIsOk(r_expr, ret,
@@ -65,8 +66,10 @@
}
// Expect a Result to be part of a list of Results
+template <class Result>
inline ::testing::AssertionResult assertResult(const char* e_expr, const char* r_expr,
- const std::vector<Result>& expected, Result result) {
+ const std::initializer_list<Result>& expected,
+ Result result) {
if (std::find(expected.begin(), expected.end(), result) != expected.end()) {
return ::testing::AssertionSuccess(); // result is in expected
}
@@ -77,8 +80,9 @@
}
// Expect a Result wrapped in an OK Return to be part of a list of Results
+template <class Result>
inline ::testing::AssertionResult assertResult(const char* e_expr, const char* r_expr,
- const std::vector<Result>& expected,
+ const std::initializer_list<Result>& expected,
const Return<Result>& ret) {
return continueIfIsOk(r_expr, ret,
[&] { return assertResult(e_expr, r_expr, expected, Result{ret}); });
@@ -88,11 +92,13 @@
return assertIsOk(expr, ret);
}
+template <class Result>
inline ::testing::AssertionResult assertOk(const char* expr, Result result) {
return ::testing::AssertionResult(result == Result::OK)
<< "Expected success: " << expr << "\nActual: " << ::testing::PrintToString(result);
}
+template <class Result>
inline ::testing::AssertionResult assertOk(const char* expr, const Return<Result>& ret) {
return continueIfIsOk(expr, ret, [&] { return assertOk(expr, Result{ret}); });
}
diff --git a/audio/common/test/utility/include/utility/PrettyPrintAudioTypes.h b/audio/common/test/utility/include/utility/PrettyPrintAudioTypes.h
index 37059e7..88a67e0 100644
--- a/audio/common/test/utility/include/utility/PrettyPrintAudioTypes.h
+++ b/audio/common/test/utility/include/utility/PrettyPrintAudioTypes.h
@@ -14,57 +14,46 @@
* limitations under the License.
*/
+#ifndef AUDIO_HAL_VERSION
+#error "AUDIO_HAL_VERSION must be set before including this file."
+#endif
+
#ifndef ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_PRETTY_PRINT_AUDIO_TYPES_H
#define ANDROID_HARDWARE_AUDIO_COMMON_TEST_UTILITY_PRETTY_PRINT_AUDIO_TYPES_H
#include <iosfwd>
-#include <type_traits>
+#include <utility>
-#include <android/hardware/audio/2.0/types.h>
-#include <android/hardware/audio/common/2.0/types.h>
-
-/** @file Use HIDL generated toString methods to pretty print gtest errors */
-
-namespace prettyPrintAudioTypesDetail {
-
-// Print the value of an enum as hex
-template <class Enum>
-inline void printUnderlyingValue(Enum value, ::std::ostream* os) {
- *os << std::hex << " (0x" << static_cast<std::underlying_type_t<Enum>>(value) << ")";
-}
-
-} // namespace detail
+/** @file Use HIDL generated toString methods to pretty print gtest errors
+ * Unfortunately Gtest does not offer a template to specialize, only
+ * overloading PrintTo.
+ * @note that this overload can NOT be template because
+ * the fallback is already template, resulting in ambiguity.
+ * @note that the overload MUST be in the exact namespace
+ * the type is declared in, as per the ADL rules.
+ */
namespace android {
namespace hardware {
namespace audio {
-namespace V2_0 {
-inline void PrintTo(const Result& result, ::std::ostream* os) {
- *os << toString(result);
- prettyPrintAudioTypesDetail::printUnderlyingValue(result, os);
-}
+#define DEFINE_GTEST_PRINT_TO(T) \
+ inline void PrintTo(const T& val, ::std::ostream* os) { *os << toString(val); }
-} // namespace V2_0
+namespace AUDIO_HAL_VERSION {
+DEFINE_GTEST_PRINT_TO(Result)
+} // namespace AUDIO_HAL_VERSION
+
namespace common {
-namespace V2_0 {
-
-inline void PrintTo(const AudioConfig& config, ::std::ostream* os) {
- *os << toString(config);
-}
-
-inline void PrintTo(const AudioDevice& device, ::std::ostream* os) {
- *os << toString(device);
- prettyPrintAudioTypesDetail::printUnderlyingValue(device, os);
-}
-
-inline void PrintTo(const AudioChannelMask& channelMask, ::std::ostream* os) {
- *os << toString(channelMask);
- prettyPrintAudioTypesDetail::printUnderlyingValue(channelMask, os);
-}
-
-} // namespace V2_0
+namespace AUDIO_HAL_VERSION {
+DEFINE_GTEST_PRINT_TO(AudioConfig)
+DEFINE_GTEST_PRINT_TO(AudioDevice)
+DEFINE_GTEST_PRINT_TO(AudioChannelMask)
+} // namespace AUDIO_HAL_VERSION
} // namespace common
+
+#undef DEFINE_GTEST_PRINT_TO
+
} // namespace audio
} // namespace hardware
} // namespace android