summaryrefslogtreecommitdiff
path: root/tests/json
diff options
context:
space:
mode:
authorJosh Haberman <jhaberman@gmail.com>2015-07-30 14:54:03 -0700
committerJosh Haberman <jhaberman@gmail.com>2015-07-30 14:54:03 -0700
commitabcb6428ad9bf7d650455a0a180647a05183fd9d (patch)
tree0408268278840d8954ef3d0c6d18c8ba16524817 /tests/json
parentecaf82d13401bf4d8ae3fd7e099a11c94d554555 (diff)
Changed parser semantics around skipping.
Prior to this change: parse(buf, len) -> len + N ...would indicate that the next N bytes of the input are not needed, *and* would advance the decoding position by this much. After this change: parse(buf, len) -> len + N parse(NULL, N) -> N ...can be used to achieve the same thing. But skipping the N bytes is not explicitly performed by the user. A user that doesn't want/need to skip can just say: parsed = parse(buf, len); if (parsed < len) { // Handle suspend, advance stream by "parsed". } else { // Stream was advanced by "len" (even if parsed > len). } Updated unit tests to test this new behavior, and refactored test utility code a bit to support it.
Diffstat (limited to 'tests/json')
-rw-r--r--tests/json/test_json.cc37
1 files changed, 13 insertions, 24 deletions
diff --git a/tests/json/test_json.cc b/tests/json/test_json.cc
index 8dd4062..c483cf0 100644
--- a/tests/json/test_json.cc
+++ b/tests/json/test_json.cc
@@ -288,33 +288,22 @@ void test_json_roundtrip_message(const char* json_src,
const char* json_expected,
const upb::Handlers* serialize_handlers,
int seam) {
- upb::Status st;
- upb::Environment env;
- env.ReportErrorsTo(&st);
+ VerboseParserEnvironment env(verbose);
StringSink data_sink;
- upb::json::Printer* printer =
- upb::json::Printer::Create(&env, serialize_handlers, data_sink.Sink());
- upb::json::Parser* parser = upb::json::Parser::Create(&env, printer->input());
-
- upb::BytesSink* input = parser->input();
- void *sub;
- size_t len = strlen(json_src);
- size_t ofs = 0;
-
- bool ok = input->Start(0, &sub) &&
- parse_buffer(input, sub, json_src, 0, seam, &ofs, &st, verbose) &&
- parse_buffer(input, sub, json_src, seam, len, &ofs, &st, verbose) &&
- ofs == len;
-
- if (ok) {
- if (verbose) {
- fprintf(stderr, "calling end()\n");
- }
- ok = input->End();
- }
+ upb::json::Printer* printer = upb::json::Printer::Create(
+ env.env(), serialize_handlers, data_sink.Sink());
+ upb::json::Parser* parser =
+ upb::json::Parser::Create(env.env(), printer->input());
+ env.ResetBytesSink(parser->input());
+ env.Reset(json_src, strlen(json_src), false);
+
+ bool ok = env.Start() &&
+ env.ParseBuffer(seam) &&
+ env.ParseBuffer(-1) &&
+ env.End();
if (!ok) {
- fprintf(stderr, "upb parse error: %s\n", st.error_message());
+ fprintf(stderr, "upb parse error: %s\n", env.status().error_message());
}
ASSERT(ok);
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback