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

Side by Side Diff: third_party/WebKit/Source/platform/inspector_protocol/ParserTest.cpp

Issue 2151083002: DevTools: explicitly differentiate ints vs doubles in the protocol bindings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: lcean Created 4 years, 5 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
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 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 "platform/inspector_protocol/Parser.h" 5 #include "platform/inspector_protocol/Parser.h"
6 6
7 #include "platform/inspector_protocol/String16.h" 7 #include "platform/inspector_protocol/String16.h"
8 #include "platform/inspector_protocol/Values.h" 8 #include "platform/inspector_protocol/Values.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
(...skipping 23 matching lines...) Expand all
34 EXPECT_EQ(Value::TypeBoolean, root->type()); 34 EXPECT_EQ(Value::TypeBoolean, root->type());
35 35
36 // Embedded comment 36 // Embedded comment
37 root = parseJSON("40 /*/"); 37 root = parseJSON("40 /*/");
38 EXPECT_FALSE(root.get()); 38 EXPECT_FALSE(root.get());
39 root = parseJSON("/* comment */null"); 39 root = parseJSON("/* comment */null");
40 ASSERT_TRUE(root.get()); 40 ASSERT_TRUE(root.get());
41 EXPECT_EQ(Value::TypeNull, root->type()); 41 EXPECT_EQ(Value::TypeNull, root->type());
42 root = parseJSON("40 /* comment */"); 42 root = parseJSON("40 /* comment */");
43 ASSERT_TRUE(root.get()); 43 ASSERT_TRUE(root.get());
44 EXPECT_EQ(Value::TypeNumber, root->type()); 44 EXPECT_EQ(Value::TypeInteger, root->type());
45 EXPECT_TRUE(root->asNumber(&intVal)); 45 EXPECT_TRUE(root->asInteger(&intVal));
46 EXPECT_EQ(40, intVal); 46 EXPECT_EQ(40, intVal);
47 root = parseJSON("/**/ 40 /* multi-line\n comment */ // more comment"); 47 root = parseJSON("/**/ 40 /* multi-line\n comment */ // more comment");
48 ASSERT_TRUE(root.get()); 48 ASSERT_TRUE(root.get());
49 EXPECT_EQ(Value::TypeNumber, root->type()); 49 EXPECT_EQ(Value::TypeInteger, root->type());
50 EXPECT_TRUE(root->asNumber(&intVal)); 50 EXPECT_TRUE(root->asInteger(&intVal));
51 EXPECT_EQ(40, intVal); 51 EXPECT_EQ(40, intVal);
52 root = parseJSON("true // comment"); 52 root = parseJSON("true // comment");
53 ASSERT_TRUE(root.get()); 53 ASSERT_TRUE(root.get());
54 EXPECT_EQ(Value::TypeBoolean, root->type()); 54 EXPECT_EQ(Value::TypeBoolean, root->type());
55 root = parseJSON("/* comment */\"sample string\""); 55 root = parseJSON("/* comment */\"sample string\"");
56 ASSERT_TRUE(root.get()); 56 ASSERT_TRUE(root.get());
57 EXPECT_TRUE(root->asString(&strVal)); 57 EXPECT_TRUE(root->asString(&strVal));
58 EXPECT_EQ("sample string", strVal); 58 EXPECT_EQ("sample string", strVal);
59 root = parseJSON("[1, /* comment, 2 ] */ \n 3]"); 59 root = parseJSON("[1, /* comment, 2 ] */ \n 3]");
60 ASSERT_TRUE(root.get()); 60 ASSERT_TRUE(root.get());
61 protocol::ListValue* list = ListValue::cast(root.get()); 61 protocol::ListValue* list = ListValue::cast(root.get());
62 ASSERT_TRUE(list); 62 ASSERT_TRUE(list);
63 EXPECT_EQ(2u, list->size()); 63 EXPECT_EQ(2u, list->size());
64 tmpValue = list->at(0); 64 tmpValue = list->at(0);
65 ASSERT_TRUE(tmpValue); 65 ASSERT_TRUE(tmpValue);
66 EXPECT_TRUE(tmpValue->asNumber(&intVal)); 66 EXPECT_TRUE(tmpValue->asInteger(&intVal));
67 EXPECT_EQ(1, intVal); 67 EXPECT_EQ(1, intVal);
68 tmpValue = list->at(1); 68 tmpValue = list->at(1);
69 ASSERT_TRUE(tmpValue); 69 ASSERT_TRUE(tmpValue);
70 EXPECT_TRUE(tmpValue->asNumber(&intVal)); 70 EXPECT_TRUE(tmpValue->asInteger(&intVal));
71 EXPECT_EQ(3, intVal); 71 EXPECT_EQ(3, intVal);
72 root = parseJSON("[1, /*a*/2, 3]"); 72 root = parseJSON("[1, /*a*/2, 3]");
73 ASSERT_TRUE(root.get()); 73 ASSERT_TRUE(root.get());
74 list = ListValue::cast(root.get()); 74 list = ListValue::cast(root.get());
75 ASSERT_TRUE(list); 75 ASSERT_TRUE(list);
76 EXPECT_EQ(3u, list->size()); 76 EXPECT_EQ(3u, list->size());
77 root = parseJSON("/* comment **/42"); 77 root = parseJSON("/* comment **/42");
78 ASSERT_TRUE(root.get()); 78 ASSERT_TRUE(root.get());
79 EXPECT_EQ(Value::TypeNumber, root->type()); 79 EXPECT_EQ(Value::TypeInteger, root->type());
80 EXPECT_TRUE(root->asNumber(&intVal)); 80 EXPECT_TRUE(root->asInteger(&intVal));
81 EXPECT_EQ(42, intVal); 81 EXPECT_EQ(42, intVal);
82 root = parseJSON( 82 root = parseJSON(
83 "/* comment **/\n" 83 "/* comment **/\n"
84 "// */ 43\n" 84 "// */ 43\n"
85 "44"); 85 "44");
86 ASSERT_TRUE(root.get()); 86 ASSERT_TRUE(root.get());
87 EXPECT_EQ(Value::TypeNumber, root->type()); 87 EXPECT_EQ(Value::TypeInteger, root->type());
88 EXPECT_TRUE(root->asNumber(&intVal)); 88 EXPECT_TRUE(root->asInteger(&intVal));
89 EXPECT_EQ(44, intVal); 89 EXPECT_EQ(44, intVal);
90 90
91 // Test number formats 91 // Test number formats
92 root = parseJSON("43"); 92 root = parseJSON("43");
93 ASSERT_TRUE(root.get()); 93 ASSERT_TRUE(root.get());
94 EXPECT_EQ(Value::TypeNumber, root->type()); 94 EXPECT_EQ(Value::TypeInteger, root->type());
95 EXPECT_TRUE(root->asNumber(&intVal)); 95 EXPECT_TRUE(root->asInteger(&intVal));
96 EXPECT_EQ(43, intVal); 96 EXPECT_EQ(43, intVal);
97 97
98 // According to RFC4627, oct, hex, and leading zeros are invalid JSON. 98 // According to RFC4627, oct, hex, and leading zeros are invalid JSON.
99 root = parseJSON("043"); 99 root = parseJSON("043");
100 EXPECT_FALSE(root.get()); 100 EXPECT_FALSE(root.get());
101 root = parseJSON("0x43"); 101 root = parseJSON("0x43");
102 EXPECT_FALSE(root.get()); 102 EXPECT_FALSE(root.get());
103 root = parseJSON("00"); 103 root = parseJSON("00");
104 EXPECT_FALSE(root.get()); 104 EXPECT_FALSE(root.get());
105 105
106 // Test 0 (which needs to be special cased because of the leading zero 106 // Test 0 (which needs to be special cased because of the leading zero
107 // clause). 107 // clause).
108 root = parseJSON("0"); 108 root = parseJSON("0");
109 ASSERT_TRUE(root.get()); 109 ASSERT_TRUE(root.get());
110 EXPECT_EQ(Value::TypeNumber, root->type()); 110 EXPECT_EQ(Value::TypeInteger, root->type());
111 intVal = 1; 111 intVal = 1;
112 EXPECT_TRUE(root->asNumber(&intVal)); 112 EXPECT_TRUE(root->asInteger(&intVal));
113 EXPECT_EQ(0, intVal); 113 EXPECT_EQ(0, intVal);
114 114
115 // Numbers that overflow ints should succeed, being internally promoted to 115 // Numbers that overflow ints should succeed, being internally promoted to
116 // storage as doubles 116 // storage as doubles
117 root = parseJSON("2147483648"); 117 root = parseJSON("2147483648");
118 ASSERT_TRUE(root.get()); 118 ASSERT_TRUE(root.get());
119 double doubleVal; 119 double doubleVal;
120 EXPECT_EQ(Value::TypeNumber, root->type()); 120 EXPECT_EQ(Value::TypeDouble, root->type());
121 doubleVal = 0.0; 121 doubleVal = 0.0;
122 EXPECT_TRUE(root->asNumber(&doubleVal)); 122 EXPECT_TRUE(root->asDouble(&doubleVal));
123 EXPECT_DOUBLE_EQ(2147483648.0, doubleVal); 123 EXPECT_DOUBLE_EQ(2147483648.0, doubleVal);
124 root = parseJSON("-2147483649"); 124 root = parseJSON("-2147483649");
125 ASSERT_TRUE(root.get()); 125 ASSERT_TRUE(root.get());
126 EXPECT_EQ(Value::TypeNumber, root->type()); 126 EXPECT_EQ(Value::TypeDouble, root->type());
127 doubleVal = 0.0; 127 doubleVal = 0.0;
128 EXPECT_TRUE(root->asNumber(&doubleVal)); 128 EXPECT_TRUE(root->asDouble(&doubleVal));
129 EXPECT_DOUBLE_EQ(-2147483649.0, doubleVal); 129 EXPECT_DOUBLE_EQ(-2147483649.0, doubleVal);
130 130
131 // Parse a double 131 // Parse a double
132 root = parseJSON("43.1"); 132 root = parseJSON("43.1");
133 ASSERT_TRUE(root.get()); 133 ASSERT_TRUE(root.get());
134 EXPECT_EQ(Value::TypeNumber, root->type()); 134 EXPECT_EQ(Value::TypeDouble, root->type());
135 doubleVal = 0.0; 135 doubleVal = 0.0;
136 EXPECT_TRUE(root->asNumber(&doubleVal)); 136 EXPECT_TRUE(root->asDouble(&doubleVal));
137 EXPECT_DOUBLE_EQ(43.1, doubleVal); 137 EXPECT_DOUBLE_EQ(43.1, doubleVal);
138 138
139 root = parseJSON("4.3e-1"); 139 root = parseJSON("4.3e-1");
140 ASSERT_TRUE(root.get()); 140 ASSERT_TRUE(root.get());
141 EXPECT_EQ(Value::TypeNumber, root->type()); 141 EXPECT_EQ(Value::TypeDouble, root->type());
142 doubleVal = 0.0; 142 doubleVal = 0.0;
143 EXPECT_TRUE(root->asNumber(&doubleVal)); 143 EXPECT_TRUE(root->asDouble(&doubleVal));
144 EXPECT_DOUBLE_EQ(.43, doubleVal); 144 EXPECT_DOUBLE_EQ(.43, doubleVal);
145 145
146 root = parseJSON("2.1e0"); 146 root = parseJSON("2.1e0");
147 ASSERT_TRUE(root.get()); 147 ASSERT_TRUE(root.get());
148 EXPECT_EQ(Value::TypeNumber, root->type()); 148 EXPECT_EQ(Value::TypeDouble, root->type());
149 doubleVal = 0.0; 149 doubleVal = 0.0;
150 EXPECT_TRUE(root->asNumber(&doubleVal)); 150 EXPECT_TRUE(root->asDouble(&doubleVal));
151 EXPECT_DOUBLE_EQ(2.1, doubleVal); 151 EXPECT_DOUBLE_EQ(2.1, doubleVal);
152 152
153 root = parseJSON("2.1e+0001"); 153 root = parseJSON("2.1e+0001");
154 ASSERT_TRUE(root.get()); 154 ASSERT_TRUE(root.get());
155 EXPECT_EQ(Value::TypeNumber, root->type()); 155 EXPECT_EQ(Value::TypeInteger, root->type());
156 doubleVal = 0.0; 156 doubleVal = 0.0;
157 EXPECT_TRUE(root->asNumber(&doubleVal)); 157 EXPECT_TRUE(root->asDouble(&doubleVal));
158 EXPECT_DOUBLE_EQ(21.0, doubleVal); 158 EXPECT_DOUBLE_EQ(21.0, doubleVal);
159 159
160 root = parseJSON("0.01"); 160 root = parseJSON("0.01");
161 ASSERT_TRUE(root.get()); 161 ASSERT_TRUE(root.get());
162 EXPECT_EQ(Value::TypeNumber, root->type()); 162 EXPECT_EQ(Value::TypeDouble, root->type());
163 doubleVal = 0.0; 163 doubleVal = 0.0;
164 EXPECT_TRUE(root->asNumber(&doubleVal)); 164 EXPECT_TRUE(root->asDouble(&doubleVal));
165 EXPECT_DOUBLE_EQ(0.01, doubleVal); 165 EXPECT_DOUBLE_EQ(0.01, doubleVal);
166 166
167 root = parseJSON("1.00"); 167 root = parseJSON("1.00");
168 ASSERT_TRUE(root.get()); 168 ASSERT_TRUE(root.get());
169 EXPECT_EQ(Value::TypeNumber, root->type()); 169 EXPECT_EQ(Value::TypeInteger, root->type());
170 doubleVal = 0.0; 170 doubleVal = 0.0;
171 EXPECT_TRUE(root->asNumber(&doubleVal)); 171 EXPECT_TRUE(root->asDouble(&doubleVal));
172 EXPECT_DOUBLE_EQ(1.0, doubleVal); 172 EXPECT_DOUBLE_EQ(1.0, doubleVal);
173 173
174 // Fractional parts must have a digit before and after the decimal point. 174 // Fractional parts must have a digit before and after the decimal point.
175 root = parseJSON("1."); 175 root = parseJSON("1.");
176 EXPECT_FALSE(root.get()); 176 EXPECT_FALSE(root.get());
177 root = parseJSON(".1"); 177 root = parseJSON(".1");
178 EXPECT_FALSE(root.get()); 178 EXPECT_FALSE(root.get());
179 root = parseJSON("1.e10"); 179 root = parseJSON("1.e10");
180 EXPECT_FALSE(root.get()); 180 EXPECT_FALSE(root.get());
181 181
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 root = parseJSON("{}"); 305 root = parseJSON("{}");
306 ASSERT_TRUE(root.get()); 306 ASSERT_TRUE(root.get());
307 EXPECT_EQ(Value::TypeObject, root->type()); 307 EXPECT_EQ(Value::TypeObject, root->type());
308 308
309 root = parseJSON("{\"number\":9.87654321, \"null\":null , \"S\" : \"str\" }" ); 309 root = parseJSON("{\"number\":9.87654321, \"null\":null , \"S\" : \"str\" }" );
310 ASSERT_TRUE(root.get()); 310 ASSERT_TRUE(root.get());
311 EXPECT_EQ(Value::TypeObject, root->type()); 311 EXPECT_EQ(Value::TypeObject, root->type());
312 protocol::DictionaryValue* objectVal = DictionaryValue::cast(root.get()); 312 protocol::DictionaryValue* objectVal = DictionaryValue::cast(root.get());
313 ASSERT_TRUE(objectVal); 313 ASSERT_TRUE(objectVal);
314 doubleVal = 0.0; 314 doubleVal = 0.0;
315 EXPECT_TRUE(objectVal->getNumber("number", &doubleVal)); 315 EXPECT_TRUE(objectVal->getDouble("number", &doubleVal));
316 EXPECT_DOUBLE_EQ(9.87654321, doubleVal); 316 EXPECT_DOUBLE_EQ(9.87654321, doubleVal);
317 protocol::Value* nullVal = objectVal->get("null"); 317 protocol::Value* nullVal = objectVal->get("null");
318 ASSERT_TRUE(nullVal); 318 ASSERT_TRUE(nullVal);
319 EXPECT_EQ(Value::TypeNull, nullVal->type()); 319 EXPECT_EQ(Value::TypeNull, nullVal->type());
320 EXPECT_TRUE(objectVal->getString("S", &strVal)); 320 EXPECT_TRUE(objectVal->getString("S", &strVal));
321 EXPECT_EQ("str", strVal); 321 EXPECT_EQ("str", strVal);
322 322
323 // Test newline equivalence. 323 // Test newline equivalence.
324 root2 = parseJSON( 324 root2 = parseJSON(
325 "{\n" 325 "{\n"
(...skipping 30 matching lines...) Expand all
356 innerObject = objectVal->getObject("d"); 356 innerObject = objectVal->getObject("d");
357 EXPECT_TRUE(innerObject); 357 EXPECT_TRUE(innerObject);
358 358
359 // Test keys with periods 359 // Test keys with periods
360 root = parseJSON("{\"a.b\":3,\"c\":2,\"d.e.f\":{\"g.h.i.j\":1}}"); 360 root = parseJSON("{\"a.b\":3,\"c\":2,\"d.e.f\":{\"g.h.i.j\":1}}");
361 ASSERT_TRUE(root.get()); 361 ASSERT_TRUE(root.get());
362 EXPECT_EQ(Value::TypeObject, root->type()); 362 EXPECT_EQ(Value::TypeObject, root->type());
363 objectVal = DictionaryValue::cast(root.get()); 363 objectVal = DictionaryValue::cast(root.get());
364 ASSERT_TRUE(objectVal); 364 ASSERT_TRUE(objectVal);
365 int integerValue = 0; 365 int integerValue = 0;
366 EXPECT_TRUE(objectVal->getNumber("a.b", &integerValue)); 366 EXPECT_TRUE(objectVal->getInteger("a.b", &integerValue));
367 EXPECT_EQ(3, integerValue); 367 EXPECT_EQ(3, integerValue);
368 EXPECT_TRUE(objectVal->getNumber("c", &integerValue)); 368 EXPECT_TRUE(objectVal->getInteger("c", &integerValue));
369 EXPECT_EQ(2, integerValue); 369 EXPECT_EQ(2, integerValue);
370 innerObject = objectVal->getObject("d.e.f"); 370 innerObject = objectVal->getObject("d.e.f");
371 ASSERT_TRUE(innerObject); 371 ASSERT_TRUE(innerObject);
372 EXPECT_EQ(1U, innerObject->size()); 372 EXPECT_EQ(1U, innerObject->size());
373 EXPECT_TRUE(innerObject->getNumber("g.h.i.j", &integerValue)); 373 EXPECT_TRUE(innerObject->getInteger("g.h.i.j", &integerValue));
374 EXPECT_EQ(1, integerValue); 374 EXPECT_EQ(1, integerValue);
375 375
376 root = parseJSON("{\"a\":{\"b\":2},\"a.b\":1}"); 376 root = parseJSON("{\"a\":{\"b\":2},\"a.b\":1}");
377 ASSERT_TRUE(root.get()); 377 ASSERT_TRUE(root.get());
378 EXPECT_EQ(Value::TypeObject, root->type()); 378 EXPECT_EQ(Value::TypeObject, root->type());
379 objectVal = DictionaryValue::cast(root.get()); 379 objectVal = DictionaryValue::cast(root.get());
380 ASSERT_TRUE(objectVal); 380 ASSERT_TRUE(objectVal);
381 innerObject = objectVal->getObject("a"); 381 innerObject = objectVal->getObject("a");
382 ASSERT_TRUE(innerObject); 382 ASSERT_TRUE(innerObject);
383 EXPECT_TRUE(innerObject->getNumber("b", &integerValue)); 383 EXPECT_TRUE(innerObject->getInteger("b", &integerValue));
384 EXPECT_EQ(2, integerValue); 384 EXPECT_EQ(2, integerValue);
385 EXPECT_TRUE(objectVal->getNumber("a.b", &integerValue)); 385 EXPECT_TRUE(objectVal->getInteger("a.b", &integerValue));
386 EXPECT_EQ(1, integerValue); 386 EXPECT_EQ(1, integerValue);
387 387
388 // Invalid, no closing brace 388 // Invalid, no closing brace
389 root = parseJSON("{\"a\": true"); 389 root = parseJSON("{\"a\": true");
390 EXPECT_FALSE(root.get()); 390 EXPECT_FALSE(root.get());
391 391
392 // Invalid, keys must be quoted 392 // Invalid, keys must be quoted
393 root = parseJSON("{foo:true}"); 393 root = parseJSON("{foo:true}");
394 EXPECT_FALSE(root.get()); 394 EXPECT_FALSE(root.get());
395 395
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 root = parseJSON("null"); 462 root = parseJSON("null");
463 EXPECT_EQ(Value::TypeNull, root->type()); 463 EXPECT_EQ(Value::TypeNull, root->type());
464 464
465 root = parseJSON("true"); 465 root = parseJSON("true");
466 ASSERT_TRUE(root.get()); 466 ASSERT_TRUE(root.get());
467 EXPECT_TRUE(root->asBoolean(&boolValue)); 467 EXPECT_TRUE(root->asBoolean(&boolValue));
468 EXPECT_TRUE(boolValue); 468 EXPECT_TRUE(boolValue);
469 469
470 root = parseJSON("10"); 470 root = parseJSON("10");
471 ASSERT_TRUE(root.get()); 471 ASSERT_TRUE(root.get());
472 EXPECT_TRUE(root->asNumber(&integerValue)); 472 EXPECT_TRUE(root->asInteger(&integerValue));
473 EXPECT_EQ(10, integerValue); 473 EXPECT_EQ(10, integerValue);
474 474
475 root = parseJSON("\"root\""); 475 root = parseJSON("\"root\"");
476 ASSERT_TRUE(root.get()); 476 ASSERT_TRUE(root.get());
477 EXPECT_TRUE(root->asString(&strVal)); 477 EXPECT_TRUE(root->asString(&strVal));
478 EXPECT_EQ("root", strVal); 478 EXPECT_EQ("root", strVal);
479 } 479 }
480 480
481 TEST(ParserTest, InvalidSanity) 481 TEST(ParserTest, InvalidSanity)
482 { 482 {
(...skipping 12 matching lines...) Expand all
495 }; 495 };
496 496
497 for (size_t i = 0; i < 11; ++i) { 497 for (size_t i = 0; i < 11; ++i) {
498 std::unique_ptr<protocol::Value> result = parseJSON(invalidJson[i]); 498 std::unique_ptr<protocol::Value> result = parseJSON(invalidJson[i]);
499 EXPECT_FALSE(result.get()); 499 EXPECT_FALSE(result.get());
500 } 500 }
501 } 501 }
502 502
503 } // namespace protocol 503 } // namespace protocol
504 } // namespace blink 504 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698