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_ScanJSON) { |
| 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_SyntaxError) { |
| 44 const char* jobj = "{ \"id\": 5, " |
| 45 " \"command\" : \"Debugger.stop\"" // Missing comma. |
| 46 " \"params\" : { " |
| 47 " \"url\" : \"blah.dart\", " // Missing comma. |
| 48 " \"line\": 111, " |
| 49 " }," |
| 50 " \"foo\": \"outer foo\", " |
| 51 "}"; |
| 52 JSONReader reader(jobj); |
| 53 bool found; |
| 54 |
| 55 found = reader.Seek("id"); |
| 56 EXPECT(found); |
| 57 EXPECT_EQ(reader.Type(), JSONReader::kInteger); |
| 58 found = reader.Seek("params"); |
| 59 EXPECT(!found); |
| 60 EXPECT(reader.Error()); |
| 61 EXPECT_EQ(reader.Type(), JSONReader::kNone); |
| 62 EXPECT_EQ(0, reader.ValueLen()); |
| 63 EXPECT(reader.ValueChars() == NULL); |
| 64 } |
| 65 |
| 66 |
| 67 TEST_CASE(JSON_JSONReader) { |
| 68 const char* jobj = "{ \"id\": 5, " |
| 69 " \"command\" : \"Debugger.setBreakpoint\"," |
| 70 " \"params\" : { " |
| 71 " \"url\" : \"blah.dart\", " |
| 72 " \"foo\" : [null, 1, { }, \"bar\", true, false]," |
| 73 " \"line\": 111, " |
| 74 " }," |
| 75 " \"foo\": \"outer foo\", " |
| 76 "}"; |
| 77 |
| 78 JSONReader reader(jobj); |
| 79 bool found; |
| 80 |
| 81 found = reader.Seek("id"); |
| 82 EXPECT(found); |
| 83 EXPECT_EQ(reader.Type(), JSONReader::kInteger); |
| 84 found = reader.Seek("foo"); |
| 85 EXPECT(found); |
| 86 EXPECT_EQ(reader.Type(), JSONReader::kString); |
| 87 EXPECT(reader.IsStringLiteral("outer foo")); |
| 88 found = reader.Seek("line"); |
| 89 EXPECT(!found); |
| 90 found = reader.Seek("params"); |
| 91 EXPECT(found); |
| 92 EXPECT_EQ(reader.Type(), JSONReader::kObject); |
| 93 reader.Set(reader.ValueChars()); |
| 94 found = reader.Seek("foo"); |
| 95 EXPECT(found); |
| 96 EXPECT_EQ(reader.Type(), JSONReader::kArray); |
| 97 found = reader.Seek("non-existing"); |
| 98 EXPECT(!found); |
| 99 found = reader.Seek("line"); |
| 100 EXPECT(found); |
| 101 EXPECT_EQ(reader.Type(), JSONReader::kInteger); |
| 102 } |
| 103 |
| 104 |
| 105 TEST_CASE(JSON_TextBuffer) { |
| 106 TextBuffer w(5); // Small enough to make buffer grow at least once. |
| 107 w.Printf("{ \"%s\" : %d", "length", 175); |
| 108 EXPECT_STREQ("{ \"length\" : 175", w.buf()); |
| 109 w.Printf(", \"%s\" : \"%s\" }", "command", "stopIt"); |
| 110 EXPECT_STREQ("{ \"length\" : 175, \"command\" : \"stopIt\" }", w.buf()); |
| 111 |
| 112 JSONReader r(w.buf()); |
| 113 bool found = r.Seek("command"); |
| 114 EXPECT(found); |
| 115 EXPECT_EQ(r.Type(), JSONReader::kString); |
| 116 EXPECT(r.IsStringLiteral("stopIt")); |
| 117 } |
| 118 |
| 119 } // namespace dart |
OLD | NEW |