1*6777b538SAndroid Build Coastguard Worker // Copyright 2019 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/map.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include <windows.foundation.h>
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard Worker #include <utility>
10*6777b538SAndroid Build Coastguard Worker
11*6777b538SAndroid Build Coastguard Worker #include "base/memory/raw_ptr.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/strings/utf_string_conversions.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/win/core_winrt_util.h"
14*6777b538SAndroid Build Coastguard Worker #include "base/win/hstring_reference.h"
15*6777b538SAndroid Build Coastguard Worker #include "base/win/scoped_hstring.h"
16*6777b538SAndroid Build Coastguard Worker #include "base/win/scoped_winrt_initializer.h"
17*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
18*6777b538SAndroid Build Coastguard Worker
19*6777b538SAndroid Build Coastguard Worker namespace ABI::Windows::Foundation::Collections {
20*6777b538SAndroid Build Coastguard Worker
21*6777b538SAndroid Build Coastguard Worker // Add missing template specializations (since UWP doesn't provide them):
22*6777b538SAndroid Build Coastguard Worker
23*6777b538SAndroid Build Coastguard Worker // Map<int, double> specializations:
24*6777b538SAndroid Build Coastguard Worker template <>
25*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("34784dd6-b37b-4680-b391-899be4f755b6"))
26*6777b538SAndroid Build Coastguard Worker IKeyValuePair<int, double> : IKeyValuePair_impl<int, double> {};
27*6777b538SAndroid Build Coastguard Worker
28*6777b538SAndroid Build Coastguard Worker template <>
29*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("c00bd9bd-cce5-46d6-9dc7-f03067e6d523"))
30*6777b538SAndroid Build Coastguard Worker IMap<int, double> : IMap_impl<int, double> {};
31*6777b538SAndroid Build Coastguard Worker
32*6777b538SAndroid Build Coastguard Worker template <>
33*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("30e075af-9ba2-4562-9f10-a13a0e57ca5b"))
34*6777b538SAndroid Build Coastguard Worker IMapView<int, double> : IMapView_impl<int, double> {};
35*6777b538SAndroid Build Coastguard Worker
36*6777b538SAndroid Build Coastguard Worker template <>
37*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("0a0e8ed6-7deb-4fd4-8033-38d270c69301"))
38*6777b538SAndroid Build Coastguard Worker IObservableMap<int, double> : IObservableMap_impl<int, double> {};
39*6777b538SAndroid Build Coastguard Worker
40*6777b538SAndroid Build Coastguard Worker template <>
41*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("f41f9179-9c95-4755-af55-929a250fc0aa"))
42*6777b538SAndroid Build Coastguard Worker IMapChangedEventArgs<int> : IMapChangedEventArgs_impl<int> {};
43*6777b538SAndroid Build Coastguard Worker
44*6777b538SAndroid Build Coastguard Worker template <>
45*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("79196029-07f6-47c6-9933-9ac3a04e7731"))
46*6777b538SAndroid Build Coastguard Worker MapChangedEventHandler<int, double>
47*6777b538SAndroid Build Coastguard Worker : MapChangedEventHandler_impl<int, double> {};
48*6777b538SAndroid Build Coastguard Worker
49*6777b538SAndroid Build Coastguard Worker template <>
50*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("bfd254c3-5ede-4f8f-9e48-3636347f6fe0"))
51*6777b538SAndroid Build Coastguard Worker IIterable<IKeyValuePair<int, double>*>
52*6777b538SAndroid Build Coastguard Worker : IIterable_impl<IKeyValuePair<int, double>*> {};
53*6777b538SAndroid Build Coastguard Worker
54*6777b538SAndroid Build Coastguard Worker template <>
55*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("6bb5c7ff-964e-469f-87d3-42daaea8e58d"))
56*6777b538SAndroid Build Coastguard Worker IIterator<IKeyValuePair<int, double>*>
57*6777b538SAndroid Build Coastguard Worker : IIterator_impl<IKeyValuePair<int, double>*> {};
58*6777b538SAndroid Build Coastguard Worker
59*6777b538SAndroid Build Coastguard Worker template <>
60*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("7d27014c-8df7-4977-bf98-b0c821f5f988"))
61*6777b538SAndroid Build Coastguard Worker IVector<IKeyValuePair<int, double>*>
62*6777b538SAndroid Build Coastguard Worker : IVector_impl<IKeyValuePair<int, double>*> {};
63*6777b538SAndroid Build Coastguard Worker
64*6777b538SAndroid Build Coastguard Worker template <>
65*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("d33b7a5c-9da6-4a6a-8b2e-e08cc0240d77"))
66*6777b538SAndroid Build Coastguard Worker IVectorView<IKeyValuePair<int, double>*>
67*6777b538SAndroid Build Coastguard Worker : IVectorView_impl<IKeyValuePair<int, double>*> {};
68*6777b538SAndroid Build Coastguard Worker
69*6777b538SAndroid Build Coastguard Worker template <>
70*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("e5b0d7f2-915d-4831-9a04-466fed63cfa0"))
71*6777b538SAndroid Build Coastguard Worker VectorChangedEventHandler<IKeyValuePair<int, double>*>
72*6777b538SAndroid Build Coastguard Worker : VectorChangedEventHandler_impl<IKeyValuePair<int, double>*> {};
73*6777b538SAndroid Build Coastguard Worker
74*6777b538SAndroid Build Coastguard Worker template <>
75*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("27c3ee04-457f-42dd-9556-8f7c4994d7af"))
76*6777b538SAndroid Build Coastguard Worker IObservableVector<IKeyValuePair<int, double>*>
77*6777b538SAndroid Build Coastguard Worker : IObservableVector_impl<IKeyValuePair<int, double>*> {};
78*6777b538SAndroid Build Coastguard Worker
79*6777b538SAndroid Build Coastguard Worker // Map<Uri*, Uri*> specializations:
80*6777b538SAndroid Build Coastguard Worker template <>
81*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("c03984bc-b800-43e4-a36e-3c8c4a34c005")) IMap<Uri*, Uri*>
82*6777b538SAndroid Build Coastguard Worker : IMap_impl<Uri*, Uri*> {};
83*6777b538SAndroid Build Coastguard Worker
84*6777b538SAndroid Build Coastguard Worker template <>
85*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("93ec9c52-1b0b-4fd8-ab5a-f6ea32db0e35"))
86*6777b538SAndroid Build Coastguard Worker IMapView<Uri*, Uri*> : IMapView_impl<Uri*, Uri*> {};
87*6777b538SAndroid Build Coastguard Worker
88*6777b538SAndroid Build Coastguard Worker template <>
89*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("9b711c83-5f01-4604-9e01-3d586b3f9cdd"))
90*6777b538SAndroid Build Coastguard Worker IObservableMap<Uri*, Uri*> : IObservableMap_impl<Uri*, Uri*> {};
91*6777b538SAndroid Build Coastguard Worker
92*6777b538SAndroid Build Coastguard Worker template <>
93*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("f41f9179-9c95-4755-af55-929a250fc0aa"))
94*6777b538SAndroid Build Coastguard Worker IMapChangedEventArgs<Uri*> : IMapChangedEventArgs_impl<Uri*> {};
95*6777b538SAndroid Build Coastguard Worker
96*6777b538SAndroid Build Coastguard Worker template <>
97*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("6d758124-f99a-47e7-ab74-7cff7359b206"))
98*6777b538SAndroid Build Coastguard Worker MapChangedEventHandler<Uri*, Uri*>
99*6777b538SAndroid Build Coastguard Worker : MapChangedEventHandler_impl<Uri*, Uri*> {};
100*6777b538SAndroid Build Coastguard Worker
101*6777b538SAndroid Build Coastguard Worker template <>
102*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("8b270b8a-d74b-459b-9933-81cb234d7c5e"))
103*6777b538SAndroid Build Coastguard Worker IKeyValuePair<Uri*, Uri*> : IKeyValuePair_impl<Uri*, Uri*> {};
104*6777b538SAndroid Build Coastguard Worker
105*6777b538SAndroid Build Coastguard Worker template <>
106*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("6368bcea-dfbc-4847-ba50-9e217fc2d5c3"))
107*6777b538SAndroid Build Coastguard Worker IIterable<IKeyValuePair<Uri*, Uri*>*>
108*6777b538SAndroid Build Coastguard Worker : IIterable_impl<IKeyValuePair<Uri*, Uri*>*> {};
109*6777b538SAndroid Build Coastguard Worker
110*6777b538SAndroid Build Coastguard Worker template <>
111*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("7653cf9f-9d0b-46d3-882e-4c0afb209333"))
112*6777b538SAndroid Build Coastguard Worker IIterator<IKeyValuePair<Uri*, Uri*>*>
113*6777b538SAndroid Build Coastguard Worker : IIterator_impl<IKeyValuePair<Uri*, Uri*>*> {};
114*6777b538SAndroid Build Coastguard Worker
115*6777b538SAndroid Build Coastguard Worker template <>
116*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("98c3f5a7-237d-494b-ba89-4a49368d5491"))
117*6777b538SAndroid Build Coastguard Worker IVector<IKeyValuePair<Uri*, Uri*>*>
118*6777b538SAndroid Build Coastguard Worker : IVector_impl<IKeyValuePair<Uri*, Uri*>*> {};
119*6777b538SAndroid Build Coastguard Worker
120*6777b538SAndroid Build Coastguard Worker template <>
121*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("2cfc2617-7c88-4482-8158-97bf7cc458d7"))
122*6777b538SAndroid Build Coastguard Worker IVectorView<IKeyValuePair<Uri*, Uri*>*>
123*6777b538SAndroid Build Coastguard Worker : IVectorView_impl<IKeyValuePair<Uri*, Uri*>*> {};
124*6777b538SAndroid Build Coastguard Worker
125*6777b538SAndroid Build Coastguard Worker template <>
126*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("bb581e03-3ee7-4c01-8035-4f581c5e91f5"))
127*6777b538SAndroid Build Coastguard Worker VectorChangedEventHandler<IKeyValuePair<Uri*, Uri*>*>
128*6777b538SAndroid Build Coastguard Worker : VectorChangedEventHandler_impl<IKeyValuePair<Uri*, Uri*>*> {};
129*6777b538SAndroid Build Coastguard Worker
130*6777b538SAndroid Build Coastguard Worker template <>
131*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("fb0bd692-34c3-4242-a085-58ed71e8ea6b"))
132*6777b538SAndroid Build Coastguard Worker IObservableVector<IKeyValuePair<Uri*, Uri*>*>
133*6777b538SAndroid Build Coastguard Worker : IObservableVector_impl<IKeyValuePair<Uri*, Uri*>*> {};
134*6777b538SAndroid Build Coastguard Worker
135*6777b538SAndroid Build Coastguard Worker // Map<HSTRING*, IInspectable*> specializations:
136*6777b538SAndroid Build Coastguard Worker template <>
137*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("c6682be1-963c-4101-85aa-63db583eb0d5"))
138*6777b538SAndroid Build Coastguard Worker IVector<IKeyValuePair<HSTRING, IInspectable*>*>
139*6777b538SAndroid Build Coastguard Worker : IVector_impl<IKeyValuePair<HSTRING, IInspectable*>*> {};
140*6777b538SAndroid Build Coastguard Worker
141*6777b538SAndroid Build Coastguard Worker template <>
142*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("868e5342-49c8-478f-af0f-1691e1bbbb7c"))
143*6777b538SAndroid Build Coastguard Worker IVectorView<IKeyValuePair<HSTRING, IInspectable*>*>
144*6777b538SAndroid Build Coastguard Worker : IVectorView_impl<IKeyValuePair<HSTRING, IInspectable*>*> {};
145*6777b538SAndroid Build Coastguard Worker
146*6777b538SAndroid Build Coastguard Worker template <>
147*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("cd99b82f-a768-405f-9123-be509146fef8"))
148*6777b538SAndroid Build Coastguard Worker VectorChangedEventHandler<IKeyValuePair<HSTRING, IInspectable*>*>
149*6777b538SAndroid Build Coastguard Worker : VectorChangedEventHandler_impl<IKeyValuePair<HSTRING, IInspectable*>*> {};
150*6777b538SAndroid Build Coastguard Worker
151*6777b538SAndroid Build Coastguard Worker template <>
152*6777b538SAndroid Build Coastguard Worker struct __declspec(uuid("079e2180-0c7a-4508-85ff-7a5f2b29b92b"))
153*6777b538SAndroid Build Coastguard Worker IObservableVector<IKeyValuePair<HSTRING, IInspectable*>*>
154*6777b538SAndroid Build Coastguard Worker : IObservableVector_impl<IKeyValuePair<HSTRING, IInspectable*>*> {};
155*6777b538SAndroid Build Coastguard Worker
156*6777b538SAndroid Build Coastguard Worker } // namespace ABI::Windows::Foundation::Collections
157*6777b538SAndroid Build Coastguard Worker
158*6777b538SAndroid Build Coastguard Worker namespace base::win {
159*6777b538SAndroid Build Coastguard Worker
160*6777b538SAndroid Build Coastguard Worker namespace {
161*6777b538SAndroid Build Coastguard Worker
162*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::IPropertyValue;
163*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::IPropertyValueStatics;
164*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::Uri;
165*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::Collections::CollectionChange;
166*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::Collections::CollectionChange_ItemChanged;
167*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::Collections::CollectionChange_ItemInserted;
168*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::Collections::CollectionChange_ItemRemoved;
169*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::Collections::CollectionChange_Reset;
170*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::Collections::IIterator;
171*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::Collections::IKeyValuePair;
172*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::Collections::IMapChangedEventArgs;
173*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::Collections::IMapView;
174*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::Collections::IObservableMap;
175*6777b538SAndroid Build Coastguard Worker using ABI::Windows::Foundation::Collections::MapChangedEventHandler;
176*6777b538SAndroid Build Coastguard Worker using Microsoft::WRL::ClassicCom;
177*6777b538SAndroid Build Coastguard Worker using Microsoft::WRL::ComPtr;
178*6777b538SAndroid Build Coastguard Worker using Microsoft::WRL::InhibitRoOriginateError;
179*6777b538SAndroid Build Coastguard Worker using Microsoft::WRL::Make;
180*6777b538SAndroid Build Coastguard Worker using Microsoft::WRL::RuntimeClass;
181*6777b538SAndroid Build Coastguard Worker using Microsoft::WRL::RuntimeClassFlags;
182*6777b538SAndroid Build Coastguard Worker
183*6777b538SAndroid Build Coastguard Worker const wchar_t kTestKey[] = L"Test key";
184*6777b538SAndroid Build Coastguard Worker const wchar_t kTestValue[] = L"Test value";
185*6777b538SAndroid Build Coastguard Worker
186*6777b538SAndroid Build Coastguard Worker const std::map<int, double, internal::Less> g_one{{1, 10.7}};
187*6777b538SAndroid Build Coastguard Worker const std::map<int, double, internal::Less> g_two{{1, 10.7}, {2, 20.3}};
188*6777b538SAndroid Build Coastguard Worker
GetPropertyValueStaticsActivationFactory(IPropertyValueStatics ** statics)189*6777b538SAndroid Build Coastguard Worker HRESULT GetPropertyValueStaticsActivationFactory(
190*6777b538SAndroid Build Coastguard Worker IPropertyValueStatics** statics) {
191*6777b538SAndroid Build Coastguard Worker return base::win::GetActivationFactory<
192*6777b538SAndroid Build Coastguard Worker IPropertyValueStatics, RuntimeClass_Windows_Foundation_PropertyValue>(
193*6777b538SAndroid Build Coastguard Worker statics);
194*6777b538SAndroid Build Coastguard Worker }
195*6777b538SAndroid Build Coastguard Worker
196*6777b538SAndroid Build Coastguard Worker template <typename K, typename V>
197*6777b538SAndroid Build Coastguard Worker class FakeMapChangedEventHandler
198*6777b538SAndroid Build Coastguard Worker : public RuntimeClass<
199*6777b538SAndroid Build Coastguard Worker RuntimeClassFlags<ClassicCom | InhibitRoOriginateError>,
200*6777b538SAndroid Build Coastguard Worker MapChangedEventHandler<K, V>> {
201*6777b538SAndroid Build Coastguard Worker public:
FakeMapChangedEventHandler(ComPtr<IObservableMap<K,V>> map)202*6777b538SAndroid Build Coastguard Worker explicit FakeMapChangedEventHandler(ComPtr<IObservableMap<K, V>> map)
203*6777b538SAndroid Build Coastguard Worker : map_(std::move(map)) {
204*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(map_->add_MapChanged(this, &token_));
205*6777b538SAndroid Build Coastguard Worker }
206*6777b538SAndroid Build Coastguard Worker
~FakeMapChangedEventHandler()207*6777b538SAndroid Build Coastguard Worker ~FakeMapChangedEventHandler() override {
208*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(map_->remove_MapChanged(token_));
209*6777b538SAndroid Build Coastguard Worker }
210*6777b538SAndroid Build Coastguard Worker
211*6777b538SAndroid Build Coastguard Worker // MapChangedEventHandler:
Invoke(IObservableMap<K,V> * sender,IMapChangedEventArgs<K> * e)212*6777b538SAndroid Build Coastguard Worker IFACEMETHODIMP Invoke(IObservableMap<K, V>* sender,
213*6777b538SAndroid Build Coastguard Worker IMapChangedEventArgs<K>* e) {
214*6777b538SAndroid Build Coastguard Worker sender_ = sender;
215*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(e->get_CollectionChange(&change_));
216*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(e->get_Key(&key_));
217*6777b538SAndroid Build Coastguard Worker return S_OK;
218*6777b538SAndroid Build Coastguard Worker }
219*6777b538SAndroid Build Coastguard Worker
sender()220*6777b538SAndroid Build Coastguard Worker IObservableMap<K, V>* sender() { return sender_; }
change()221*6777b538SAndroid Build Coastguard Worker CollectionChange change() { return change_; }
key() const222*6777b538SAndroid Build Coastguard Worker K key() const { return key_; }
223*6777b538SAndroid Build Coastguard Worker
224*6777b538SAndroid Build Coastguard Worker private:
225*6777b538SAndroid Build Coastguard Worker ComPtr<IObservableMap<K, V>> map_;
226*6777b538SAndroid Build Coastguard Worker EventRegistrationToken token_;
227*6777b538SAndroid Build Coastguard Worker raw_ptr<IObservableMap<K, V>> sender_ = nullptr;
228*6777b538SAndroid Build Coastguard Worker CollectionChange change_ = CollectionChange_Reset;
229*6777b538SAndroid Build Coastguard Worker K key_ = 0;
230*6777b538SAndroid Build Coastguard Worker };
231*6777b538SAndroid Build Coastguard Worker
232*6777b538SAndroid Build Coastguard Worker } // namespace
233*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,Lookup_Empty)234*6777b538SAndroid Build Coastguard Worker TEST(MapTest, Lookup_Empty) {
235*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>();
236*6777b538SAndroid Build Coastguard Worker double value;
237*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->Lookup(1, &value);
238*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(E_BOUNDS, hr);
239*6777b538SAndroid Build Coastguard Worker hr = map->Lookup(2, &value);
240*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(E_BOUNDS, hr);
241*6777b538SAndroid Build Coastguard Worker }
242*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,Lookup_One)243*6777b538SAndroid Build Coastguard Worker TEST(MapTest, Lookup_One) {
244*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>(g_one);
245*6777b538SAndroid Build Coastguard Worker double value;
246*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->Lookup(1, &value);
247*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(S_OK, hr);
248*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(10.7, value);
249*6777b538SAndroid Build Coastguard Worker hr = map->Lookup(2, &value);
250*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(E_BOUNDS, hr);
251*6777b538SAndroid Build Coastguard Worker }
252*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,Lookup_Two)253*6777b538SAndroid Build Coastguard Worker TEST(MapTest, Lookup_Two) {
254*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>(g_two);
255*6777b538SAndroid Build Coastguard Worker double value;
256*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->Lookup(1, &value);
257*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(S_OK, hr);
258*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(10.7, value);
259*6777b538SAndroid Build Coastguard Worker hr = map->Lookup(2, &value);
260*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(S_OK, hr);
261*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(20.3, value);
262*6777b538SAndroid Build Coastguard Worker }
263*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,get_Size_Empty)264*6777b538SAndroid Build Coastguard Worker TEST(MapTest, get_Size_Empty) {
265*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>();
266*6777b538SAndroid Build Coastguard Worker unsigned int size;
267*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->get_Size(&size);
268*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
269*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(0u, size);
270*6777b538SAndroid Build Coastguard Worker }
271*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,get_Size_One)272*6777b538SAndroid Build Coastguard Worker TEST(MapTest, get_Size_One) {
273*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>(g_one);
274*6777b538SAndroid Build Coastguard Worker unsigned int size;
275*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->get_Size(&size);
276*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
277*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(1u, size);
278*6777b538SAndroid Build Coastguard Worker }
279*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,get_Size_Two)280*6777b538SAndroid Build Coastguard Worker TEST(MapTest, get_Size_Two) {
281*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>(g_two);
282*6777b538SAndroid Build Coastguard Worker unsigned int size;
283*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->get_Size(&size);
284*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
285*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(2u, size);
286*6777b538SAndroid Build Coastguard Worker }
287*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,HasKey_Empty)288*6777b538SAndroid Build Coastguard Worker TEST(MapTest, HasKey_Empty) {
289*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>();
290*6777b538SAndroid Build Coastguard Worker boolean found;
291*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->HasKey(1, &found);
292*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
293*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(found);
294*6777b538SAndroid Build Coastguard Worker }
295*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,HasKey_One)296*6777b538SAndroid Build Coastguard Worker TEST(MapTest, HasKey_One) {
297*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>(g_one);
298*6777b538SAndroid Build Coastguard Worker boolean found;
299*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->HasKey(1, &found);
300*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
301*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(found);
302*6777b538SAndroid Build Coastguard Worker hr = map->HasKey(2, &found);
303*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
304*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(found);
305*6777b538SAndroid Build Coastguard Worker }
306*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,HasKey_Two)307*6777b538SAndroid Build Coastguard Worker TEST(MapTest, HasKey_Two) {
308*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>(g_two);
309*6777b538SAndroid Build Coastguard Worker boolean found;
310*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->HasKey(1, &found);
311*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
312*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(found);
313*6777b538SAndroid Build Coastguard Worker hr = map->HasKey(2, &found);
314*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
315*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(found);
316*6777b538SAndroid Build Coastguard Worker }
317*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,GetView)318*6777b538SAndroid Build Coastguard Worker TEST(MapTest, GetView) {
319*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>(g_two);
320*6777b538SAndroid Build Coastguard Worker ComPtr<IMapView<int, double>> view;
321*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->GetView(&view);
322*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
323*6777b538SAndroid Build Coastguard Worker
324*6777b538SAndroid Build Coastguard Worker double value;
325*6777b538SAndroid Build Coastguard Worker hr = view->Lookup(1, &value);
326*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(S_OK, hr);
327*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(10.7, value);
328*6777b538SAndroid Build Coastguard Worker hr = view->Lookup(2, &value);
329*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(S_OK, hr);
330*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(20.3, value);
331*6777b538SAndroid Build Coastguard Worker
332*6777b538SAndroid Build Coastguard Worker unsigned int size;
333*6777b538SAndroid Build Coastguard Worker hr = view->get_Size(&size);
334*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
335*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(2u, size);
336*6777b538SAndroid Build Coastguard Worker
337*6777b538SAndroid Build Coastguard Worker boolean found;
338*6777b538SAndroid Build Coastguard Worker hr = view->HasKey(1, &found);
339*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
340*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(found);
341*6777b538SAndroid Build Coastguard Worker hr = view->HasKey(2, &found);
342*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
343*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(found);
344*6777b538SAndroid Build Coastguard Worker
345*6777b538SAndroid Build Coastguard Worker // The view is supposed to be a snapshot of the map when it's created.
346*6777b538SAndroid Build Coastguard Worker // Further modifications to the map will invalidate the view.
347*6777b538SAndroid Build Coastguard Worker boolean replaced;
348*6777b538SAndroid Build Coastguard Worker hr = map->Insert(3, 11.2, &replaced);
349*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
350*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(replaced);
351*6777b538SAndroid Build Coastguard Worker
352*6777b538SAndroid Build Coastguard Worker hr = view->Lookup(1, &value);
353*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(E_CHANGED_STATE, hr);
354*6777b538SAndroid Build Coastguard Worker
355*6777b538SAndroid Build Coastguard Worker hr = view->get_Size(&size);
356*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(E_CHANGED_STATE, hr);
357*6777b538SAndroid Build Coastguard Worker
358*6777b538SAndroid Build Coastguard Worker hr = view->HasKey(1, &found);
359*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(E_CHANGED_STATE, hr);
360*6777b538SAndroid Build Coastguard Worker }
361*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,Insert_Empty)362*6777b538SAndroid Build Coastguard Worker TEST(MapTest, Insert_Empty) {
363*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>();
364*6777b538SAndroid Build Coastguard Worker auto handler = Make<FakeMapChangedEventHandler<int, double>>(map.Get());
365*6777b538SAndroid Build Coastguard Worker boolean replaced;
366*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->Insert(1, 11.2, &replaced);
367*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
368*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(replaced);
369*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(map.Get(), handler->sender());
370*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(CollectionChange_ItemInserted, handler->change());
371*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(1, handler->key());
372*6777b538SAndroid Build Coastguard Worker double value;
373*6777b538SAndroid Build Coastguard Worker hr = map->Lookup(1, &value);
374*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(S_OK, hr);
375*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(11.2, value);
376*6777b538SAndroid Build Coastguard Worker }
377*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,Insert_One)378*6777b538SAndroid Build Coastguard Worker TEST(MapTest, Insert_One) {
379*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>(g_one);
380*6777b538SAndroid Build Coastguard Worker auto handler = Make<FakeMapChangedEventHandler<int, double>>(map.Get());
381*6777b538SAndroid Build Coastguard Worker double value;
382*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->Lookup(1, &value);
383*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(S_OK, hr);
384*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(10.7, value);
385*6777b538SAndroid Build Coastguard Worker boolean replaced;
386*6777b538SAndroid Build Coastguard Worker hr = map->Insert(1, 11.2, &replaced);
387*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
388*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(replaced);
389*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(map.Get(), handler->sender());
390*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(CollectionChange_ItemChanged, handler->change());
391*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(1, handler->key());
392*6777b538SAndroid Build Coastguard Worker hr = map->Lookup(1, &value);
393*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(S_OK, hr);
394*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(11.2, value);
395*6777b538SAndroid Build Coastguard Worker }
396*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,Remove_One)397*6777b538SAndroid Build Coastguard Worker TEST(MapTest, Remove_One) {
398*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>(g_one);
399*6777b538SAndroid Build Coastguard Worker auto handler = Make<FakeMapChangedEventHandler<int, double>>(map.Get());
400*6777b538SAndroid Build Coastguard Worker double value;
401*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->Lookup(1, &value);
402*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(S_OK, hr);
403*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(10.7, value);
404*6777b538SAndroid Build Coastguard Worker hr = map->Remove(1);
405*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(S_OK, hr);
406*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(map.Get(), handler->sender());
407*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(CollectionChange_ItemRemoved, handler->change());
408*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(1, handler->key());
409*6777b538SAndroid Build Coastguard Worker hr = map->Lookup(1, &value);
410*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(E_BOUNDS, hr);
411*6777b538SAndroid Build Coastguard Worker }
412*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,Clear)413*6777b538SAndroid Build Coastguard Worker TEST(MapTest, Clear) {
414*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>(g_one);
415*6777b538SAndroid Build Coastguard Worker auto handler = Make<FakeMapChangedEventHandler<int, double>>(map.Get());
416*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->Clear();
417*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(map.Get(), handler->sender());
418*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(CollectionChange_Reset, handler->change());
419*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(0, handler->key());
420*6777b538SAndroid Build Coastguard Worker unsigned int size;
421*6777b538SAndroid Build Coastguard Worker hr = map->get_Size(&size);
422*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
423*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(0u, size);
424*6777b538SAndroid Build Coastguard Worker }
425*6777b538SAndroid Build Coastguard Worker
426*6777b538SAndroid Build Coastguard Worker // Uri* is an AggregateType which ABI representation is IUriRuntimeClass*.
TEST(MapTest,ConstructWithAggregateTypes)427*6777b538SAndroid Build Coastguard Worker TEST(MapTest, ConstructWithAggregateTypes) {
428*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<Uri*, Uri*>>();
429*6777b538SAndroid Build Coastguard Worker unsigned size;
430*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->get_Size(&size);
431*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
432*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(0u, size);
433*6777b538SAndroid Build Coastguard Worker }
434*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,First)435*6777b538SAndroid Build Coastguard Worker TEST(MapTest, First) {
436*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<int, double>>(g_two);
437*6777b538SAndroid Build Coastguard Worker ComPtr<IIterator<IKeyValuePair<int, double>*>> iterator;
438*6777b538SAndroid Build Coastguard Worker
439*6777b538SAndroid Build Coastguard Worker // Test iteration.
440*6777b538SAndroid Build Coastguard Worker HRESULT hr = map->First(&iterator);
441*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
442*6777b538SAndroid Build Coastguard Worker boolean has_current;
443*6777b538SAndroid Build Coastguard Worker hr = iterator->get_HasCurrent(&has_current);
444*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
445*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(has_current);
446*6777b538SAndroid Build Coastguard Worker ComPtr<IKeyValuePair<int, double>> current;
447*6777b538SAndroid Build Coastguard Worker hr = iterator->get_Current(¤t);
448*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
449*6777b538SAndroid Build Coastguard Worker int key;
450*6777b538SAndroid Build Coastguard Worker hr = current->get_Key(&key);
451*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
452*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(1, key);
453*6777b538SAndroid Build Coastguard Worker double value;
454*6777b538SAndroid Build Coastguard Worker hr = current->get_Value(&value);
455*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
456*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(10.7, value);
457*6777b538SAndroid Build Coastguard Worker hr = iterator->MoveNext(&has_current);
458*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
459*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(has_current);
460*6777b538SAndroid Build Coastguard Worker hr = iterator->get_Current(¤t);
461*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
462*6777b538SAndroid Build Coastguard Worker hr = current->get_Key(&key);
463*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
464*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(2, key);
465*6777b538SAndroid Build Coastguard Worker hr = current->get_Value(&value);
466*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
467*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(20.3, value);
468*6777b538SAndroid Build Coastguard Worker hr = iterator->MoveNext(&has_current);
469*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
470*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(has_current);
471*6777b538SAndroid Build Coastguard Worker hr = iterator->get_Current(¤t);
472*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(SUCCEEDED(hr));
473*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(E_BOUNDS, hr);
474*6777b538SAndroid Build Coastguard Worker hr = iterator->MoveNext(&has_current);
475*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(SUCCEEDED(hr));
476*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(E_BOUNDS, hr);
477*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(has_current);
478*6777b538SAndroid Build Coastguard Worker
479*6777b538SAndroid Build Coastguard Worker // Test invalidation.
480*6777b538SAndroid Build Coastguard Worker hr = map->First(&iterator);
481*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
482*6777b538SAndroid Build Coastguard Worker hr = iterator->get_HasCurrent(&has_current);
483*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
484*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(has_current);
485*6777b538SAndroid Build Coastguard Worker boolean replaced;
486*6777b538SAndroid Build Coastguard Worker hr = map->Insert(3, 11.2, &replaced);
487*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
488*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(replaced);
489*6777b538SAndroid Build Coastguard Worker hr = iterator->get_HasCurrent(&has_current);
490*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(E_CHANGED_STATE, hr);
491*6777b538SAndroid Build Coastguard Worker hr = iterator->MoveNext(&has_current);
492*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(E_CHANGED_STATE, hr);
493*6777b538SAndroid Build Coastguard Worker }
494*6777b538SAndroid Build Coastguard Worker
TEST(MapTest,Properties)495*6777b538SAndroid Build Coastguard Worker TEST(MapTest, Properties) {
496*6777b538SAndroid Build Coastguard Worker // This test case validates Map against Windows property key system,
497*6777b538SAndroid Build Coastguard Worker // which is used to store WinRT device properties.
498*6777b538SAndroid Build Coastguard Worker ScopedWinrtInitializer winrt_initializer;
499*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(winrt_initializer.Succeeded());
500*6777b538SAndroid Build Coastguard Worker
501*6777b538SAndroid Build Coastguard Worker auto map = Make<Map<HSTRING, IInspectable*>>();
502*6777b538SAndroid Build Coastguard Worker
503*6777b538SAndroid Build Coastguard Worker ComPtr<IPropertyValueStatics> property_value_statics;
504*6777b538SAndroid Build Coastguard Worker HRESULT hr =
505*6777b538SAndroid Build Coastguard Worker GetPropertyValueStaticsActivationFactory(&property_value_statics);
506*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
507*6777b538SAndroid Build Coastguard Worker
508*6777b538SAndroid Build Coastguard Worker base::win::HStringReference value_stringref_inserted(kTestValue);
509*6777b538SAndroid Build Coastguard Worker ComPtr<IPropertyValue> value_inserted;
510*6777b538SAndroid Build Coastguard Worker hr = property_value_statics->CreateString(value_stringref_inserted.Get(),
511*6777b538SAndroid Build Coastguard Worker &value_inserted);
512*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
513*6777b538SAndroid Build Coastguard Worker
514*6777b538SAndroid Build Coastguard Worker base::win::HStringReference key_stringref_inserted(kTestKey);
515*6777b538SAndroid Build Coastguard Worker boolean replaced;
516*6777b538SAndroid Build Coastguard Worker hr = map->Insert(key_stringref_inserted.Get(), value_inserted.Get(),
517*6777b538SAndroid Build Coastguard Worker &replaced);
518*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
519*6777b538SAndroid Build Coastguard Worker
520*6777b538SAndroid Build Coastguard Worker base::win::HStringReference key_stringref_lookedup(kTestKey);
521*6777b538SAndroid Build Coastguard Worker ComPtr<IInspectable> value_inspectable_lookedup;
522*6777b538SAndroid Build Coastguard Worker hr = map->Lookup(key_stringref_lookedup.Get(), &value_inspectable_lookedup);
523*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
524*6777b538SAndroid Build Coastguard Worker
525*6777b538SAndroid Build Coastguard Worker ComPtr<IPropertyValue> value_lookedup;
526*6777b538SAndroid Build Coastguard Worker hr = value_inspectable_lookedup.As(&value_lookedup);
527*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
528*6777b538SAndroid Build Coastguard Worker
529*6777b538SAndroid Build Coastguard Worker HSTRING value_string_lookedup;
530*6777b538SAndroid Build Coastguard Worker hr = value_lookedup->GetString(&value_string_lookedup);
531*6777b538SAndroid Build Coastguard Worker EXPECT_HRESULT_SUCCEEDED(hr);
532*6777b538SAndroid Build Coastguard Worker
533*6777b538SAndroid Build Coastguard Worker auto value_stringref_lookedup = ScopedHString(value_string_lookedup);
534*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(kTestValue, value_stringref_lookedup.Get());
535*6777b538SAndroid Build Coastguard Worker }
536*6777b538SAndroid Build Coastguard Worker
537*6777b538SAndroid Build Coastguard Worker } // namespace base::win
538