OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 #include "platform/assert.h" | |
6 #include "vm/json.h" | |
7 #include "vm/unit_test.h" | |
8 | |
9 namespace dart { | |
10 | |
11 | |
12 TEST_CASE(JSON_ParseJSON) { | |
turnidge
2012/04/09 22:26:42
Change the test name to JSON_ScanJSON? I think of
hausner
2012/04/10 16:26:51
Done.
| |
13 const char* msg = "{ \"id\": 5, \"command\" : \"Debugger.pause\" }"; | |
14 | |
15 JSONScanner scanner(msg); | |
16 EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenIllegal); | |
17 scanner.Scan(); | |
18 EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenLBrace); | |
19 scanner.Scan(); | |
20 EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenString); | |
21 EXPECT(scanner.IsStringLiteral("id")); | |
22 scanner.Scan(); | |
23 EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenColon); | |
24 scanner.Scan(); | |
25 EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenInteger); | |
26 scanner.Scan(); | |
27 EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenComma); | |
28 scanner.Scan(); | |
29 EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenString); | |
30 EXPECT(scanner.IsStringLiteral("command")); | |
31 scanner.Scan(); | |
32 EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenColon); | |
33 scanner.Scan(); | |
34 EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenString); | |
35 EXPECT(scanner.IsStringLiteral("Debugger.pause")); | |
36 scanner.Scan(); | |
37 EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenRBrace); | |
38 scanner.Scan(); | |
39 EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenEOM); | |
40 } | |
41 | |
42 | |
43 TEST_CASE(JSON_JSONWriter) { | |
44 JSONWriter w(5); // Small enough to make buffer grow at least once. | |
45 w.Printf("{ \"%s\" : %d", "length", 175); | |
46 EXPECT_STREQ("{ \"length\" : 175", w.buf()); | |
47 w.Printf(", \"%s\" : \"%s\" }", "command", "stopIt"); | |
48 EXPECT_STREQ("{ \"length\" : 175, \"command\" : \"stopIt\" }", w.buf()); | |
49 | |
50 JSONReader r(w.buf()); | |
51 bool found = r.Seek("command"); | |
52 EXPECT(found); | |
53 EXPECT_EQ(r.Type(), JSONReader::kString); | |
54 EXPECT(r.IsStringLiteral("stopIt")); | |
55 } | |
56 | |
57 | |
58 TEST_CASE(JSON_JSONReader) { | |
59 const char* jobj = "{ \"id\": 5, " | |
60 " \"command\" : \"Debugger.setBreakpoint\"," | |
61 " \"params\" : { " | |
62 " \"url\" : \"blah.dart\", " | |
63 " \"foo\" : [null, 1, { }, \"bar\", true, false]," | |
64 " \"line\": 111, " | |
65 " }," | |
66 " \"foo\": \"outer foo\", " | |
67 "}"; | |
68 | |
69 JSONReader reader(jobj); | |
70 bool found; | |
71 | |
72 found = reader.Seek("id"); | |
73 EXPECT(found); | |
74 EXPECT_EQ(reader.Type(), JSONReader::kInteger); | |
75 found = reader.Seek("foo"); | |
76 EXPECT(found); | |
77 EXPECT_EQ(reader.Type(), JSONReader::kString); | |
78 EXPECT(reader.IsStringLiteral("outer foo")); | |
79 found = reader.Seek("line"); | |
80 EXPECT(!found); | |
81 found = reader.Seek("params"); | |
82 EXPECT(found); | |
83 EXPECT_EQ(reader.Type(), JSONReader::kObject); | |
84 reader.Set(reader.ValueChars()); | |
85 found = reader.Seek("foo"); | |
86 EXPECT(found); | |
87 EXPECT_EQ(reader.Type(), JSONReader::kArray); | |
88 found = reader.Seek("non-existing"); | |
89 EXPECT(!found); | |
90 found = reader.Seek("line"); | |
91 EXPECT(found); | |
92 EXPECT_EQ(reader.Type(), JSONReader::kInteger); | |
93 } | |
94 | |
95 | |
turnidge
2012/04/09 22:26:42
Add a test which detects a syntax error.
hausner
2012/04/10 16:26:51
Done.
| |
96 } // namespace dart | |
OLD | NEW |