Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side Diff: base/win/scoped_variant_unittest.cc

Issue 1001833005: Update from https://crrev.com/320343 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Supress Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/win/scoped_variant.h ('k') | base/win/startup_information.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/win/scoped_variant.h" 5 #include "base/win/scoped_variant.h"
6 #include "testing/gtest/include/gtest/gtest.h" 6 #include "testing/gtest/include/gtest/gtest.h"
7 7
8 namespace base { 8 namespace base {
9 namespace win { 9 namespace win {
10 10
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 65
66 protected: 66 protected:
67 int ref_; 67 int ref_;
68 }; 68 };
69 69
70 } // namespace 70 } // namespace
71 71
72 TEST(ScopedVariantTest, ScopedVariant) { 72 TEST(ScopedVariantTest, ScopedVariant) {
73 ScopedVariant var; 73 ScopedVariant var;
74 EXPECT_TRUE(var.type() == VT_EMPTY); 74 EXPECT_TRUE(var.type() == VT_EMPTY);
75 // V_BSTR(&var) = NULL; <- NOTE: Assignment like that is not supported 75 // V_BSTR(var.ptr()) = NULL; <- NOTE: Assignment like that is not supported.
76 76
77 ScopedVariant var_bstr(L"VT_BSTR"); 77 ScopedVariant var_bstr(L"VT_BSTR");
78 EXPECT_EQ(VT_BSTR, V_VT(&var_bstr)); 78 EXPECT_EQ(VT_BSTR, V_VT(var_bstr.ptr()));
79 EXPECT_TRUE(V_BSTR(&var_bstr) != NULL); // can't use EXPECT_NE for BSTR 79 EXPECT_TRUE(V_BSTR(var_bstr.ptr()) != NULL); // can't use EXPECT_NE for BSTR
80 var_bstr.Reset(); 80 var_bstr.Reset();
81 EXPECT_NE(VT_BSTR, V_VT(&var_bstr)); 81 EXPECT_NE(VT_BSTR, V_VT(var_bstr.ptr()));
82 var_bstr.Set(kTestString2); 82 var_bstr.Set(kTestString2);
83 EXPECT_EQ(VT_BSTR, V_VT(&var_bstr)); 83 EXPECT_EQ(VT_BSTR, V_VT(var_bstr.ptr()));
84 84
85 VARIANT tmp = var_bstr.Release(); 85 VARIANT tmp = var_bstr.Release();
86 EXPECT_EQ(VT_EMPTY, V_VT(&var_bstr)); 86 EXPECT_EQ(VT_EMPTY, V_VT(var_bstr.ptr()));
87 EXPECT_EQ(VT_BSTR, V_VT(&tmp)); 87 EXPECT_EQ(VT_BSTR, V_VT(&tmp));
88 EXPECT_EQ(0, lstrcmp(V_BSTR(&tmp), kTestString2)); 88 EXPECT_EQ(0, lstrcmp(V_BSTR(&tmp), kTestString2));
89 89
90 var.Reset(tmp); 90 var.Reset(tmp);
91 EXPECT_EQ(VT_BSTR, V_VT(&var)); 91 EXPECT_EQ(VT_BSTR, V_VT(var.ptr()));
92 EXPECT_EQ(0, lstrcmpW(V_BSTR(&var), kTestString2)); 92 EXPECT_EQ(0, lstrcmpW(V_BSTR(var.ptr()), kTestString2));
93 93
94 var_bstr.Swap(var); 94 var_bstr.Swap(var);
95 EXPECT_EQ(VT_EMPTY, V_VT(&var)); 95 EXPECT_EQ(VT_EMPTY, V_VT(var.ptr()));
96 EXPECT_EQ(VT_BSTR, V_VT(&var_bstr)); 96 EXPECT_EQ(VT_BSTR, V_VT(var_bstr.ptr()));
97 EXPECT_EQ(0, lstrcmpW(V_BSTR(&var_bstr), kTestString2)); 97 EXPECT_EQ(0, lstrcmpW(V_BSTR(var_bstr.ptr()), kTestString2));
98 var_bstr.Reset(); 98 var_bstr.Reset();
99 99
100 // Test the Compare and Copy routines. 100 // Test the Compare and Copy routines.
101 GiveMeAVariant(var_bstr.Receive()); 101 GiveMeAVariant(var_bstr.Receive());
102 ScopedVariant var_bstr2(V_BSTR(&var_bstr)); 102 ScopedVariant var_bstr2(V_BSTR(var_bstr.ptr()));
103 EXPECT_EQ(0, var_bstr.Compare(var_bstr2)); 103 EXPECT_EQ(0, var_bstr.Compare(var_bstr2));
104 var_bstr2.Reset(); 104 var_bstr2.Reset();
105 EXPECT_NE(0, var_bstr.Compare(var_bstr2)); 105 EXPECT_NE(0, var_bstr.Compare(var_bstr2));
106 var_bstr2.Reset(var_bstr.Copy()); 106 var_bstr2.Reset(var_bstr.Copy());
107 EXPECT_EQ(0, var_bstr.Compare(var_bstr2)); 107 EXPECT_EQ(0, var_bstr.Compare(var_bstr2));
108 var_bstr2.Reset(); 108 var_bstr2.Reset();
109 var_bstr2.Set(V_BSTR(&var_bstr)); 109 var_bstr2.Set(V_BSTR(var_bstr.ptr()));
110 EXPECT_EQ(0, var_bstr.Compare(var_bstr2)); 110 EXPECT_EQ(0, var_bstr.Compare(var_bstr2));
111 var_bstr2.Reset(); 111 var_bstr2.Reset();
112 var_bstr.Reset(); 112 var_bstr.Reset();
113 113
114 // Test for the SetDate setter. 114 // Test for the SetDate setter.
115 SYSTEMTIME sys_time; 115 SYSTEMTIME sys_time;
116 ::GetSystemTime(&sys_time); 116 ::GetSystemTime(&sys_time);
117 DATE date; 117 DATE date;
118 ::SystemTimeToVariantTime(&sys_time, &date); 118 ::SystemTimeToVariantTime(&sys_time, &date);
119 var.Reset(); 119 var.Reset();
120 var.SetDate(date); 120 var.SetDate(date);
121 EXPECT_EQ(VT_DATE, var.type()); 121 EXPECT_EQ(VT_DATE, var.type());
122 EXPECT_EQ(date, V_DATE(&var)); 122 EXPECT_EQ(date, V_DATE(var.ptr()));
123 123
124 // Simple setter tests. These do not require resetting the variant 124 // Simple setter tests. These do not require resetting the variant
125 // after each test since the variant type is not "leakable" (i.e. doesn't 125 // after each test since the variant type is not "leakable" (i.e. doesn't
126 // need to be freed explicitly). 126 // need to be freed explicitly).
127 127
128 // We need static cast here since char defaults to int (!?). 128 // We need static cast here since char defaults to int (!?).
129 var.Set(static_cast<int8>('v')); 129 var.Set(static_cast<int8>('v'));
130 EXPECT_EQ(VT_I1, var.type()); 130 EXPECT_EQ(VT_I1, var.type());
131 EXPECT_EQ('v', V_I1(&var)); 131 EXPECT_EQ('v', V_I1(var.ptr()));
132 132
133 var.Set(static_cast<short>(123)); 133 var.Set(static_cast<short>(123));
134 EXPECT_EQ(VT_I2, var.type()); 134 EXPECT_EQ(VT_I2, var.type());
135 EXPECT_EQ(123, V_I2(&var)); 135 EXPECT_EQ(123, V_I2(var.ptr()));
136 136
137 var.Set(static_cast<int32>(123)); 137 var.Set(static_cast<int32>(123));
138 EXPECT_EQ(VT_I4, var.type()); 138 EXPECT_EQ(VT_I4, var.type());
139 EXPECT_EQ(123, V_I4(&var)); 139 EXPECT_EQ(123, V_I4(var.ptr()));
140 140
141 var.Set(static_cast<int64>(123)); 141 var.Set(static_cast<int64>(123));
142 EXPECT_EQ(VT_I8, var.type()); 142 EXPECT_EQ(VT_I8, var.type());
143 EXPECT_EQ(123, V_I8(&var)); 143 EXPECT_EQ(123, V_I8(var.ptr()));
144 144
145 var.Set(static_cast<uint8>(123)); 145 var.Set(static_cast<uint8>(123));
146 EXPECT_EQ(VT_UI1, var.type()); 146 EXPECT_EQ(VT_UI1, var.type());
147 EXPECT_EQ(123, V_UI1(&var)); 147 EXPECT_EQ(123, V_UI1(var.ptr()));
148 148
149 var.Set(static_cast<unsigned short>(123)); 149 var.Set(static_cast<unsigned short>(123));
150 EXPECT_EQ(VT_UI2, var.type()); 150 EXPECT_EQ(VT_UI2, var.type());
151 EXPECT_EQ(123, V_UI2(&var)); 151 EXPECT_EQ(123, V_UI2(var.ptr()));
152 152
153 var.Set(static_cast<uint32>(123)); 153 var.Set(static_cast<uint32>(123));
154 EXPECT_EQ(VT_UI4, var.type()); 154 EXPECT_EQ(VT_UI4, var.type());
155 EXPECT_EQ(123, V_UI4(&var)); 155 EXPECT_EQ(123, V_UI4(var.ptr()));
156 156
157 var.Set(static_cast<uint64>(123)); 157 var.Set(static_cast<uint64>(123));
158 EXPECT_EQ(VT_UI8, var.type()); 158 EXPECT_EQ(VT_UI8, var.type());
159 EXPECT_EQ(123, V_UI8(&var)); 159 EXPECT_EQ(123, V_UI8(var.ptr()));
160 160
161 var.Set(123.123f); 161 var.Set(123.123f);
162 EXPECT_EQ(VT_R4, var.type()); 162 EXPECT_EQ(VT_R4, var.type());
163 EXPECT_EQ(123.123f, V_R4(&var)); 163 EXPECT_EQ(123.123f, V_R4(var.ptr()));
164 164
165 var.Set(static_cast<double>(123.123)); 165 var.Set(static_cast<double>(123.123));
166 EXPECT_EQ(VT_R8, var.type()); 166 EXPECT_EQ(VT_R8, var.type());
167 EXPECT_EQ(123.123, V_R8(&var)); 167 EXPECT_EQ(123.123, V_R8(var.ptr()));
168 168
169 var.Set(true); 169 var.Set(true);
170 EXPECT_EQ(VT_BOOL, var.type()); 170 EXPECT_EQ(VT_BOOL, var.type());
171 EXPECT_EQ(VARIANT_TRUE, V_BOOL(&var)); 171 EXPECT_EQ(VARIANT_TRUE, V_BOOL(var.ptr()));
172 var.Set(false); 172 var.Set(false);
173 EXPECT_EQ(VT_BOOL, var.type()); 173 EXPECT_EQ(VT_BOOL, var.type());
174 EXPECT_EQ(VARIANT_FALSE, V_BOOL(&var)); 174 EXPECT_EQ(VARIANT_FALSE, V_BOOL(var.ptr()));
175 175
176 // Com interface tests 176 // Com interface tests
177 177
178 var.Set(static_cast<IDispatch*>(NULL)); 178 var.Set(static_cast<IDispatch*>(NULL));
179 EXPECT_EQ(VT_DISPATCH, var.type()); 179 EXPECT_EQ(VT_DISPATCH, var.type());
180 EXPECT_EQ(NULL, V_DISPATCH(&var)); 180 EXPECT_EQ(NULL, V_DISPATCH(var.ptr()));
181 var.Reset(); 181 var.Reset();
182 182
183 var.Set(static_cast<IUnknown*>(NULL)); 183 var.Set(static_cast<IUnknown*>(NULL));
184 EXPECT_EQ(VT_UNKNOWN, var.type()); 184 EXPECT_EQ(VT_UNKNOWN, var.type());
185 EXPECT_EQ(NULL, V_UNKNOWN(&var)); 185 EXPECT_EQ(NULL, V_UNKNOWN(var.ptr()));
186 var.Reset(); 186 var.Reset();
187 187
188 FakeComObject faker; 188 FakeComObject faker;
189 EXPECT_EQ(0, faker.ref_count()); 189 EXPECT_EQ(0, faker.ref_count());
190 var.Set(static_cast<IDispatch*>(&faker)); 190 var.Set(static_cast<IDispatch*>(&faker));
191 EXPECT_EQ(VT_DISPATCH, var.type()); 191 EXPECT_EQ(VT_DISPATCH, var.type());
192 EXPECT_EQ(&faker, V_DISPATCH(&var)); 192 EXPECT_EQ(&faker, V_DISPATCH(var.ptr()));
193 EXPECT_EQ(1, faker.ref_count()); 193 EXPECT_EQ(1, faker.ref_count());
194 var.Reset(); 194 var.Reset();
195 EXPECT_EQ(0, faker.ref_count()); 195 EXPECT_EQ(0, faker.ref_count());
196 196
197 var.Set(static_cast<IUnknown*>(&faker)); 197 var.Set(static_cast<IUnknown*>(&faker));
198 EXPECT_EQ(VT_UNKNOWN, var.type()); 198 EXPECT_EQ(VT_UNKNOWN, var.type());
199 EXPECT_EQ(&faker, V_UNKNOWN(&var)); 199 EXPECT_EQ(&faker, V_UNKNOWN(var.ptr()));
200 EXPECT_EQ(1, faker.ref_count()); 200 EXPECT_EQ(1, faker.ref_count());
201 var.Reset(); 201 var.Reset();
202 EXPECT_EQ(0, faker.ref_count()); 202 EXPECT_EQ(0, faker.ref_count());
203 203
204 { 204 {
205 ScopedVariant disp_var(&faker); 205 ScopedVariant disp_var(&faker);
206 EXPECT_EQ(VT_DISPATCH, disp_var.type()); 206 EXPECT_EQ(VT_DISPATCH, disp_var.type());
207 EXPECT_EQ(&faker, V_DISPATCH(&disp_var)); 207 EXPECT_EQ(&faker, V_DISPATCH(disp_var.ptr()));
208 EXPECT_EQ(1, faker.ref_count()); 208 EXPECT_EQ(1, faker.ref_count());
209 } 209 }
210 EXPECT_EQ(0, faker.ref_count()); 210 EXPECT_EQ(0, faker.ref_count());
211 211
212 { 212 {
213 ScopedVariant ref1(&faker); 213 ScopedVariant ref1(&faker);
214 EXPECT_EQ(1, faker.ref_count()); 214 EXPECT_EQ(1, faker.ref_count());
215 ScopedVariant ref2(static_cast<const VARIANT&>(ref1)); 215 ScopedVariant ref2(static_cast<const VARIANT&>(ref1));
216 EXPECT_EQ(2, faker.ref_count()); 216 EXPECT_EQ(2, faker.ref_count());
217 ScopedVariant ref3; 217 ScopedVariant ref3;
218 ref3 = static_cast<const VARIANT&>(ref2); 218 ref3 = static_cast<const VARIANT&>(ref2);
219 EXPECT_EQ(3, faker.ref_count()); 219 EXPECT_EQ(3, faker.ref_count());
220 } 220 }
221 EXPECT_EQ(0, faker.ref_count()); 221 EXPECT_EQ(0, faker.ref_count());
222 222
223 { 223 {
224 ScopedVariant unk_var(static_cast<IUnknown*>(&faker)); 224 ScopedVariant unk_var(static_cast<IUnknown*>(&faker));
225 EXPECT_EQ(VT_UNKNOWN, unk_var.type()); 225 EXPECT_EQ(VT_UNKNOWN, unk_var.type());
226 EXPECT_EQ(&faker, V_UNKNOWN(&unk_var)); 226 EXPECT_EQ(&faker, V_UNKNOWN(unk_var.ptr()));
227 EXPECT_EQ(1, faker.ref_count()); 227 EXPECT_EQ(1, faker.ref_count());
228 } 228 }
229 EXPECT_EQ(0, faker.ref_count()); 229 EXPECT_EQ(0, faker.ref_count());
230 230
231 VARIANT raw; 231 VARIANT raw;
232 raw.vt = VT_UNKNOWN; 232 raw.vt = VT_UNKNOWN;
233 raw.punkVal = &faker; 233 raw.punkVal = &faker;
234 EXPECT_EQ(0, faker.ref_count()); 234 EXPECT_EQ(0, faker.ref_count());
235 var.Set(raw); 235 var.Set(raw);
236 EXPECT_EQ(1, faker.ref_count()); 236 EXPECT_EQ(1, faker.ref_count());
237 var.Reset(); 237 var.Reset();
238 EXPECT_EQ(0, faker.ref_count()); 238 EXPECT_EQ(0, faker.ref_count());
239 239
240 { 240 {
241 ScopedVariant number(123); 241 ScopedVariant number(123);
242 EXPECT_EQ(VT_I4, number.type()); 242 EXPECT_EQ(VT_I4, number.type());
243 EXPECT_EQ(123, V_I4(&number)); 243 EXPECT_EQ(123, V_I4(number.ptr()));
244 } 244 }
245 245
246 // SAFEARRAY tests 246 // SAFEARRAY tests
247 var.Set(static_cast<SAFEARRAY*>(NULL)); 247 var.Set(static_cast<SAFEARRAY*>(NULL));
248 EXPECT_EQ(VT_EMPTY, var.type()); 248 EXPECT_EQ(VT_EMPTY, var.type());
249 249
250 SAFEARRAY* sa = ::SafeArrayCreateVector(VT_UI1, 0, 100); 250 SAFEARRAY* sa = ::SafeArrayCreateVector(VT_UI1, 0, 100);
251 ASSERT_TRUE(sa != NULL); 251 ASSERT_TRUE(sa != NULL);
252 252
253 var.Set(sa); 253 var.Set(sa);
254 EXPECT_TRUE(ScopedVariant::IsLeakableVarType(var.type())); 254 EXPECT_TRUE(ScopedVariant::IsLeakableVarType(var.type()));
255 EXPECT_EQ(VT_ARRAY | VT_UI1, var.type()); 255 EXPECT_EQ(VT_ARRAY | VT_UI1, var.type());
256 EXPECT_EQ(sa, V_ARRAY(&var)); 256 EXPECT_EQ(sa, V_ARRAY(var.ptr()));
257 // The array is destroyed in the destructor of var. 257 // The array is destroyed in the destructor of var.
258 } 258 }
259 259
260 } // namespace win 260 } // namespace win
261 } // namespace base 261 } // namespace base
OLDNEW
« no previous file with comments | « base/win/scoped_variant.h ('k') | base/win/startup_information.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698