1*6777b538SAndroid Build Coastguard Worker // Copyright 2018 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/win/reference.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <windows.foundation.h> 8*6777b538SAndroid Build Coastguard Worker #include <wrl/client.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h" 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker #ifdef NTDDI_WIN10_VB // Windows 10.0.19041 13*6777b538SAndroid Build Coastguard Worker // Specialization templates that used to be in windows.foundation.h, removed in 14*6777b538SAndroid Build Coastguard Worker // the 10.0.19041.0 SDK, so placed here instead. 15*6777b538SAndroid Build Coastguard Worker namespace ABI { 16*6777b538SAndroid Build Coastguard Worker namespace Windows { 17*6777b538SAndroid Build Coastguard Worker namespace Foundation { 18*6777b538SAndroid Build Coastguard Worker template <> 19*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("3c00fd60-2950-5939-a21a-2d12c5a01b8a")) IReference<bool> 20*6777b538SAndroid Build Coastguard Worker : IReference_impl<Internal::AggregateType<bool, boolean>> {}; 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker template <> 23*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("548cefbd-bc8a-5fa0-8df2-957440fc8bf4")) IReference<int> 24*6777b538SAndroid Build Coastguard Worker : IReference_impl<int> {}; 25*6777b538SAndroid Build Coastguard Worker } // namespace Foundation 26*6777b538SAndroid Build Coastguard Worker } // namespace Windows 27*6777b538SAndroid Build Coastguard Worker } // namespace ABI 28*6777b538SAndroid Build Coastguard Worker #endif 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker namespace base { 31*6777b538SAndroid Build Coastguard Worker namespace win { 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker namespace { 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker using Microsoft::WRL::Make; 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker } // namespace 38*6777b538SAndroid Build Coastguard Worker TEST(ReferenceTest,Value)39*6777b538SAndroid Build Coastguard WorkerTEST(ReferenceTest, Value) { 40*6777b538SAndroid Build Coastguard Worker auto ref = Make<Reference<int>>(123); 41*6777b538SAndroid Build Coastguard Worker int value = 0; 42*6777b538SAndroid Build Coastguard Worker HRESULT hr = ref->get_Value(&value); 43*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(SUCCEEDED(hr)); 44*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(123, value); 45*6777b538SAndroid Build Coastguard Worker } 46*6777b538SAndroid Build Coastguard Worker TEST(ReferenceTest,ValueAggregate)47*6777b538SAndroid Build Coastguard WorkerTEST(ReferenceTest, ValueAggregate) { 48*6777b538SAndroid Build Coastguard Worker auto ref = Make<Reference<bool>>(true); 49*6777b538SAndroid Build Coastguard Worker boolean value = false; 50*6777b538SAndroid Build Coastguard Worker HRESULT hr = ref->get_Value(&value); 51*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(SUCCEEDED(hr)); 52*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(value); 53*6777b538SAndroid Build Coastguard Worker } 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker } // namespace win 56*6777b538SAndroid Build Coastguard Worker } // namespace base 57