summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/rapidjson/test/unittest/jsoncheckertest.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/rapidjson/test/unittest/jsoncheckertest.cpp')
-rw-r--r--3rdparty/rapidjson/test/unittest/jsoncheckertest.cpp56
1 files changed, 50 insertions, 6 deletions
diff --git a/3rdparty/rapidjson/test/unittest/jsoncheckertest.cpp b/3rdparty/rapidjson/test/unittest/jsoncheckertest.cpp
index bea788d26e3..19e1f1c47a2 100644
--- a/3rdparty/rapidjson/test/unittest/jsoncheckertest.cpp
+++ b/3rdparty/rapidjson/test/unittest/jsoncheckertest.cpp
@@ -1,6 +1,6 @@
// Tencent is pleased to support the open source community by making RapidJSON available.
//
-// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
+// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
//
// Licensed under the MIT License (the "License"); you may not use this file except
// in compliance with the License. You may obtain a copy of the License at
@@ -48,6 +48,24 @@ static char* ReadFile(const char* filename, size_t& length) {
return json;
}
+struct NoOpHandler {
+ bool Null() { return true; }
+ bool Bool(bool) { return true; }
+ bool Int(int) { return true; }
+ bool Uint(unsigned) { return true; }
+ bool Int64(int64_t) { return true; }
+ bool Uint64(uint64_t) { return true; }
+ bool Double(double) { return true; }
+ bool RawNumber(const char*, SizeType, bool) { return true; }
+ bool String(const char*, SizeType, bool) { return true; }
+ bool StartObject() { return true; }
+ bool Key(const char*, SizeType, bool) { return true; }
+ bool EndObject(SizeType) { return true; }
+ bool StartArray() { return true; }
+ bool EndArray(SizeType) { return true; }
+};
+
+
TEST(JsonChecker, Reader) {
char filename[256];
@@ -67,13 +85,26 @@ TEST(JsonChecker, Reader) {
continue;
}
+ // Test stack-based parsing.
GenericDocument<UTF8<>, CrtAllocator> document; // Use Crt allocator to check exception-safety (no memory leak)
document.Parse(json);
- EXPECT_TRUE(document.HasParseError());
+ EXPECT_TRUE(document.HasParseError()) << filename;
+ // Test iterative parsing.
document.Parse<kParseIterativeFlag>(json);
- EXPECT_TRUE(document.HasParseError());
-
+ EXPECT_TRUE(document.HasParseError()) << filename;
+
+ // Test iterative pull-parsing.
+ Reader reader;
+ StringStream ss(json);
+ NoOpHandler h;
+ reader.IterativeParseInit();
+ while (!reader.IterativeParseComplete()) {
+ if (!reader.IterativeParseNext<kParseDefaultFlags>(ss, h))
+ break;
+ }
+ EXPECT_TRUE(reader.HasParseError()) << filename;
+
free(json);
}
@@ -87,12 +118,25 @@ TEST(JsonChecker, Reader) {
continue;
}
+ // Test stack-based parsing.
GenericDocument<UTF8<>, CrtAllocator> document; // Use Crt allocator to check exception-safety (no memory leak)
document.Parse(json);
- EXPECT_FALSE(document.HasParseError());
+ EXPECT_FALSE(document.HasParseError()) << filename;
+ // Test iterative parsing.
document.Parse<kParseIterativeFlag>(json);
- EXPECT_FALSE(document.HasParseError());
+ EXPECT_FALSE(document.HasParseError()) << filename;
+
+ // Test iterative pull-parsing.
+ Reader reader;
+ StringStream ss(json);
+ NoOpHandler h;
+ reader.IterativeParseInit();
+ while (!reader.IterativeParseComplete()) {
+ if (!reader.IterativeParseNext<kParseDefaultFlags>(ss, h))
+ break;
+ }
+ EXPECT_FALSE(reader.HasParseError()) << filename;
free(json);
}