@@ -48,6 +48,24 @@ static char* ReadFile(const char* filename, size_t& length) {
48
48
return json;
49
49
}
50
50
51
+ struct NoOpHandler {
52
+ bool Null () { return true ; }
53
+ bool Bool (bool ) { return true ; }
54
+ bool Int (int ) { return true ; }
55
+ bool Uint (unsigned ) { return true ; }
56
+ bool Int64 (int64_t ) { return true ; }
57
+ bool Uint64 (uint64_t ) { return true ; }
58
+ bool Double (double ) { return true ; }
59
+ bool RawNumber (const char *, SizeType, bool ) { return true ; }
60
+ bool String (const char *, SizeType, bool ) { return true ; }
61
+ bool StartObject () { return true ; }
62
+ bool Key (const char *, SizeType, bool ) { return true ; }
63
+ bool EndObject (SizeType) { return true ; }
64
+ bool StartArray () { return true ; }
65
+ bool EndArray (SizeType) { return true ; }
66
+ };
67
+
68
+
51
69
TEST (JsonChecker, Reader) {
52
70
char filename[256 ];
53
71
@@ -67,13 +85,26 @@ TEST(JsonChecker, Reader) {
67
85
continue ;
68
86
}
69
87
88
+ // Test stack-based parsing.
70
89
GenericDocument<UTF8<>, CrtAllocator> document; // Use Crt allocator to check exception-safety (no memory leak)
71
90
document.Parse (json);
72
91
EXPECT_TRUE (document.HasParseError ()) << filename;
73
92
93
+ // Test iterative parsing.
74
94
document.Parse <kParseIterativeFlag >(json);
75
95
EXPECT_TRUE (document.HasParseError ()) << filename;
76
96
97
+ // Test iterative pull-parsing.
98
+ Reader reader;
99
+ StringStream ss (json);
100
+ NoOpHandler h;
101
+ reader.IterativeParseInit ();
102
+ while (!reader.IterativeParseComplete ()) {
103
+ if (!reader.IterativeParseNext <kParseDefaultFlags >(ss, h))
104
+ break ;
105
+ }
106
+ EXPECT_TRUE (reader.HasParseError ()) << filename;
107
+
77
108
free (json);
78
109
}
79
110
@@ -87,12 +118,25 @@ TEST(JsonChecker, Reader) {
87
118
continue ;
88
119
}
89
120
121
+ // Test stack-based parsing.
90
122
GenericDocument<UTF8<>, CrtAllocator> document; // Use Crt allocator to check exception-safety (no memory leak)
91
123
document.Parse (json);
92
124
EXPECT_FALSE (document.HasParseError ()) << filename;
93
125
126
+ // Test iterative parsing.
94
127
document.Parse <kParseIterativeFlag >(json);
95
128
EXPECT_FALSE (document.HasParseError ()) << filename;
129
+
130
+ // Test iterative pull-parsing.
131
+ Reader reader;
132
+ StringStream ss (json);
133
+ NoOpHandler h;
134
+ reader.IterativeParseInit ();
135
+ while (!reader.IterativeParseComplete ()) {
136
+ if (!reader.IterativeParseNext <kParseDefaultFlags >(ss, h))
137
+ break ;
138
+ }
139
+ EXPECT_FALSE (reader.HasParseError ()) << filename;
96
140
97
141
free (json);
98
142
}
0 commit comments