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

Unified Diff: runtime/vm/json_test.cc

Issue 9949054: Basic support for reading and writing JSON objects. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: runtime/vm/json_test.cc
===================================================================
--- runtime/vm/json_test.cc (revision 0)
+++ runtime/vm/json_test.cc (revision 0)
@@ -0,0 +1,119 @@
+// 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_ScanJSON) {
+ 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_SyntaxError) {
+ const char* jobj = "{ \"id\": 5, "
+ " \"command\" : \"Debugger.stop\"" // Missing comma.
+ " \"params\" : { "
+ " \"url\" : \"blah.dart\", " // Missing comma.
+ " \"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("params");
+ EXPECT(!found);
+ EXPECT(reader.Error());
+ EXPECT_EQ(reader.Type(), JSONReader::kNone);
+ EXPECT_EQ(0, reader.ValueLen());
+ EXPECT(reader.ValueChars() == NULL);
+}
+
+
+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);
+}
+
+
+TEST_CASE(JSON_TextBuffer) {
+ TextBuffer 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"));
+}
+
+} // namespace dart
« runtime/vm/json.cc ('K') | « runtime/vm/json.cc ('k') | runtime/vm/vm_sources.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698