Chromium Code Reviews| Index: runtime/vm/json_test.cc |
| =================================================================== |
| --- runtime/vm/json_test.cc (revision 0) |
| +++ runtime/vm/json_test.cc (revision 0) |
| @@ -0,0 +1,96 @@ |
| +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| +// for details. All rights reserved. Use of this source code is governed by a |
| +// BSD-style license that can be found in the LICENSE file. |
| + |
| +#include "platform/assert.h" |
| +#include "vm/json.h" |
| +#include "vm/unit_test.h" |
| + |
| +namespace dart { |
| + |
| + |
| +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.
|
| + const char* msg = "{ \"id\": 5, \"command\" : \"Debugger.pause\" }"; |
| + |
| + JSONScanner scanner(msg); |
| + EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenIllegal); |
| + scanner.Scan(); |
| + EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenLBrace); |
| + scanner.Scan(); |
| + EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenString); |
| + EXPECT(scanner.IsStringLiteral("id")); |
| + scanner.Scan(); |
| + EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenColon); |
| + scanner.Scan(); |
| + EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenInteger); |
| + scanner.Scan(); |
| + EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenComma); |
| + scanner.Scan(); |
| + EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenString); |
| + EXPECT(scanner.IsStringLiteral("command")); |
| + scanner.Scan(); |
| + EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenColon); |
| + scanner.Scan(); |
| + EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenString); |
| + EXPECT(scanner.IsStringLiteral("Debugger.pause")); |
| + scanner.Scan(); |
| + EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenRBrace); |
| + scanner.Scan(); |
| + EXPECT_EQ(scanner.CurrentToken(), JSONScanner::TokenEOM); |
| +} |
| + |
| + |
| +TEST_CASE(JSON_JSONWriter) { |
| + JSONWriter w(5); // Small enough to make buffer grow at least once. |
| + w.Printf("{ \"%s\" : %d", "length", 175); |
| + EXPECT_STREQ("{ \"length\" : 175", w.buf()); |
| + w.Printf(", \"%s\" : \"%s\" }", "command", "stopIt"); |
| + EXPECT_STREQ("{ \"length\" : 175, \"command\" : \"stopIt\" }", w.buf()); |
| + |
| + JSONReader r(w.buf()); |
| + bool found = r.Seek("command"); |
| + EXPECT(found); |
| + EXPECT_EQ(r.Type(), JSONReader::kString); |
| + EXPECT(r.IsStringLiteral("stopIt")); |
| +} |
| + |
| + |
| +TEST_CASE(JSON_JSONReader) { |
| + const char* jobj = "{ \"id\": 5, " |
| + " \"command\" : \"Debugger.setBreakpoint\"," |
| + " \"params\" : { " |
| + " \"url\" : \"blah.dart\", " |
| + " \"foo\" : [null, 1, { }, \"bar\", true, false]," |
| + " \"line\": 111, " |
| + " }," |
| + " \"foo\": \"outer foo\", " |
| + "}"; |
| + |
| + JSONReader reader(jobj); |
| + bool found; |
| + |
| + found = reader.Seek("id"); |
| + EXPECT(found); |
| + EXPECT_EQ(reader.Type(), JSONReader::kInteger); |
| + found = reader.Seek("foo"); |
| + EXPECT(found); |
| + EXPECT_EQ(reader.Type(), JSONReader::kString); |
| + EXPECT(reader.IsStringLiteral("outer foo")); |
| + found = reader.Seek("line"); |
| + EXPECT(!found); |
| + found = reader.Seek("params"); |
| + EXPECT(found); |
| + EXPECT_EQ(reader.Type(), JSONReader::kObject); |
| + reader.Set(reader.ValueChars()); |
| + found = reader.Seek("foo"); |
| + EXPECT(found); |
| + EXPECT_EQ(reader.Type(), JSONReader::kArray); |
| + found = reader.Seek("non-existing"); |
| + EXPECT(!found); |
| + found = reader.Seek("line"); |
| + EXPECT(found); |
| + EXPECT_EQ(reader.Type(), JSONReader::kInteger); |
| +} |
| + |
| + |
|
turnidge
2012/04/09 22:26:42
Add a test which detects a syntax error.
hausner
2012/04/10 16:26:51
Done.
|
| +} // namespace dart |