Index: third_party/protobuf/src/google/protobuf/util/internal/protostream_objectsource_test.cc |
diff --git a/third_party/protobuf/src/google/protobuf/util/internal/protostream_objectsource_test.cc b/third_party/protobuf/src/google/protobuf/util/internal/protostream_objectsource_test.cc |
deleted file mode 100644 |
index 4cc624104b2a91bac5ecae626d7a3a3e9bd34441..0000000000000000000000000000000000000000 |
--- a/third_party/protobuf/src/google/protobuf/util/internal/protostream_objectsource_test.cc |
+++ /dev/null |
@@ -1,824 +0,0 @@ |
-// Protocol Buffers - Google's data interchange format |
-// Copyright 2008 Google Inc. All rights reserved. |
-// https://developers.google.com/protocol-buffers/ |
-// |
-// Redistribution and use in source and binary forms, with or without |
-// modification, are permitted provided that the following conditions are |
-// met: |
-// |
-// * Redistributions of source code must retain the above copyright |
-// notice, this list of conditions and the following disclaimer. |
-// * Redistributions in binary form must reproduce the above |
-// copyright notice, this list of conditions and the following disclaimer |
-// in the documentation and/or other materials provided with the |
-// distribution. |
-// * Neither the name of Google Inc. nor the names of its |
-// contributors may be used to endorse or promote products derived from |
-// this software without specific prior written permission. |
-// |
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- |
-#include <google/protobuf/util/internal/protostream_objectsource.h> |
- |
-#include <memory> |
-#ifndef _SHARED_PTR_H |
-#include <google/protobuf/stubs/shared_ptr.h> |
-#endif |
-#include <sstream> |
- |
-#include <google/protobuf/stubs/casts.h> |
-#include <google/protobuf/any.pb.h> |
-#include <google/protobuf/io/coded_stream.h> |
-#include <google/protobuf/io/zero_copy_stream_impl_lite.h> |
-#include <google/protobuf/descriptor.h> |
-#include <google/protobuf/util/internal/expecting_objectwriter.h> |
-#include <google/protobuf/util/internal/testdata/books.pb.h> |
-#include <google/protobuf/util/internal/testdata/field_mask.pb.h> |
-#include <google/protobuf/util/internal/type_info_test_helper.h> |
-#include <google/protobuf/util/internal/constants.h> |
-#include <google/protobuf/stubs/strutil.h> |
-#include <google/protobuf/util/internal/testdata/anys.pb.h> |
-#include <google/protobuf/util/internal/testdata/maps.pb.h> |
-#include <google/protobuf/util/internal/testdata/struct.pb.h> |
-#include <gtest/gtest.h> |
- |
- |
-namespace google { |
-namespace protobuf { |
-namespace util { |
-namespace converter { |
- |
-using google::protobuf::Descriptor; |
-using google::protobuf::DescriptorPool; |
-using google::protobuf::FileDescriptorProto; |
-using google::protobuf::Message; |
-using google::protobuf::io::ArrayInputStream; |
-using google::protobuf::io::CodedInputStream; |
-using util::Status; |
-using google::protobuf::testing::Author; |
-using google::protobuf::testing::BadAuthor; |
-using google::protobuf::testing::BadNestedBook; |
-using google::protobuf::testing::Book; |
-using google::protobuf::testing::Book_Label; |
-using google::protobuf::testing::NestedBook; |
-using google::protobuf::testing::PackedPrimitive; |
-using google::protobuf::testing::Primitive; |
-using google::protobuf::testing::more_author; |
-using google::protobuf::testing::maps::MapOut; |
-using google::protobuf::testing::anys::AnyOut; |
-using google::protobuf::testing::anys::AnyM; |
-using google::protobuf::testing::FieldMaskTest; |
-using google::protobuf::testing::NestedFieldMask; |
-using google::protobuf::testing::structs::StructType; |
-using ::testing::_; |
- |
- |
-namespace { |
-string GetTypeUrl(const Descriptor* descriptor) { |
- return string(kTypeServiceBaseUrl) + "/" + descriptor->full_name(); |
-} |
-} // namespace |
- |
-class ProtostreamObjectSourceTest |
- : public ::testing::TestWithParam<testing::TypeInfoSource> { |
- protected: |
- ProtostreamObjectSourceTest() : helper_(GetParam()), mock_(), ow_(&mock_) { |
- helper_.ResetTypeInfo(Book::descriptor()); |
- } |
- |
- virtual ~ProtostreamObjectSourceTest() {} |
- |
- void DoTest(const Message& msg, const Descriptor* descriptor) { |
- Status status = ExecuteTest(msg, descriptor); |
- EXPECT_EQ(Status::OK, status); |
- } |
- |
- Status ExecuteTest(const Message& msg, const Descriptor* descriptor) { |
- ostringstream oss; |
- msg.SerializePartialToOstream(&oss); |
- string proto = oss.str(); |
- ArrayInputStream arr_stream(proto.data(), proto.size()); |
- CodedInputStream in_stream(&arr_stream); |
- |
- google::protobuf::scoped_ptr<ProtoStreamObjectSource> os( |
- helper_.NewProtoSource(&in_stream, GetTypeUrl(descriptor))); |
- return os->WriteTo(&mock_); |
- } |
- |
- void PrepareExpectingObjectWriterForRepeatedPrimitive() { |
- ow_.StartObject("") |
- ->StartList("rep_fix32") |
- ->RenderUint32("", bit_cast<uint32>(3201)) |
- ->RenderUint32("", bit_cast<uint32>(0)) |
- ->RenderUint32("", bit_cast<uint32>(3202)) |
- ->EndList() |
- ->StartList("rep_u32") |
- ->RenderUint32("", bit_cast<uint32>(3203)) |
- ->RenderUint32("", bit_cast<uint32>(0)) |
- ->EndList() |
- ->StartList("rep_i32") |
- ->RenderInt32("", 0) |
- ->RenderInt32("", 3204) |
- ->RenderInt32("", 3205) |
- ->EndList() |
- ->StartList("rep_sf32") |
- ->RenderInt32("", 3206) |
- ->RenderInt32("", 0) |
- ->EndList() |
- ->StartList("rep_s32") |
- ->RenderInt32("", 0) |
- ->RenderInt32("", 3207) |
- ->RenderInt32("", 3208) |
- ->EndList() |
- ->StartList("rep_fix64") |
- ->RenderUint64("", bit_cast<uint64>(6401LL)) |
- ->RenderUint64("", bit_cast<uint64>(0LL)) |
- ->EndList() |
- ->StartList("rep_u64") |
- ->RenderUint64("", bit_cast<uint64>(0LL)) |
- ->RenderUint64("", bit_cast<uint64>(6402LL)) |
- ->RenderUint64("", bit_cast<uint64>(6403LL)) |
- ->EndList() |
- ->StartList("rep_i64") |
- ->RenderInt64("", 6404L) |
- ->RenderInt64("", 0L) |
- ->EndList() |
- ->StartList("rep_sf64") |
- ->RenderInt64("", 0L) |
- ->RenderInt64("", 6405L) |
- ->RenderInt64("", 6406L) |
- ->EndList() |
- ->StartList("rep_s64") |
- ->RenderInt64("", 6407L) |
- ->RenderInt64("", 0L) |
- ->EndList() |
- ->StartList("rep_float") |
- ->RenderFloat("", 0.0f) |
- ->RenderFloat("", 32.1f) |
- ->RenderFloat("", 32.2f) |
- ->EndList() |
- ->StartList("rep_double") |
- ->RenderDouble("", 64.1L) |
- ->RenderDouble("", 0.0L) |
- ->EndList() |
- ->StartList("rep_bool") |
- ->RenderBool("", true) |
- ->RenderBool("", false) |
- ->EndList() |
- ->EndObject(); |
- } |
- |
- Primitive PrepareRepeatedPrimitive() { |
- Primitive primitive; |
- primitive.add_rep_fix32(3201); |
- primitive.add_rep_fix32(0); |
- primitive.add_rep_fix32(3202); |
- primitive.add_rep_u32(3203); |
- primitive.add_rep_u32(0); |
- primitive.add_rep_i32(0); |
- primitive.add_rep_i32(3204); |
- primitive.add_rep_i32(3205); |
- primitive.add_rep_sf32(3206); |
- primitive.add_rep_sf32(0); |
- primitive.add_rep_s32(0); |
- primitive.add_rep_s32(3207); |
- primitive.add_rep_s32(3208); |
- primitive.add_rep_fix64(6401L); |
- primitive.add_rep_fix64(0L); |
- primitive.add_rep_u64(0L); |
- primitive.add_rep_u64(6402L); |
- primitive.add_rep_u64(6403L); |
- primitive.add_rep_i64(6404L); |
- primitive.add_rep_i64(0L); |
- primitive.add_rep_sf64(0L); |
- primitive.add_rep_sf64(6405L); |
- primitive.add_rep_sf64(6406L); |
- primitive.add_rep_s64(6407L); |
- primitive.add_rep_s64(0L); |
- primitive.add_rep_float(0.0f); |
- primitive.add_rep_float(32.1f); |
- primitive.add_rep_float(32.2f); |
- primitive.add_rep_double(64.1L); |
- primitive.add_rep_double(0.0); |
- primitive.add_rep_bool(true); |
- primitive.add_rep_bool(false); |
- |
- PrepareExpectingObjectWriterForRepeatedPrimitive(); |
- return primitive; |
- } |
- |
- PackedPrimitive PreparePackedPrimitive() { |
- PackedPrimitive primitive; |
- primitive.add_rep_fix32(3201); |
- primitive.add_rep_fix32(0); |
- primitive.add_rep_fix32(3202); |
- primitive.add_rep_u32(3203); |
- primitive.add_rep_u32(0); |
- primitive.add_rep_i32(0); |
- primitive.add_rep_i32(3204); |
- primitive.add_rep_i32(3205); |
- primitive.add_rep_sf32(3206); |
- primitive.add_rep_sf32(0); |
- primitive.add_rep_s32(0); |
- primitive.add_rep_s32(3207); |
- primitive.add_rep_s32(3208); |
- primitive.add_rep_fix64(6401L); |
- primitive.add_rep_fix64(0L); |
- primitive.add_rep_u64(0L); |
- primitive.add_rep_u64(6402L); |
- primitive.add_rep_u64(6403L); |
- primitive.add_rep_i64(6404L); |
- primitive.add_rep_i64(0L); |
- primitive.add_rep_sf64(0L); |
- primitive.add_rep_sf64(6405L); |
- primitive.add_rep_sf64(6406L); |
- primitive.add_rep_s64(6407L); |
- primitive.add_rep_s64(0L); |
- primitive.add_rep_float(0.0f); |
- primitive.add_rep_float(32.1f); |
- primitive.add_rep_float(32.2f); |
- primitive.add_rep_double(64.1L); |
- primitive.add_rep_double(0.0); |
- primitive.add_rep_bool(true); |
- primitive.add_rep_bool(false); |
- |
- PrepareExpectingObjectWriterForRepeatedPrimitive(); |
- return primitive; |
- } |
- |
- testing::TypeInfoTestHelper helper_; |
- |
- ::testing::NiceMock<MockObjectWriter> mock_; |
- ExpectingObjectWriter ow_; |
-}; |
- |
-INSTANTIATE_TEST_CASE_P(DifferentTypeInfoSourceTest, |
- ProtostreamObjectSourceTest, |
- ::testing::Values( |
- testing::USE_TYPE_RESOLVER)); |
- |
-TEST_P(ProtostreamObjectSourceTest, EmptyMessage) { |
- Book empty; |
- ow_.StartObject("")->EndObject(); |
- DoTest(empty, Book::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceTest, Primitives) { |
- Primitive primitive; |
- primitive.set_fix32(3201); |
- primitive.set_u32(3202); |
- primitive.set_i32(3203); |
- primitive.set_sf32(3204); |
- primitive.set_s32(3205); |
- primitive.set_fix64(6401L); |
- primitive.set_u64(6402L); |
- primitive.set_i64(6403L); |
- primitive.set_sf64(6404L); |
- primitive.set_s64(6405L); |
- primitive.set_str("String Value"); |
- primitive.set_bytes("Some Bytes"); |
- primitive.set_float_(32.1f); |
- primitive.set_double_(64.1L); |
- primitive.set_bool_(true); |
- |
- ow_.StartObject("") |
- ->RenderUint32("fix32", bit_cast<uint32>(3201)) |
- ->RenderUint32("u32", bit_cast<uint32>(3202)) |
- ->RenderInt32("i32", 3203) |
- ->RenderInt32("sf32", 3204) |
- ->RenderInt32("s32", 3205) |
- ->RenderUint64("fix64", bit_cast<uint64>(6401LL)) |
- ->RenderUint64("u64", bit_cast<uint64>(6402LL)) |
- ->RenderInt64("i64", 6403L) |
- ->RenderInt64("sf64", 6404L) |
- ->RenderInt64("s64", 6405L) |
- ->RenderString("str", "String Value") |
- ->RenderBytes("bytes", "Some Bytes") |
- ->RenderFloat("float", 32.1f) |
- ->RenderDouble("double", 64.1L) |
- ->RenderBool("bool", true) |
- ->EndObject(); |
- DoTest(primitive, Primitive::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceTest, RepeatingPrimitives) { |
- Primitive primitive = PrepareRepeatedPrimitive(); |
- primitive.add_rep_str("String One"); |
- primitive.add_rep_str("String Two"); |
- primitive.add_rep_bytes("Some Bytes"); |
- |
- ow_.StartList("rep_str") |
- ->RenderString("", "String One") |
- ->RenderString("", "String Two") |
- ->EndList() |
- ->StartList("rep_bytes") |
- ->RenderBytes("", "Some Bytes") |
- ->EndList(); |
- DoTest(primitive, Primitive::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceTest, NestedMessage) { |
- Author* author = new Author(); |
- author->set_id(101L); |
- author->set_name("Tolstoy"); |
- Book book; |
- book.set_title("My Book"); |
- book.set_allocated_author(author); |
- |
- ow_.StartObject("") |
- ->RenderString("title", "My Book") |
- ->StartObject("author") |
- ->RenderUint64("id", bit_cast<uint64>(101LL)) |
- ->RenderString("name", "Tolstoy") |
- ->EndObject() |
- ->EndObject(); |
- DoTest(book, Book::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceTest, RepeatingField) { |
- Author author; |
- author.set_alive(false); |
- author.set_name("john"); |
- author.add_pseudonym("phil"); |
- author.add_pseudonym("bob"); |
- |
- ow_.StartObject("") |
- ->RenderBool("alive", false) |
- ->RenderString("name", "john") |
- ->StartList("pseudonym") |
- ->RenderString("", "phil") |
- ->RenderString("", "bob") |
- ->EndList() |
- ->EndObject(); |
- DoTest(author, Author::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceTest, PackedRepeatingFields) { |
- DoTest(PreparePackedPrimitive(), PackedPrimitive::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceTest, NonPackedPackableFieldsActuallyPacked) { |
- // Protostream is packed, but parse with non-packed Primitive. |
- DoTest(PreparePackedPrimitive(), Primitive::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceTest, PackedPackableFieldNotActuallyPacked) { |
- // Protostream is not packed, but parse with PackedPrimitive. |
- DoTest(PrepareRepeatedPrimitive(), PackedPrimitive::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceTest, BadAuthor) { |
- Author author; |
- author.set_alive(false); |
- author.set_name("john"); |
- author.set_id(1234L); |
- author.add_pseudonym("phil"); |
- author.add_pseudonym("bob"); |
- |
- ow_.StartObject("") |
- ->StartList("alive") |
- ->RenderBool("", false) |
- ->EndList() |
- ->StartList("name") |
- ->RenderUint64("", static_cast<uint64>('j')) |
- ->RenderUint64("", static_cast<uint64>('o')) |
- ->RenderUint64("", static_cast<uint64>('h')) |
- ->RenderUint64("", static_cast<uint64>('n')) |
- ->EndList() |
- ->RenderString("pseudonym", "phil") |
- ->RenderString("pseudonym", "bob") |
- ->EndObject(); |
- // Protostream created with Author, but parsed with BadAuthor. |
- DoTest(author, BadAuthor::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceTest, NestedBookToBadNestedBook) { |
- Book* book = new Book(); |
- book->set_length(250); |
- book->set_published(2014L); |
- NestedBook nested; |
- nested.set_allocated_book(book); |
- |
- ow_.StartObject("") |
- ->StartList("book") |
- ->RenderUint32("", 24) // tag for field length (3 << 3) |
- ->RenderUint32("", 250) |
- ->RenderUint32("", 32) // tag for field published (4 << 3) |
- ->RenderUint32("", 2014) |
- ->EndList() |
- ->EndObject(); |
- // Protostream created with NestedBook, but parsed with BadNestedBook. |
- DoTest(nested, BadNestedBook::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceTest, BadNestedBookToNestedBook) { |
- BadNestedBook nested; |
- nested.add_book(1); |
- nested.add_book(2); |
- nested.add_book(3); |
- nested.add_book(4); |
- nested.add_book(5); |
- nested.add_book(6); |
- nested.add_book(7); |
- |
- ow_.StartObject("")->StartObject("book")->EndObject()->EndObject(); |
- // Protostream created with BadNestedBook, but parsed with NestedBook. |
- DoTest(nested, NestedBook::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceTest, |
- LongRepeatedListDoesNotBreakIntoMultipleJsonLists) { |
- Book book; |
- |
- int repeat = 10000; |
- for (int i = 0; i < repeat; ++i) { |
- Book_Label* label = book.add_labels(); |
- label->set_key(StrCat("i", i)); |
- label->set_value(StrCat("v", i)); |
- } |
- |
- // Make sure StartList and EndList are called exactly once (see b/18227499 for |
- // problems when this doesn't happen) |
- EXPECT_CALL(mock_, StartList(_)).Times(1); |
- EXPECT_CALL(mock_, EndList()).Times(1); |
- |
- DoTest(book, Book::descriptor()); |
-} |
- |
-class ProtostreamObjectSourceMapsTest : public ProtostreamObjectSourceTest { |
- protected: |
- ProtostreamObjectSourceMapsTest() { |
- helper_.ResetTypeInfo(MapOut::descriptor()); |
- } |
-}; |
- |
-INSTANTIATE_TEST_CASE_P(DifferentTypeInfoSourceTest, |
- ProtostreamObjectSourceMapsTest, |
- ::testing::Values( |
- testing::USE_TYPE_RESOLVER)); |
- |
-// Tests JSON map. |
-// |
-// This is the example expected output. |
-// { |
-// "map1": { |
-// "key1": { |
-// "foo": "foovalue" |
-// }, |
-// "key2": { |
-// "foo": "barvalue" |
-// } |
-// }, |
-// "map2": { |
-// "nestedself": { |
-// "map1": { |
-// "nested_key1": { |
-// "foo": "nested_foo" |
-// } |
-// }, |
-// "bar": "nested_bar_string" |
-// } |
-// }, |
-// "map3": { |
-// "111": "one one one" |
-// }, |
-// "bar": "top bar" |
-// } |
-TEST_P(ProtostreamObjectSourceMapsTest, MapsTest) { |
- MapOut out; |
- (*out.mutable_map1())["key1"].set_foo("foovalue"); |
- (*out.mutable_map1())["key2"].set_foo("barvalue"); |
- |
- MapOut* nested_value = &(*out.mutable_map2())["nestedself"]; |
- (*nested_value->mutable_map1())["nested_key1"].set_foo("nested_foo"); |
- nested_value->set_bar("nested_bar_string"); |
- |
- (*out.mutable_map3())[111] = "one one one"; |
- |
- out.set_bar("top bar"); |
- |
- ow_.StartObject("") |
- ->StartObject("map1") |
- ->StartObject("key1") |
- ->RenderString("foo", "foovalue") |
- ->EndObject() |
- ->StartObject("key2") |
- ->RenderString("foo", "barvalue") |
- ->EndObject() |
- ->StartObject("map2") |
- ->StartObject("nestedself") |
- ->StartObject("map1") |
- ->StartObject("nested_key1") |
- ->RenderString("foo", "nested_foo") |
- ->EndObject() |
- ->EndObject() |
- ->RenderString("bar", "nested_bar_string") |
- ->EndObject() |
- ->EndObject() |
- ->StartObject("map3") |
- ->RenderString("111", "one one one") |
- ->EndObject() |
- ->EndObject() |
- ->RenderString("bar", "top bar") |
- ->EndObject(); |
- |
- DoTest(out, MapOut::descriptor()); |
-} |
- |
-class ProtostreamObjectSourceAnysTest : public ProtostreamObjectSourceTest { |
- protected: |
- ProtostreamObjectSourceAnysTest() { |
- helper_.ResetTypeInfo(AnyOut::descriptor(), |
- google::protobuf::Any::descriptor()); |
- } |
-}; |
- |
-INSTANTIATE_TEST_CASE_P(DifferentTypeInfoSourceTest, |
- ProtostreamObjectSourceAnysTest, |
- ::testing::Values( |
- testing::USE_TYPE_RESOLVER)); |
- |
-// Tests JSON any support. |
-// |
-// This is the example expected output. |
-// { |
-// "any": { |
-// "@type": "type.googleapis.com/google.protobuf.testing.anys.AnyM" |
-// "foo": "foovalue" |
-// } |
-// } |
-TEST_P(ProtostreamObjectSourceAnysTest, BasicAny) { |
- AnyOut out; |
- ::google::protobuf::Any* any = out.mutable_any(); |
- |
- AnyM m; |
- m.set_foo("foovalue"); |
- any->PackFrom(m); |
- |
- ow_.StartObject("") |
- ->StartObject("any") |
- ->RenderString("@type", |
- "type.googleapis.com/google.protobuf.testing.anys.AnyM") |
- ->RenderString("foo", "foovalue") |
- ->EndObject() |
- ->EndObject(); |
- |
- DoTest(out, AnyOut::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceAnysTest, RecursiveAny) { |
- AnyOut out; |
- ::google::protobuf::Any* any = out.mutable_any(); |
- any->set_type_url("type.googleapis.com/google.protobuf.Any"); |
- |
- ::google::protobuf::Any nested_any; |
- nested_any.set_type_url( |
- "type.googleapis.com/google.protobuf.testing.anys.AnyM"); |
- |
- AnyM m; |
- m.set_foo("foovalue"); |
- nested_any.set_value(m.SerializeAsString()); |
- |
- any->set_value(nested_any.SerializeAsString()); |
- |
- ow_.StartObject("") |
- ->StartObject("any") |
- ->RenderString("@type", "type.googleapis.com/google.protobuf.Any") |
- ->StartObject("value") |
- ->RenderString("@type", |
- "type.googleapis.com/google.protobuf.testing.anys.AnyM") |
- ->RenderString("foo", "foovalue") |
- ->EndObject() |
- ->EndObject() |
- ->EndObject(); |
- |
- DoTest(out, AnyOut::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceAnysTest, DoubleRecursiveAny) { |
- AnyOut out; |
- ::google::protobuf::Any* any = out.mutable_any(); |
- any->set_type_url("type.googleapis.com/google.protobuf.Any"); |
- |
- ::google::protobuf::Any nested_any; |
- nested_any.set_type_url("type.googleapis.com/google.protobuf.Any"); |
- |
- ::google::protobuf::Any second_nested_any; |
- second_nested_any.set_type_url( |
- "type.googleapis.com/google.protobuf.testing.anys.AnyM"); |
- |
- AnyM m; |
- m.set_foo("foovalue"); |
- second_nested_any.set_value(m.SerializeAsString()); |
- nested_any.set_value(second_nested_any.SerializeAsString()); |
- any->set_value(nested_any.SerializeAsString()); |
- |
- ow_.StartObject("") |
- ->StartObject("any") |
- ->RenderString("@type", "type.googleapis.com/google.protobuf.Any") |
- ->StartObject("value") |
- ->RenderString("@type", "type.googleapis.com/google.protobuf.Any") |
- ->StartObject("value") |
- ->RenderString("@type", |
- "type.googleapis.com/google.protobuf.testing.anys.AnyM") |
- ->RenderString("foo", "foovalue") |
- ->EndObject() |
- ->EndObject() |
- ->EndObject() |
- ->EndObject(); |
- |
- DoTest(out, AnyOut::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceAnysTest, EmptyAnyOutputsEmptyObject) { |
- AnyOut out; |
- out.mutable_any(); |
- |
- ow_.StartObject("")->StartObject("any")->EndObject()->EndObject(); |
- |
- DoTest(out, AnyOut::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceAnysTest, EmptyWithTypeAndNoValueOutputsType) { |
- AnyOut out; |
- out.mutable_any()->set_type_url("foo.googleapis.com/my.Type"); |
- |
- ow_.StartObject("") |
- ->StartObject("any") |
- ->RenderString("@type", "foo.googleapis.com/my.Type") |
- ->EndObject() |
- ->EndObject(); |
- |
- DoTest(out, AnyOut::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceAnysTest, MissingTypeUrlError) { |
- AnyOut out; |
- ::google::protobuf::Any* any = out.mutable_any(); |
- |
- AnyM m; |
- m.set_foo("foovalue"); |
- any->set_value(m.SerializeAsString()); |
- |
- // We start the "AnyOut" part and then fail when we hit the Any object. |
- ow_.StartObject(""); |
- |
- Status status = ExecuteTest(out, AnyOut::descriptor()); |
- EXPECT_EQ(util::error::INTERNAL, status.error_code()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceAnysTest, UnknownTypeServiceError) { |
- AnyOut out; |
- ::google::protobuf::Any* any = out.mutable_any(); |
- any->set_type_url("foo.googleapis.com/my.own.Type"); |
- |
- AnyM m; |
- m.set_foo("foovalue"); |
- any->set_value(m.SerializeAsString()); |
- |
- // We start the "AnyOut" part and then fail when we hit the Any object. |
- ow_.StartObject(""); |
- |
- Status status = ExecuteTest(out, AnyOut::descriptor()); |
- EXPECT_EQ(util::error::INTERNAL, status.error_code()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceAnysTest, UnknownTypeError) { |
- AnyOut out; |
- ::google::protobuf::Any* any = out.mutable_any(); |
- any->set_type_url("type.googleapis.com/unknown.Type"); |
- |
- AnyM m; |
- m.set_foo("foovalue"); |
- any->set_value(m.SerializeAsString()); |
- |
- // We start the "AnyOut" part and then fail when we hit the Any object. |
- ow_.StartObject(""); |
- |
- Status status = ExecuteTest(out, AnyOut::descriptor()); |
- EXPECT_EQ(util::error::INTERNAL, status.error_code()); |
-} |
- |
-class ProtostreamObjectSourceStructTest : public ProtostreamObjectSourceTest { |
- protected: |
- ProtostreamObjectSourceStructTest() { |
- helper_.ResetTypeInfo(StructType::descriptor(), |
- google::protobuf::Struct::descriptor()); |
- } |
-}; |
- |
-INSTANTIATE_TEST_CASE_P(DifferentTypeInfoSourceTest, |
- ProtostreamObjectSourceStructTest, |
- ::testing::Values( |
- testing::USE_TYPE_RESOLVER)); |
- |
-// Tests struct |
-// |
-// "object": { |
-// "k1": 123, |
-// "k2": true |
-// } |
-TEST_P(ProtostreamObjectSourceStructTest, StructRenderSuccess) { |
- StructType out; |
- google::protobuf::Struct* s = out.mutable_object(); |
- s->mutable_fields()->operator[]("k1").set_number_value(123); |
- s->mutable_fields()->operator[]("k2").set_bool_value(true); |
- |
- ow_.StartObject("") |
- ->StartObject("object") |
- ->RenderDouble("k1", 123) |
- ->RenderBool("k2", true) |
- ->EndObject() |
- ->EndObject(); |
- |
- DoTest(out, StructType::descriptor()); |
-} |
- |
-TEST_P(ProtostreamObjectSourceStructTest, MissingValueSkipsField) { |
- StructType out; |
- google::protobuf::Struct* s = out.mutable_object(); |
- s->mutable_fields()->operator[]("k1"); |
- |
- ow_.StartObject("")->StartObject("object")->EndObject()->EndObject(); |
- |
- DoTest(out, StructType::descriptor()); |
-} |
- |
-class ProtostreamObjectSourceFieldMaskTest |
- : public ProtostreamObjectSourceTest { |
- protected: |
- ProtostreamObjectSourceFieldMaskTest() { |
- helper_.ResetTypeInfo(FieldMaskTest::descriptor(), |
- google::protobuf::FieldMask::descriptor()); |
- } |
-}; |
- |
-INSTANTIATE_TEST_CASE_P(DifferentTypeInfoSourceTest, |
- ProtostreamObjectSourceFieldMaskTest, |
- ::testing::Values( |
- testing::USE_TYPE_RESOLVER)); |
- |
-TEST_P(ProtostreamObjectSourceFieldMaskTest, FieldMaskRenderSuccess) { |
- FieldMaskTest out; |
- out.set_id("1"); |
- out.mutable_single_mask()->add_paths("path1"); |
- out.mutable_single_mask()->add_paths("snake_case_path2"); |
- ::google::protobuf::FieldMask* mask = out.add_repeated_mask(); |
- mask->add_paths("path3"); |
- mask = out.add_repeated_mask(); |
- mask->add_paths("snake_case_path4"); |
- mask->add_paths("path5"); |
- NestedFieldMask* nested = out.add_nested_mask(); |
- nested->set_data("data"); |
- nested->mutable_single_mask()->add_paths("nested.path1"); |
- nested->mutable_single_mask()->add_paths("nested_field.snake_case_path2"); |
- mask = nested->add_repeated_mask(); |
- mask->add_paths("nested_field.path3"); |
- mask->add_paths("nested.snake_case_path4"); |
- mask = nested->add_repeated_mask(); |
- mask->add_paths("nested.path5"); |
- mask = nested->add_repeated_mask(); |
- mask->add_paths( |
- "snake_case.map_field[\"map_key_should_be_ignored\"].nested_snake_case." |
- "map_field[\"map_key_sho\\\"uld_be_ignored\"]"); |
- |
- ow_.StartObject("") |
- ->RenderString("id", "1") |
- ->RenderString("single_mask", "path1,snakeCasePath2") |
- ->StartList("repeated_mask") |
- ->RenderString("", "path3") |
- ->RenderString("", "snakeCasePath4,path5") |
- ->EndList() |
- ->StartList("nested_mask") |
- ->StartObject("") |
- ->RenderString("data", "data") |
- ->RenderString("single_mask", "nested.path1,nestedField.snakeCasePath2") |
- ->StartList("repeated_mask") |
- ->RenderString("", "nestedField.path3,nested.snakeCasePath4") |
- ->RenderString("", "nested.path5") |
- ->RenderString("", |
- "snakeCase.mapField[\"map_key_should_be_ignored\"]." |
- "nestedSnakeCase.mapField[\"map_key_sho\\\"uld_be_" |
- "ignored\"]") |
- ->EndList() |
- ->EndObject() |
- ->EndList() |
- ->EndObject(); |
- |
- DoTest(out, FieldMaskTest::descriptor()); |
-} |
- |
-} // namespace converter |
-} // namespace util |
-} // namespace protobuf |
-} // namespace google |