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

Side by Side Diff: components/physical_web/eddystone/eddystone_encoder_unittest.cc

Issue 2731273004: Add Platform Independent Eddystone Encoder (Closed)
Patch Set: Fixing more Casting Created 3 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 | « components/physical_web/eddystone/eddystone_encoder.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/physical_web/eddystone/eddystone_encoder.h"
6
7 #include <algorithm>
8 #include <vector>
9
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 using std::string;
13 using std::vector;
14 using std::equal;
15
16 class EddystoneEncoderTest : public testing::Test {
17 public:
18 EddystoneEncoderTest() {}
19 ~EddystoneEncoderTest() override {}
20
21 void SetUp() override {}
22 void TearDown() override {}
23
24 bool ByteVectorEquals(const vector<uint8_t>& a, const vector<uint8_t>& b);
25 };
26
27 bool EddystoneEncoderTest::ByteVectorEquals(const vector<uint8_t>& a,
28 const vector<uint8_t>& b) {
29 if (a.size() != b.size()) {
30 return false;
31 }
32 return equal(a.begin(), a.end(), b.begin());
33 }
34
35 TEST_F(EddystoneEncoderTest, NullVector) {
36 string valid_url = "https://www.aurl.com/";
37
38 size_t expected_result = physical_web::kNullEncodedUrl;
39 size_t actual_result;
40
41 actual_result = physical_web::EncodeUrl(valid_url, NULL);
42
43 EXPECT_TRUE(expected_result == actual_result);
44 }
45
46 TEST_F(EddystoneEncoderTest, EmptyUrl) {
47 string empty_url = "";
48
49 size_t expected_result = physical_web::kEmptyUrl;
50 size_t actual_result;
51 vector<uint8_t> expected_vector;
52 vector<uint8_t> actual_vector;
53
54 actual_result = physical_web::EncodeUrl(empty_url, &actual_vector);
55
56 EXPECT_TRUE(expected_result == actual_result);
57 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
58 }
59
60 TEST_F(EddystoneEncoderTest, testTotallyInvalidUrl) {
61 string invalid_url = "InValidURL.duh";
62
63 size_t expected_result = physical_web::kInvalidUrl;
64 size_t actual_result;
65 vector<uint8_t> expected_vector;
66 vector<uint8_t> actual_vector;
67
68 actual_result = physical_web::EncodeUrl(invalid_url, &actual_vector);
69
70 EXPECT_TRUE(expected_result == actual_result);
71 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
72 }
73
74 TEST_F(EddystoneEncoderTest, testAlmostvalidUrl) {
75 string invalid_url = "https;//.com";
76
77 size_t expected_result = physical_web::kInvalidUrl;
78 size_t actual_result;
79 vector<uint8_t> expected_vector;
80 vector<uint8_t> actual_vector;
81
82 actual_result = physical_web::EncodeUrl(invalid_url, &actual_vector);
83
84 EXPECT_TRUE(expected_result == actual_result);
85 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
86 }
87
88 TEST_F(EddystoneEncoderTest, testIPAddressUrl) {
89 string invalid_url = "https://8.8.8.8/";
90
91 size_t expected_result = physical_web::kInvalidFormat;
92 size_t actual_result;
93 vector<uint8_t> expected_vector;
94 vector<uint8_t> actual_vector;
95
96 actual_result = physical_web::EncodeUrl(invalid_url, &actual_vector);
97
98 EXPECT_TRUE(expected_result == actual_result);
99 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
100 }
101
102 TEST_F(EddystoneEncoderTest, testInvalidProtocol) {
103 string invalid_url = "file://data/foo.com/it";
104
105 size_t expected_result = physical_web::kInvalidFormat;
106 size_t actual_result;
107 vector<uint8_t> expected_vector;
108 vector<uint8_t> actual_vector;
109
110 actual_result = physical_web::EncodeUrl(invalid_url, &actual_vector);
111
112 EXPECT_TRUE(expected_result == actual_result);
113 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
114 }
115
116 TEST_F(EddystoneEncoderTest, testShortUrl) {
117 string url = "http://a.com";
118 uint8_t expected_array[] = {0x02, // "http://"
119 0x61, // "a"
120 0x07}; // ".com"
121 size_t expected_array_length = sizeof(expected_array) / sizeof(uint8_t);
122
123 size_t expected_result = expected_array_length;
124 size_t actual_result;
125
126 vector<uint8_t> expected_vector(expected_array,
127 expected_array + expected_array_length);
128 vector<uint8_t> actual_vector;
129
130 actual_result = physical_web::EncodeUrl(url, &actual_vector);
131
132 EXPECT_TRUE(expected_result == actual_result);
133 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
134 }
135
136 TEST_F(EddystoneEncoderTest, testStandardUrl) {
137 string url = "https://www.example.com/";
138 uint8_t expected_array[] = {0x01, // "https://www."
139 0x65, 0x78, 0x61, 0x6d,
140 0x70, 0x6c, 0x65, // "example"
141 0x00}; // ".com/"
142 size_t expected_array_length = sizeof(expected_array) / sizeof(uint8_t);
143
144 size_t expected_result = expected_array_length;
145 size_t actual_result;
146
147 vector<uint8_t> expected_vector(expected_array,
148 expected_array + expected_array_length);
149 vector<uint8_t> actual_vector;
150
151 actual_result = physical_web::EncodeUrl(url, &actual_vector);
152
153 EXPECT_TRUE(expected_result == actual_result);
154 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
155 }
156
157 TEST_F(EddystoneEncoderTest, testStandardHttpUrl) {
158 string url = "http://www.example.com/";
159 uint8_t expected_array[] = {0x00, // "http://www."
160 0x65, 0x78, 0x61, 0x6d,
161 0x70, 0x6c, 0x65, // "example"
162 0x00}; // ".com/"
163 size_t expected_array_length = sizeof(expected_array) / sizeof(uint8_t);
164
165 size_t expected_result = expected_array_length;
166 size_t actual_result;
167
168 vector<uint8_t> expected_vector(expected_array,
169 expected_array + expected_array_length);
170 vector<uint8_t> actual_vector;
171
172 actual_result = physical_web::EncodeUrl(url, &actual_vector);
173
174 EXPECT_TRUE(expected_result == actual_result);
175 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
176 }
177
178 TEST_F(EddystoneEncoderTest, testStandardHttpUrlWithoutSuffixSlash) {
179 string url = "http://www.example.com";
180 uint8_t expected_array[] = {0x00, // "http://www."
181 0x65, 0x78, 0x61, 0x6d,
182 0x70, 0x6c, 0x65, // "example"
183 0x07}; // ".com"
184 size_t expected_array_length = sizeof(expected_array) / sizeof(uint8_t);
185
186 size_t expected_result = expected_array_length;
187 size_t actual_result;
188
189 vector<uint8_t> expected_vector(expected_array,
190 expected_array + expected_array_length);
191 vector<uint8_t> actual_vector;
192
193 actual_result = physical_web::EncodeUrl(url, &actual_vector);
194
195 EXPECT_TRUE(expected_result == actual_result);
196 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
197 }
198
199 TEST_F(EddystoneEncoderTest, testStandardInfoUrl) {
200 string url = "https://www.example.info/";
201 uint8_t expected_array[] = {0x01, // "https://www."
202 0x65, 0x78, 0x61, 0x6d,
203 0x70, 0x6c, 0x65, // "example"
204 0x04}; // ".info/"
205 size_t expected_array_length = sizeof(expected_array) / sizeof(uint8_t);
206
207 size_t expected_result = expected_array_length;
208 size_t actual_result;
209
210 vector<uint8_t> expected_vector(expected_array,
211 expected_array + expected_array_length);
212 vector<uint8_t> actual_vector;
213
214 actual_result = physical_web::EncodeUrl(url, &actual_vector);
215
216 EXPECT_TRUE(expected_result == actual_result);
217 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
218 }
219
220 TEST_F(EddystoneEncoderTest, testAllowsSubDomains) {
221 string url = "https://www.example.cs.com/";
222 uint8_t expected_array[] = {0x01, // "https://www."
223 0x65, 0x78, 0x61, 0x6d,
224 0x70, 0x6c, 0x65, // "example"
225 0x2e, 0x63, 0x73, // ".cs"
226 0x00}; // ".com/"
227 size_t expected_array_length = sizeof(expected_array) / sizeof(uint8_t);
228
229 size_t expected_result = expected_array_length;
230 size_t actual_result;
231
232 vector<uint8_t> expected_vector(expected_array,
233 expected_array + expected_array_length);
234 vector<uint8_t> actual_vector;
235
236 actual_result = physical_web::EncodeUrl(url, &actual_vector);
237
238 EXPECT_TRUE(expected_result == actual_result);
239 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
240 }
241
242 TEST_F(EddystoneEncoderTest, testAllowsPaths) {
243 string url = "https://www.example.cs.com/r";
244 uint8_t expected_array[] = {0x01, // "https://www."
245 0x65, 0x78, 0x61, 0x6d,
246 0x70, 0x6c, 0x65, // "example"
247 0x2e, 0x63, 0x73, // ".cs"
248 0x00, // ".com/"
249 0x72}; // "r"
250 size_t expected_array_length = sizeof(expected_array) / sizeof(uint8_t);
251
252 size_t expected_result = expected_array_length;
253 size_t actual_result;
254
255 vector<uint8_t> expected_vector(expected_array,
256 expected_array + expected_array_length);
257 vector<uint8_t> actual_vector;
258
259 actual_result = physical_web::EncodeUrl(url, &actual_vector);
260
261 EXPECT_TRUE(expected_result == actual_result);
262 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
263 }
264
265 TEST_F(EddystoneEncoderTest, testAllowsMultiplePaths) {
266 string url = "https://www.example.cs.com/r/red/it";
267 uint8_t expected_array[] = {
268 0x01, // "https://www."
269 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, // "example"
270 0x2e, 0x63, 0x73, // ".cs"
271 0x00, // ".com/"
272 0x72, 0x2f, 0x72, 0x65, 0x64, 0x2f, 0x69, 0x74}; // "r/red/it"
273 size_t expected_array_length = sizeof(expected_array) / sizeof(uint8_t);
274
275 size_t expected_result = expected_array_length;
276 size_t actual_result;
277
278 vector<uint8_t> expected_vector(expected_array,
279 expected_array + expected_array_length);
280 vector<uint8_t> actual_vector;
281
282 actual_result = physical_web::EncodeUrl(url, &actual_vector);
283
284 EXPECT_TRUE(expected_result == actual_result);
285 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
286 }
287
288 TEST_F(EddystoneEncoderTest, testHiddenCompression1) {
289 string url = "https://www.example.com/foo.com";
290 uint8_t expected_array[] = {0x01, // "https://www."
291 0x65, 0x78, 0x61, 0x6d,
292 0x70, 0x6c, 0x65, // "example"
293 0x00, // ".com/"
294 0x66, 0x6f, 0x6f, // "foo"
295 0x07}; // ".com"
296 size_t expected_array_length = sizeof(expected_array) / sizeof(uint8_t);
297
298 size_t expected_result = expected_array_length;
299 size_t actual_result;
300
301 vector<uint8_t> expected_vector(expected_array,
302 expected_array + expected_array_length);
303 vector<uint8_t> actual_vector;
304
305 actual_result = physical_web::EncodeUrl(url, &actual_vector);
306
307 EXPECT_TRUE(expected_result == actual_result);
308 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
309 }
310
311 TEST_F(EddystoneEncoderTest, testHiddenCompression2) {
312 string url = "https://www.example.com/foo.comma/";
313 uint8_t expected_array[] = {0x01, // "https://www."
314 0x65, 0x78, 0x61, 0x6d,
315 0x70, 0x6c, 0x65, // "example"
316 0x00, // ".com/"
317 0x66, 0x6f, 0x6f, // "foo"
318 0x07, // ".com"
319 0x6d, 0x61, 0x2f}; // "ma/"
320 size_t expected_array_length = sizeof(expected_array) / sizeof(uint8_t);
321
322 size_t expected_result = expected_array_length;
323 size_t actual_result;
324
325 vector<uint8_t> expected_vector(expected_array,
326 expected_array + expected_array_length);
327 vector<uint8_t> actual_vector;
328
329 actual_result = physical_web::EncodeUrl(url, &actual_vector);
330
331 EXPECT_TRUE(expected_result == actual_result);
332 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
333 }
334
335 TEST_F(EddystoneEncoderTest, testSharedCompression) {
336 string url = "https://www.communities.com/";
337 uint8_t expected_array[] = {0x01, // "https://www."
338 0x63, 0x6f, 0x6d, // "com"
339 0x6d, 0x75, 0x6e, 0x69,
340 0x74, 0x69, 0x65, 0x73, //"munities"
341 0x00}; // ".com/"
342 size_t expected_array_length = sizeof(expected_array) / sizeof(uint8_t);
343
344 size_t expected_result = expected_array_length;
345 size_t actual_result;
346
347 vector<uint8_t> expected_vector(expected_array,
348 expected_array + expected_array_length);
349 vector<uint8_t> actual_vector;
350
351 actual_result = physical_web::EncodeUrl(url, &actual_vector);
352
353 EXPECT_TRUE(expected_result == actual_result);
354 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
355 }
356
357 TEST_F(EddystoneEncoderTest, testSpecCollision) {
358 // decode(encode(".com/aURL.com")) == decode(encode("http://www.aURL.com"))
359 // without url validation
360 string invalid_url = ".com/aURL.com";
361
362 size_t invalid_expected_result = physical_web::kInvalidUrl;
363 size_t invalid_actual_result;
364 vector<uint8_t> invalid_expected_vector;
365 vector<uint8_t> invalid_actual_vector;
366
367 invalid_actual_result =
368 physical_web::EncodeUrl(invalid_url, &invalid_actual_vector);
369
370 EXPECT_TRUE(invalid_expected_result == invalid_actual_result);
371 EXPECT_TRUE(ByteVectorEquals(invalid_expected_vector, invalid_actual_vector));
372
373 // Now for the valid Url.
374 string valid_url = "http://www.aURL.com";
375 uint8_t valid_expected_array[] = {0x00, // "https://www."
376 0x61, 0x55, 0x52, 0x4c, // "aUrl"
377 0x07}; // ".com"
378 size_t valid_expected_array_length =
379 sizeof(valid_expected_array) / sizeof(uint8_t);
380
381 size_t valid_expected_result = valid_expected_array_length;
382 size_t valid_actual_result;
383
384 vector<uint8_t> valid_expected_vector(
385 valid_expected_array, valid_expected_array + valid_expected_array_length);
386 vector<uint8_t> valid_actual_vector;
387
388 valid_actual_result =
389 physical_web::EncodeUrl(valid_url, &valid_actual_vector);
390
391 EXPECT_TRUE(valid_expected_result == valid_actual_result);
392 EXPECT_TRUE(ByteVectorEquals(valid_expected_vector, valid_actual_vector));
393
394 EXPECT_FALSE(ByteVectorEquals(invalid_actual_vector, valid_actual_vector));
395 }
396
397 TEST_F(EddystoneEncoderTest, testComplexUrl) {
398 string url = "http://user:pass@google.com:99/foo;bar?q=a#ref";
399 uint8_t expected_array[] = {0x02, // "http://"
400 0x75, 0x73, 0x65, 0x72, 0x3a, // "user:"
401 0x70, 0x61, 0x73, 0x73, 0x40, // "pass@"
402 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, // "google"
403 0x07, // ".com"
404 0x3a, 0x39, 0x39, 0x2f, // ":99/"
405 0x66, 0x6f, 0x6f, 0x3b, // "foo;"
406 0x62, 0x61, 0x72, 0x3f, // "bar?"
407 0x71, 0x3d, 0x61, 0x23, // "q=a#"
408 0x72, 0x65, 0x66}; // "ref"
409 size_t expected_array_length = sizeof(expected_array) / sizeof(uint8_t);
410
411 size_t expected_result = expected_array_length;
412 size_t actual_result;
413
414 vector<uint8_t> expected_vector(expected_array,
415 expected_array + expected_array_length);
416 vector<uint8_t> actual_vector;
417
418 actual_result = physical_web::EncodeUrl(url, &actual_vector);
419
420 EXPECT_TRUE(expected_result == actual_result);
421 EXPECT_TRUE(ByteVectorEquals(expected_vector, actual_vector));
422 }
OLDNEW
« no previous file with comments | « components/physical_web/eddystone/eddystone_encoder.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698