From 559e23c796f973a65d05c76e211835b126ee8ac8 Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Fri, 17 Jun 2011 10:34:29 -0700 Subject: Major refactoring: abandon upb_msg, add upb_accessors. Next on the chopping block is upb_string. --- tests/test_decoder.c | 9 ++++----- tests/test_vs_proto2.cc | 42 ++++++++++++++++++++++++------------------ tests/tests.c | 4 ++-- 3 files changed, 30 insertions(+), 25 deletions(-) (limited to 'tests') diff --git a/tests/test_decoder.c b/tests/test_decoder.c index e607827..7b168de 100644 --- a/tests/test_decoder.c +++ b/tests/test_decoder.c @@ -18,7 +18,7 @@ int main(int argc, char *argv[]) { } upb_status status = UPB_STATUS_INIT; - upb_parsedesc(symtab, desc, &status); + upb_read_descriptor(symtab, desc, &status); if (!upb_ok(&status)) { fprintf(stderr, "Error parsing descriptor: "); upb_printerr(&status); @@ -45,14 +45,13 @@ int main(int argc, char *argv[]) { upb_stdio *out = upb_stdio_new(); upb_stdio_reset(out, stdout); - upb_handlers handlers; - upb_handlers_init(&handlers); + upb_handlers *handlers = upb_handlers_new(); upb_textprinter *p = upb_textprinter_new(); upb_textprinter_reset(p, upb_stdio_bytesink(out), false); - upb_textprinter_reghandlers(&handlers, m); + upb_textprinter_reghandlers(handlers, m); upb_decoder d; - upb_decoder_init(&d, &handlers); + upb_decoder_initforhandlers(&d, handlers); upb_decoder_reset(&d, upb_stdio_bytesrc(in), p); upb_clearerr(&status); diff --git a/tests/test_vs_proto2.cc b/tests/test_vs_proto2.cc index f23398a..8c2e97d 100644 --- a/tests/test_vs_proto2.cc +++ b/tests/test_vs_proto2.cc @@ -21,19 +21,22 @@ size_t string_size; void compare(const google::protobuf::Message& proto2_msg, - upb_msg *upb_msg, upb_msgdef *upb_md); + void *upb_msg, upb_msgdef *upb_md); void compare_arrays(const google::protobuf::Reflection *r, const google::protobuf::Message& proto2_msg, const google::protobuf::FieldDescriptor *proto2_f, - upb_msg *upb_msg, upb_fielddef *upb_f) + void *upb_msg, upb_fielddef *upb_f) { ASSERT(upb_msg_has(upb_msg, upb_f)); - ASSERT(upb_isarray(upb_f)); - upb_array *arr = upb_value_getarr(upb_msg_get(upb_msg, upb_f)); - ASSERT(upb_array_len(arr) == (upb_arraylen_t)r->FieldSize(proto2_msg, proto2_f)); - for(upb_arraylen_t i = 0; i < upb_array_len(arr); i++) { - upb_value v = upb_array_get(arr, upb_f, i); + ASSERT(upb_isseq(upb_f)); + void *arr = upb_value_getptr(upb_msg_get(upb_msg, upb_f)); + void *iter = upb_seq_begin(arr, upb_f); + for(int i = 0; + i < r->FieldSize(proto2_msg, proto2_f); + i++, iter = upb_seq_next(arr, iter, upb_f)) { + ASSERT(!upb_seq_done(iter)); + upb_value v = upb_seq_get(iter, upb_f); switch(upb_f->type) { default: ASSERT(false); @@ -76,18 +79,20 @@ void compare_arrays(const google::protobuf::Reflection *r, } case UPB_TYPE(GROUP): case UPB_TYPE(MESSAGE): + // XXX: getstr ASSERT(upb_dyncast_msgdef(upb_f->def) != NULL); compare(r->GetRepeatedMessage(proto2_msg, proto2_f, i), - upb_value_getmsg(v), upb_downcast_msgdef(upb_f->def)); + upb_value_getstr(v), upb_downcast_msgdef(upb_f->def)); } } + ASSERT(upb_seq_done(iter)); } #include void compare_values(const google::protobuf::Reflection *r, const google::protobuf::Message& proto2_msg, const google::protobuf::FieldDescriptor *proto2_f, - upb_msg *upb_msg, upb_fielddef *upb_f) + void *upb_msg, upb_fielddef *upb_f) { upb_value v = upb_msg_get(upb_msg, upb_f); switch(upb_f->type) { @@ -132,13 +137,14 @@ void compare_values(const google::protobuf::Reflection *r, } case UPB_TYPE(GROUP): case UPB_TYPE(MESSAGE): + // XXX: getstr compare(r->GetMessage(proto2_msg, proto2_f), - upb_value_getmsg(v), upb_downcast_msgdef(upb_f->def)); + upb_value_getstr(v), upb_downcast_msgdef(upb_f->def)); } } void compare(const google::protobuf::Message& proto2_msg, - upb_msg *upb_msg, upb_msgdef *upb_md) + void *upb_msg, upb_msgdef *upb_md) { const google::protobuf::Reflection *r = proto2_msg.GetReflection(); const google::protobuf::Descriptor *d = proto2_msg.GetDescriptor(); @@ -157,15 +163,15 @@ void compare(const google::protobuf::Message& proto2_msg, upb_string_len(upb_f->name)) == proto2_f->name()); ASSERT(upb_f->type == proto2_f->type()); - ASSERT(upb_isarray(upb_f) == proto2_f->is_repeated()); + ASSERT(upb_isseq(upb_f) == proto2_f->is_repeated()); if(!upb_msg_has(upb_msg, upb_f)) { - if(upb_isarray(upb_f)) + if(upb_isseq(upb_f)) ASSERT(r->FieldSize(proto2_msg, proto2_f) == 0); else ASSERT(r->HasField(proto2_msg, proto2_f) == false); } else { - if(upb_isarray(upb_f)) { + if(upb_isseq(upb_f)) { compare_arrays(r, proto2_msg, proto2_f, upb_msg, upb_f); } else { ASSERT(r->HasField(proto2_msg, proto2_f) == true); @@ -176,7 +182,7 @@ void compare(const google::protobuf::Message& proto2_msg, } void parse_and_compare(MESSAGE_CIDENT *proto2_msg, - upb_msg *upb_msg, upb_msgdef *upb_md, + void *upb_msg, upb_msgdef *upb_md, upb_string *str) { // Parse to both proto2 and upb. @@ -220,7 +226,7 @@ int main(int argc, char *argv[]) fprintf(stderr, "Couldn't read " MESSAGE_DESCRIPTOR_FILE ".\n"); return 1; } - upb_parsedesc(symtab, fds, &status); + upb_read_descriptor(symtab, fds, &status); if(!upb_ok(&status)) { fprintf(stderr, "Error importing " MESSAGE_DESCRIPTOR_FILE ": "); upb_printerr(&status); @@ -247,12 +253,12 @@ int main(int argc, char *argv[]) // Run twice to test proper object reuse. MESSAGE_CIDENT proto2_msg; - upb_msg *upb_msg = upb_msg_new(msgdef); + void *upb_msg = upb_stdmsg_new(msgdef); parse_and_compare(&proto2_msg, upb_msg, msgdef, str); parse_and_compare(&proto2_msg, upb_msg, msgdef, str); printf("All tests passed, %d assertions.\n", num_assertions); - upb_msg_unref(upb_msg, msgdef); + upb_stdmsg_free(upb_msg, msgdef); upb_def_unref(UPB_UPCAST(msgdef)); upb_string_unref(str); upb_symtab_unref(symtab); diff --git a/tests/tests.c b/tests/tests.c index a78ca03..c6b5051 100644 --- a/tests/tests.c +++ b/tests/tests.c @@ -17,7 +17,7 @@ static upb_symtab *load_test_proto() { exit(1); } upb_status status = UPB_STATUS_INIT; - upb_parsedesc(s, descriptor, &status); + upb_read_descriptor(s, descriptor, &status); ASSERT(upb_ok(&status)); upb_status_uninit(&status); upb_string_unref(descriptor); @@ -42,7 +42,7 @@ static void test_upb_jit() { upb_handlerset hset = {NULL, NULL, &upb_test_onvalue, NULL, NULL, NULL, NULL}; upb_handlers_reghandlerset(h, upb_downcast_msgdef(def), &hset); upb_decoder d; - upb_decoder_init(&d, h); + upb_decoder_initforhandlers(&d, h); upb_decoder_uninit(&d); upb_symtab_unref(s); upb_def_unref(def); -- cgit v1.2.3