xref: /aosp_15_r20/external/cronet/base/win/variant_conversions_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2020 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/variant_conversions.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <stdint.h>
8*6777b538SAndroid Build Coastguard Worker #include <wrl/client.h>
9*6777b538SAndroid Build Coastguard Worker #include <wrl/implements.h>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include <set>
12*6777b538SAndroid Build Coastguard Worker #include <utility>
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker #include "base/containers/contains.h"
15*6777b538SAndroid Build Coastguard Worker #include "base/win/dispatch_stub.h"
16*6777b538SAndroid Build Coastguard Worker #include "base/win/scoped_bstr.h"
17*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker using base::win::internal::VariantConverter;
20*6777b538SAndroid Build Coastguard Worker using base::win::test::DispatchStub;
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker namespace base {
23*6777b538SAndroid Build Coastguard Worker namespace win {
24*6777b538SAndroid Build Coastguard Worker 
25*6777b538SAndroid Build Coastguard Worker namespace {
26*6777b538SAndroid Build Coastguard Worker 
27*6777b538SAndroid Build Coastguard Worker static constexpr VARTYPE kSupportedVartypes[] = {
28*6777b538SAndroid Build Coastguard Worker     VT_BOOL, VT_I1, VT_UI1, VT_I2,   VT_UI2,  VT_I4,      VT_UI4,     VT_I8,
29*6777b538SAndroid Build Coastguard Worker     VT_UI8,  VT_R4, VT_R8,  VT_DATE, VT_BSTR, VT_UNKNOWN, VT_DISPATCH};
30*6777b538SAndroid Build Coastguard Worker 
31*6777b538SAndroid Build Coastguard Worker template <VARTYPE ElementVartype>
TestIsConvertibleTo(const std::set<VARTYPE> & allowed_vartypes)32*6777b538SAndroid Build Coastguard Worker static bool TestIsConvertibleTo(const std::set<VARTYPE>& allowed_vartypes) {
33*6777b538SAndroid Build Coastguard Worker   for (VARTYPE vartype : kSupportedVartypes) {
34*6777b538SAndroid Build Coastguard Worker     if (VariantConverter<ElementVartype>::IsConvertibleTo(vartype) !=
35*6777b538SAndroid Build Coastguard Worker         base::Contains(allowed_vartypes, vartype)) {
36*6777b538SAndroid Build Coastguard Worker       return false;
37*6777b538SAndroid Build Coastguard Worker     }
38*6777b538SAndroid Build Coastguard Worker   }
39*6777b538SAndroid Build Coastguard Worker   return true;
40*6777b538SAndroid Build Coastguard Worker }
41*6777b538SAndroid Build Coastguard Worker 
42*6777b538SAndroid Build Coastguard Worker template <VARTYPE ElementVartype>
TestIsConvertibleFrom(const std::set<VARTYPE> & allowed_vartypes)43*6777b538SAndroid Build Coastguard Worker static bool TestIsConvertibleFrom(const std::set<VARTYPE>& allowed_vartypes) {
44*6777b538SAndroid Build Coastguard Worker   for (VARTYPE vartype : kSupportedVartypes) {
45*6777b538SAndroid Build Coastguard Worker     if (VariantConverter<ElementVartype>::IsConvertibleFrom(vartype) !=
46*6777b538SAndroid Build Coastguard Worker         base::Contains(allowed_vartypes, vartype)) {
47*6777b538SAndroid Build Coastguard Worker       return false;
48*6777b538SAndroid Build Coastguard Worker     }
49*6777b538SAndroid Build Coastguard Worker   }
50*6777b538SAndroid Build Coastguard Worker   return true;
51*6777b538SAndroid Build Coastguard Worker }
52*6777b538SAndroid Build Coastguard Worker 
53*6777b538SAndroid Build Coastguard Worker }  // namespace
54*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeBool)55*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeBool) {
56*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
57*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_BOOL;
58*6777b538SAndroid Build Coastguard Worker 
59*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_BOOL>::RawSet(&variant, VARIANT_TRUE);
60*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_BOOL(&variant), VARIANT_TRUE);
61*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_BOOL>::RawGet(variant), VARIANT_TRUE);
62*6777b538SAndroid Build Coastguard Worker 
63*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_BOOL};
64*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_BOOL>(allowed_vartypes));
65*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_BOOL>(allowed_vartypes));
66*6777b538SAndroid Build Coastguard Worker }
67*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeI1)68*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeI1) {
69*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
70*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_I1;
71*6777b538SAndroid Build Coastguard Worker 
72*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_I1>::RawSet(&variant, 34);
73*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_I1(&variant), 34);
74*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_I1>::RawGet(variant), 34);
75*6777b538SAndroid Build Coastguard Worker 
76*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_I1};
77*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_I1>(allowed_vartypes));
78*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_I1>(allowed_vartypes));
79*6777b538SAndroid Build Coastguard Worker }
80*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeUI1)81*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeUI1) {
82*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
83*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_UI1;
84*6777b538SAndroid Build Coastguard Worker 
85*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_UI1>::RawSet(&variant, 34U);
86*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_UI1(&variant), 34U);
87*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_UI1>::RawGet(variant), 34U);
88*6777b538SAndroid Build Coastguard Worker 
89*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_UI1};
90*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_UI1>(allowed_vartypes));
91*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_UI1>(allowed_vartypes));
92*6777b538SAndroid Build Coastguard Worker }
93*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeI2)94*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeI2) {
95*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
96*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_I2;
97*6777b538SAndroid Build Coastguard Worker 
98*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_I2>::RawSet(&variant, 8738);
99*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_I2(&variant), 8738);
100*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_I2>::RawGet(variant), 8738);
101*6777b538SAndroid Build Coastguard Worker 
102*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_I2};
103*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_I2>(allowed_vartypes));
104*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_I2>(allowed_vartypes));
105*6777b538SAndroid Build Coastguard Worker }
106*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeUI2)107*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeUI2) {
108*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
109*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_UI2;
110*6777b538SAndroid Build Coastguard Worker 
111*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_UI2>::RawSet(&variant, 8738U);
112*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_UI2(&variant), 8738U);
113*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_UI2>::RawGet(variant), 8738U);
114*6777b538SAndroid Build Coastguard Worker 
115*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_UI2};
116*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_UI2>(allowed_vartypes));
117*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_UI2>(allowed_vartypes));
118*6777b538SAndroid Build Coastguard Worker }
119*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeI4)120*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeI4) {
121*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
122*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_I4;
123*6777b538SAndroid Build Coastguard Worker 
124*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_I4>::RawSet(&variant, 572662306);
125*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_I4(&variant), 572662306);
126*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_I4>::RawGet(variant), 572662306);
127*6777b538SAndroid Build Coastguard Worker 
128*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_I4};
129*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_I4>(allowed_vartypes));
130*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_I4>(allowed_vartypes));
131*6777b538SAndroid Build Coastguard Worker }
132*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeUI4)133*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeUI4) {
134*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
135*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_UI4;
136*6777b538SAndroid Build Coastguard Worker 
137*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_UI4>::RawSet(&variant, 572662306U);
138*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_UI4(&variant), 572662306U);
139*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_UI4>::RawGet(variant), 572662306U);
140*6777b538SAndroid Build Coastguard Worker 
141*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_UI4};
142*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_UI4>(allowed_vartypes));
143*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_UI4>(allowed_vartypes));
144*6777b538SAndroid Build Coastguard Worker }
145*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeI8)146*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeI8) {
147*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
148*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_I8;
149*6777b538SAndroid Build Coastguard Worker 
150*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_I8>::RawSet(&variant, 2459565876494606882);
151*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_I8(&variant), 2459565876494606882);
152*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_I8>::RawGet(variant), 2459565876494606882);
153*6777b538SAndroid Build Coastguard Worker 
154*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_I8};
155*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_I8>(allowed_vartypes));
156*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_I8>(allowed_vartypes));
157*6777b538SAndroid Build Coastguard Worker }
158*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeUI8)159*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeUI8) {
160*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
161*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_UI8;
162*6777b538SAndroid Build Coastguard Worker 
163*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_UI8>::RawSet(&variant, 2459565876494606882U);
164*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_UI8(&variant), 2459565876494606882U);
165*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_UI8>::RawGet(variant), 2459565876494606882U);
166*6777b538SAndroid Build Coastguard Worker 
167*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_UI8};
168*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_UI8>(allowed_vartypes));
169*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_UI8>(allowed_vartypes));
170*6777b538SAndroid Build Coastguard Worker }
171*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeR4)172*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeR4) {
173*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
174*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_R4;
175*6777b538SAndroid Build Coastguard Worker 
176*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_R4>::RawSet(&variant, 3.14159f);
177*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_R4(&variant), 3.14159f);
178*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_R4>::RawGet(variant), 3.14159f);
179*6777b538SAndroid Build Coastguard Worker 
180*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_R4};
181*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_R4>(allowed_vartypes));
182*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_R4>(allowed_vartypes));
183*6777b538SAndroid Build Coastguard Worker }
184*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeR8)185*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeR8) {
186*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
187*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_R8;
188*6777b538SAndroid Build Coastguard Worker 
189*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_R8>::RawSet(&variant, 3.14159);
190*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_R8(&variant), 3.14159);
191*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_R8>::RawGet(variant), 3.14159);
192*6777b538SAndroid Build Coastguard Worker 
193*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_R8};
194*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_R8>(allowed_vartypes));
195*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_R8>(allowed_vartypes));
196*6777b538SAndroid Build Coastguard Worker }
197*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeDate)198*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeDate) {
199*6777b538SAndroid Build Coastguard Worker   SYSTEMTIME sys_time;
200*6777b538SAndroid Build Coastguard Worker   ::GetSystemTime(&sys_time);
201*6777b538SAndroid Build Coastguard Worker   DATE date;
202*6777b538SAndroid Build Coastguard Worker   ::SystemTimeToVariantTime(&sys_time, &date);
203*6777b538SAndroid Build Coastguard Worker 
204*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
205*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_DATE;
206*6777b538SAndroid Build Coastguard Worker 
207*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_DATE>::RawSet(&variant, date);
208*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_DATE(&variant), date);
209*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_DATE>::RawGet(variant), date);
210*6777b538SAndroid Build Coastguard Worker 
211*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_DATE};
212*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_DATE>(allowed_vartypes));
213*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_DATE>(allowed_vartypes));
214*6777b538SAndroid Build Coastguard Worker }
215*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeBstr)216*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeBstr) {
217*6777b538SAndroid Build Coastguard Worker   ScopedBstr scoped_bstr;
218*6777b538SAndroid Build Coastguard Worker   scoped_bstr.Allocate(L"some text");
219*6777b538SAndroid Build Coastguard Worker 
220*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
221*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_BSTR;
222*6777b538SAndroid Build Coastguard Worker 
223*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_BSTR>::RawSet(&variant, scoped_bstr.Get());
224*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_BSTR(&variant), scoped_bstr.Get());
225*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_BSTR>::RawGet(variant), scoped_bstr.Get());
226*6777b538SAndroid Build Coastguard Worker 
227*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allowed_vartypes = {VT_BSTR};
228*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_BSTR>(allowed_vartypes));
229*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_BSTR>(allowed_vartypes));
230*6777b538SAndroid Build Coastguard Worker }
231*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeUnknown)232*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeUnknown) {
233*6777b538SAndroid Build Coastguard Worker   Microsoft::WRL::ComPtr<IUnknown> unknown =
234*6777b538SAndroid Build Coastguard Worker       Microsoft::WRL::Make<DispatchStub>();
235*6777b538SAndroid Build Coastguard Worker 
236*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
237*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_UNKNOWN;
238*6777b538SAndroid Build Coastguard Worker 
239*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_UNKNOWN>::RawSet(&variant, unknown.Get());
240*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_UNKNOWN(&variant), unknown.Get());
241*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_UNKNOWN>::RawGet(variant), unknown.Get());
242*6777b538SAndroid Build Coastguard Worker 
243*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allow_convertible_to = {VT_UNKNOWN};
244*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allow_convertible_from = {VT_UNKNOWN, VT_DISPATCH};
245*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_UNKNOWN>(allow_convertible_to));
246*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_UNKNOWN>(allow_convertible_from));
247*6777b538SAndroid Build Coastguard Worker }
248*6777b538SAndroid Build Coastguard Worker 
TEST(VariantConverterTest,VariantTypeDispatch)249*6777b538SAndroid Build Coastguard Worker TEST(VariantConverterTest, VariantTypeDispatch) {
250*6777b538SAndroid Build Coastguard Worker   Microsoft::WRL::ComPtr<IDispatch> dispatch =
251*6777b538SAndroid Build Coastguard Worker       Microsoft::WRL::Make<DispatchStub>();
252*6777b538SAndroid Build Coastguard Worker 
253*6777b538SAndroid Build Coastguard Worker   VARIANT variant;
254*6777b538SAndroid Build Coastguard Worker   V_VT(&variant) = VT_DISPATCH;
255*6777b538SAndroid Build Coastguard Worker 
256*6777b538SAndroid Build Coastguard Worker   VariantConverter<VT_DISPATCH>::RawSet(&variant, dispatch.Get());
257*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(V_DISPATCH(&variant), dispatch.Get());
258*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(VariantConverter<VT_DISPATCH>::RawGet(variant), dispatch.Get());
259*6777b538SAndroid Build Coastguard Worker 
260*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allow_convertible_to = {VT_UNKNOWN, VT_DISPATCH};
261*6777b538SAndroid Build Coastguard Worker   const std::set<VARTYPE> allow_convertible_from = {VT_DISPATCH};
262*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleTo<VT_DISPATCH>(allow_convertible_to));
263*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(TestIsConvertibleFrom<VT_DISPATCH>(allow_convertible_from));
264*6777b538SAndroid Build Coastguard Worker }
265*6777b538SAndroid Build Coastguard Worker 
266*6777b538SAndroid Build Coastguard Worker }  // namespace win
267*6777b538SAndroid Build Coastguard Worker }  // namespace base
268