123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- // Copyright 2020 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef BASE_TEST_ASYNC_RESULTS_TEST_VALUES_WIN_H_
- #define BASE_TEST_ASYNC_RESULTS_TEST_VALUES_WIN_H_
- #include <windows.foundation.collections.h>
- #include <wrl/client.h>
- #include <wrl/implements.h>
- #include "testing/gtest/include/gtest/gtest.h"
- // Declare the related template specializations for all the value types
- // provided.
- namespace ABI {
- namespace Windows {
- namespace Foundation {
- template <>
- struct __declspec(uuid("3895C200-8F26-4F5A-B29D-2B5D72E68F99"))
- ABI::Windows::Foundation::IAsyncOperation<IUnknown*>
- : ABI::Windows::Foundation::IAsyncOperation_impl<IUnknown*> {};
- template <>
- struct __declspec(uuid("CD99A253-6473-4810-AF0D-763DAB79AC42"))
- ABI::Windows::Foundation::IAsyncOperationCompletedHandler<IUnknown*>
- : ABI::Windows::Foundation::IAsyncOperationCompletedHandler_impl<
- IUnknown*> {};
- template <>
- struct __declspec(uuid("CB52D855-8121-4AC8-A164-084A27FB377E"))
- ABI::Windows::Foundation::IAsyncOperation<int*>
- : ABI::Windows::Foundation::IAsyncOperation_impl<int*> {};
- template <>
- struct __declspec(uuid("EA868415-A724-40BC-950A-C7DB6B1723C6"))
- ABI::Windows::Foundation::IAsyncOperationCompletedHandler<int*>
- : ABI::Windows::Foundation::IAsyncOperationCompletedHandler_impl<int*> {};
- // These specialization templates were included in windows.foundation.h, but
- // removed in 10.0.19041.0 SDK, so are included here conditionally
- #ifdef NTDDI_WIN10_VB // Windows 10.0.19041
- template <>
- struct __declspec(uuid("968b9665-06ed-5774-8f53-8edeabd5f7b5"))
- ABI::Windows::Foundation::IAsyncOperation<int>
- : ABI::Windows::Foundation::IAsyncOperation_impl<int> {};
- template <>
- struct __declspec(uuid("d60cae9d-88cb-59f1-8576-3fba44796be8"))
- ABI::Windows::Foundation::IAsyncOperationCompletedHandler<int>
- : ABI::Windows::Foundation::IAsyncOperationCompletedHandler_impl<int> {};
- #endif
- } // namespace Foundation
- } // namespace Windows
- } // namespace ABI
- namespace base {
- namespace test {
- // Provides access to values of type |T| and variations of those values relevant
- // to IAsyncOperations. Intended for use in TypedTestSuites concerning
- // IAsyncOperations or related functionality. Example:
- // template <typename T>
- // class SuiteName : public ::testing::Test {};
- //
- // TYPED_TEST_SUITE_P(SuiteName);
- //
- // TYPED_TEST_P(SuiteName, TestName) {
- // AsyncResultsTestValues<TypeParam> test_values;
- // ... test_values.GetTestValue_T() ...
- // }
- //
- // REGISTER_TYPED_TEST_SUITE_P(SuiteName, TestName);
- // INSTANTIATE_TYPED_TEST_SUITE_P(Prefix,
- // SuiteName,
- // base::test::AsyncResultsTestValuesTypes);
- template <typename T>
- class AsyncResultsTestValues {
- // This class body serves only to provide documentation for the functions.
- // Actual use of this class is limited to the types for which it has been
- // specialized.
- private:
- class AsyncResultsT;
- public:
- // Returns a value equal to a variable of type T constructed with an
- // empty initializer.
- //
- // This value will be equal between all instances of the same type.
- // AsyncResultsTestValues<T> instance1;
- // AsyncResultsTestValues<T> instance2;
- // instance1.GetDefaultValue_T() == instance2.GetDefaultValue_T();
- T GetDefaultValue_T();
- // Returns the same value as GetDefaultValue_T(), but in the format expected
- // for the results of an IAsyncOperation<T>.
- // AsyncResultsTestValues<T> instance;
- // AsyncResultsT<T> converted_value = instance.GetDefaultValue_T();
- // converted_value == instance.GetDefaultValue_AsyncResultsT();
- AsyncResultsT GetDefaultValue_AsyncResultsT();
- // Returns an arbitrary value NOT equal to GetDefaultValue_T().
- //
- // Multiple calls to this function on a single instance will return values
- // equal to one another. Calls made on different instances may produce
- // equal or non-equal values.
- // AsyncResultsTestValues<T> instance1;
- // AsyncResultsTestValues<T> instance2;
- // instance1.GetTestValue_T() == instance1.GetTestValue_T();
- // instance1.GetTestValue_T() == OR != instance2.GetTestValue_T();
- T GetTestValue_T();
- // Returns the same value as GetTestValue_T(), but in the format expected for
- // the results of an IAsyncOperation<T>.
- // AsyncResultsTestValues<T> instance;
- // AsyncResultsT<T> converted_value = instance.GetTestValue_T();
- // converted_value == instance.GetTestValue_AsyncResultsT();
- AsyncResultsT GetTestValue_AsyncResultsT();
- };
- // The collection of value types supported by AsyncResultsTestValues.
- using AsyncResultsTestValuesTypes = ::testing::Types<int, int*, IUnknown*>;
- template <>
- class AsyncResultsTestValues<int> {
- public:
- int GetDefaultValue_T() { return 0; }
- int GetDefaultValue_AsyncResultsT() { return 0; }
- int GetTestValue_T() { return 4; }
- int GetTestValue_AsyncResultsT() { return 4; }
- };
- template <>
- class AsyncResultsTestValues<int*> {
- public:
- int* GetDefaultValue_T() { return nullptr; }
- int* GetDefaultValue_AsyncResultsT() { return nullptr; }
- int* GetTestValue_T() { return &test_value_; }
- int* GetTestValue_AsyncResultsT() { return &test_value_; }
- private:
- int test_value_ = 4;
- };
- template <>
- class AsyncResultsTestValues<IUnknown*> {
- public:
- AsyncResultsTestValues() {
- auto class_instance = Microsoft::WRL::Make<TestClassImplementingIUnknown>();
- class_instance.As(&test_value_);
- }
- IUnknown* GetDefaultValue_T() { return nullptr; }
- Microsoft::WRL::ComPtr<IUnknown> GetDefaultValue_AsyncResultsT() {
- return Microsoft::WRL::ComPtr<IUnknown>();
- }
- IUnknown* GetTestValue_T() { return test_value_.Get(); }
- Microsoft::WRL::ComPtr<IUnknown> GetTestValue_AsyncResultsT() {
- return test_value_;
- }
- private:
- class TestClassImplementingIUnknown
- : public Microsoft::WRL::RuntimeClass<
- Microsoft::WRL::RuntimeClassFlags<
- Microsoft::WRL::WinRtClassicComMix |
- Microsoft::WRL::InhibitRoOriginateError>,
- IUnknown> {};
- Microsoft::WRL::ComPtr<IUnknown> test_value_;
- };
- } // namespace test
- } // namespace base
- #endif // BASE_TEST_ASYNC_RESULTS_TEST_VALUES_WIN_H_
|