diff options
Diffstat (limited to 'tests/pb/test_encoder.cc')
-rw-r--r-- | tests/pb/test_encoder.cc | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/tests/pb/test_encoder.cc b/tests/pb/test_encoder.cc index 6c20e27..a0f8453 100644 --- a/tests/pb/test_encoder.cc +++ b/tests/pb/test_encoder.cc @@ -2,10 +2,9 @@ #include "tests/test_util.h" #include "tests/upb_test.h" #include "upb/bindings/stdc++/string.h" -#include "upb/descriptor/descriptor.upbdefs.h" +#include "google/protobuf/descriptor.upb.h" #include "upb/pb/decoder.h" #include "upb/pb/encoder.h" -#include "upb/pb/glue.h" std::string read_string(const char *filename) { size_t len; @@ -18,16 +17,34 @@ std::string read_string(const char *filename) { } void test_pb_roundtrip() { - upb::reffed_ptr<const upb::MessageDef> md( - upbdefs::google::protobuf::FileDescriptorSet::get()); + std::string input = read_string("google/protobuf/descriptor.pb"); + upb::SymbolTable* symtab = upb::SymbolTable::New(); + upb::Arena arena; + google_protobuf_FileDescriptorSet *set = + google_protobuf_FileDescriptorSet_parsenew( + upb_stringview_make(input.c_str(), input.size()), &arena); + ASSERT(set); + size_t n; + const google_protobuf_FileDescriptorProto *const *files = + google_protobuf_FileDescriptorSet_file(set, &n); + ASSERT(n == 1); + upb::Status status; + bool ok = symtab->AddFile(files[0], &status); + if (!ok) { + fprintf(stderr, "Error building def: %s\n", upb_status_errmsg(&status)); + ASSERT(false); + } + const upb::MessageDef *md = + symtab->LookupMessage("google.protobuf.FileDescriptorSet"); + ASSERT(md); + printf("name: %s\n", md->full_name()); upb::reffed_ptr<const upb::Handlers> encoder_handlers( - upb::pb::Encoder::NewHandlers(md.get())); + upb::pb::Encoder::NewHandlers(md)); upb::reffed_ptr<const upb::pb::DecoderMethod> method( upb::pb::DecoderMethod::New( upb::pb::DecoderMethodOptions(encoder_handlers.get()))); upb::InlinedEnvironment<512> env; - std::string input = read_string("upb/descriptor/descriptor.pb"); std::string output; upb::StringSink string_sink(&output); upb::pb::Encoder* encoder = @@ -35,9 +52,10 @@ void test_pb_roundtrip() { string_sink.input()); upb::pb::Decoder* decoder = upb::pb::Decoder::Create(&env, method.get(), encoder->input()); - bool ok = upb::BufferSource::PutBuffer(input, decoder->input()); + ok = upb::BufferSource::PutBuffer(input, decoder->input()); ASSERT(ok); ASSERT(input == output); + upb::SymbolTable::Free(symtab); } extern "C" { |