Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(560)

Side by Side Diff: third_party/protobuf/src/google/protobuf/util/internal/protostream_objectsource_test.cc

Issue 2495533002: third_party/protobuf: Update to HEAD (83d681ee2c) (Closed)
Patch Set: Make chrome settings proto generated file a component Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 24 matching lines...) Expand all
35 #include <google/protobuf/stubs/shared_ptr.h> 35 #include <google/protobuf/stubs/shared_ptr.h>
36 #endif 36 #endif
37 #include <sstream> 37 #include <sstream>
38 38
39 #include <google/protobuf/stubs/casts.h> 39 #include <google/protobuf/stubs/casts.h>
40 #include <google/protobuf/any.pb.h> 40 #include <google/protobuf/any.pb.h>
41 #include <google/protobuf/io/coded_stream.h> 41 #include <google/protobuf/io/coded_stream.h>
42 #include <google/protobuf/io/zero_copy_stream_impl_lite.h> 42 #include <google/protobuf/io/zero_copy_stream_impl_lite.h>
43 #include <google/protobuf/descriptor.h> 43 #include <google/protobuf/descriptor.h>
44 #include <google/protobuf/util/internal/expecting_objectwriter.h> 44 #include <google/protobuf/util/internal/expecting_objectwriter.h>
45 #include <google/protobuf/util/internal/testdata/anys.pb.h>
45 #include <google/protobuf/util/internal/testdata/books.pb.h> 46 #include <google/protobuf/util/internal/testdata/books.pb.h>
46 #include <google/protobuf/util/internal/testdata/field_mask.pb.h> 47 #include <google/protobuf/util/internal/testdata/field_mask.pb.h>
48 #include <google/protobuf/util/internal/testdata/maps.pb.h>
49 #include <google/protobuf/util/internal/testdata/proto3.pb.h>
50 #include <google/protobuf/util/internal/testdata/struct.pb.h>
51 #include <google/protobuf/util/internal/testdata/timestamp_duration.pb.h>
47 #include <google/protobuf/util/internal/type_info_test_helper.h> 52 #include <google/protobuf/util/internal/type_info_test_helper.h>
48 #include <google/protobuf/util/internal/constants.h> 53 #include <google/protobuf/util/internal/constants.h>
49 #include <google/protobuf/stubs/strutil.h> 54 #include <google/protobuf/stubs/strutil.h>
50 #include <google/protobuf/util/internal/testdata/anys.pb.h>
51 #include <google/protobuf/util/internal/testdata/maps.pb.h>
52 #include <google/protobuf/util/internal/testdata/struct.pb.h>
53 #include <google/protobuf/util/internal/testdata/timestamp_duration.pb.h>
54 #include <gtest/gtest.h> 55 #include <gtest/gtest.h>
55 56
56 57
57 namespace google { 58 namespace google {
58 namespace protobuf { 59 namespace protobuf {
59 namespace util { 60 namespace util {
60 namespace converter { 61 namespace converter {
61 62
62 using google::protobuf::Descriptor; 63 using google::protobuf::Descriptor;
63 using google::protobuf::DescriptorPool; 64 using google::protobuf::DescriptorPool;
64 using google::protobuf::FileDescriptorProto; 65 using google::protobuf::FileDescriptorProto;
65 using google::protobuf::Message; 66 using google::protobuf::Message;
66 using google::protobuf::io::ArrayInputStream; 67 using google::protobuf::io::ArrayInputStream;
67 using google::protobuf::io::CodedInputStream; 68 using google::protobuf::io::CodedInputStream;
68 using util::Status; 69 using util::Status;
70 using google::protobuf::testing::AnyM;
71 using google::protobuf::testing::AnyOut;
69 using google::protobuf::testing::Author; 72 using google::protobuf::testing::Author;
70 using google::protobuf::testing::BadAuthor; 73 using google::protobuf::testing::BadAuthor;
71 using google::protobuf::testing::BadNestedBook; 74 using google::protobuf::testing::BadNestedBook;
72 using google::protobuf::testing::Book; 75 using google::protobuf::testing::Book;
76 using google::protobuf::testing::Book_Label;
73 using google::protobuf::testing::Cyclic; 77 using google::protobuf::testing::Cyclic;
74 using google::protobuf::testing::Book_Label; 78 using google::protobuf::testing::FieldMaskTest;
79 using google::protobuf::testing::MapOut;
80 using google::protobuf::testing::MapOutWireFormat;
75 using google::protobuf::testing::NestedBook; 81 using google::protobuf::testing::NestedBook;
82 using google::protobuf::testing::NestedFieldMask;
76 using google::protobuf::testing::PackedPrimitive; 83 using google::protobuf::testing::PackedPrimitive;
77 using google::protobuf::testing::Primitive; 84 using google::protobuf::testing::Primitive;
78 using google::protobuf::testing::more_author; 85 using google::protobuf::testing::Proto3Message;
79 using google::protobuf::testing::maps::MapOut; 86 using google::protobuf::testing::StructType;
80 using google::protobuf::testing::maps::MapOutWireFormat; 87 using google::protobuf::testing::TimestampDuration;
81 using google::protobuf::testing::timestampduration::TimestampDuration;
82 using google::protobuf::testing::anys::AnyOut;
83 using google::protobuf::testing::anys::AnyM;
84 using google::protobuf::testing::FieldMaskTest;
85 using google::protobuf::testing::NestedFieldMask;
86 using google::protobuf::testing::structs::StructType;
87 using ::testing::_; 88 using ::testing::_;
88 89
89 90
90 namespace { 91 namespace {
91 string GetTypeUrl(const Descriptor* descriptor) { 92 string GetTypeUrl(const Descriptor* descriptor) {
92 return string(kTypeServiceBaseUrl) + "/" + descriptor->full_name(); 93 return string(kTypeServiceBaseUrl) + "/" + descriptor->full_name();
93 } 94 }
94 } // namespace 95 } // namespace
95 96
96 class ProtostreamObjectSourceTest 97 class ProtostreamObjectSourceTest
97 : public ::testing::TestWithParam<testing::TypeInfoSource> { 98 : public ::testing::TestWithParam<testing::TypeInfoSource> {
98 protected: 99 protected:
99 ProtostreamObjectSourceTest() 100 ProtostreamObjectSourceTest()
100 : helper_(GetParam()), 101 : helper_(GetParam()),
101 mock_(), 102 mock_(),
102 ow_(&mock_), 103 ow_(&mock_),
103 use_lower_camel_for_enums_(false) { 104 use_lower_camel_for_enums_(false),
104 helper_.ResetTypeInfo(Book::descriptor()); 105 add_trailing_zeros_(false) {
106 helper_.ResetTypeInfo(Book::descriptor(), Proto3Message::descriptor());
105 } 107 }
106 108
107 virtual ~ProtostreamObjectSourceTest() {} 109 virtual ~ProtostreamObjectSourceTest() {}
108 110
109 void DoTest(const Message& msg, const Descriptor* descriptor) { 111 void DoTest(const Message& msg, const Descriptor* descriptor) {
110 Status status = ExecuteTest(msg, descriptor); 112 Status status = ExecuteTest(msg, descriptor);
111 EXPECT_EQ(Status::OK, status); 113 EXPECT_EQ(Status::OK, status);
112 } 114 }
113 115
114 Status ExecuteTest(const Message& msg, const Descriptor* descriptor) { 116 Status ExecuteTest(const Message& msg, const Descriptor* descriptor) {
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 primitive.add_rep_double(0.0); 263 primitive.add_rep_double(0.0);
262 primitive.add_rep_bool(true); 264 primitive.add_rep_bool(true);
263 primitive.add_rep_bool(false); 265 primitive.add_rep_bool(false);
264 266
265 PrepareExpectingObjectWriterForRepeatedPrimitive(); 267 PrepareExpectingObjectWriterForRepeatedPrimitive();
266 return primitive; 268 return primitive;
267 } 269 }
268 270
269 void UseLowerCamelForEnums() { use_lower_camel_for_enums_ = true; } 271 void UseLowerCamelForEnums() { use_lower_camel_for_enums_ = true; }
270 272
273 void AddTrailingZeros() { add_trailing_zeros_ = true; }
274
271 testing::TypeInfoTestHelper helper_; 275 testing::TypeInfoTestHelper helper_;
272 276
273 ::testing::NiceMock<MockObjectWriter> mock_; 277 ::testing::NiceMock<MockObjectWriter> mock_;
274 ExpectingObjectWriter ow_; 278 ExpectingObjectWriter ow_;
275 bool use_lower_camel_for_enums_; 279 bool use_lower_camel_for_enums_;
280 bool add_trailing_zeros_;
276 }; 281 };
277 282
278 INSTANTIATE_TEST_CASE_P(DifferentTypeInfoSourceTest, 283 INSTANTIATE_TEST_CASE_P(DifferentTypeInfoSourceTest,
279 ProtostreamObjectSourceTest, 284 ProtostreamObjectSourceTest,
280 ::testing::Values( 285 ::testing::Values(
281 testing::USE_TYPE_RESOLVER)); 286 testing::USE_TYPE_RESOLVER));
282 287
283 TEST_P(ProtostreamObjectSourceTest, EmptyMessage) { 288 TEST_P(ProtostreamObjectSourceTest, EmptyMessage) {
284 Book empty; 289 Book empty;
285 ow_.StartObject("")->EndObject(); 290 ow_.StartObject("")->EndObject();
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 491
487 TEST_P(ProtostreamObjectSourceTest, EnumCaseIsUnchangedByDefault) { 492 TEST_P(ProtostreamObjectSourceTest, EnumCaseIsUnchangedByDefault) {
488 Book book; 493 Book book;
489 book.set_type(Book::ACTION_AND_ADVENTURE); 494 book.set_type(Book::ACTION_AND_ADVENTURE);
490 ow_.StartObject("") 495 ow_.StartObject("")
491 ->RenderString("type", "ACTION_AND_ADVENTURE") 496 ->RenderString("type", "ACTION_AND_ADVENTURE")
492 ->EndObject(); 497 ->EndObject();
493 DoTest(book, Book::descriptor()); 498 DoTest(book, Book::descriptor());
494 } 499 }
495 500
501 TEST_P(ProtostreamObjectSourceTest, UnknownEnum) {
502 Proto3Message message;
503 message.set_enum_value(static_cast<Proto3Message::NestedEnum>(1234));
504 ow_.StartObject("")
505 ->RenderInt32("enumValue", 1234)
506 ->EndObject();
507 DoTest(message, Proto3Message::descriptor());
508 }
509
496 TEST_P(ProtostreamObjectSourceTest, CyclicMessageDepthTest) { 510 TEST_P(ProtostreamObjectSourceTest, CyclicMessageDepthTest) {
497 Cyclic cyclic; 511 Cyclic cyclic;
498 cyclic.set_m_int(123); 512 cyclic.set_m_int(123);
499 513
500 Book* book = cyclic.mutable_m_book(); 514 Book* book = cyclic.mutable_m_book();
501 book->set_title("book title"); 515 book->set_title("book title");
502 Cyclic* current = cyclic.mutable_m_cyclic(); 516 Cyclic* current = cyclic.mutable_m_cyclic();
503 Author* current_author = cyclic.add_m_author(); 517 Author* current_author = cyclic.add_m_author();
504 for (int i = 0; i < 63; ++i) { 518 for (int i = 0; i < 63; ++i) {
505 Author* next = current_author->add_friend_(); 519 Author* next = current_author->add_friend_();
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 INSTANTIATE_TEST_CASE_P(DifferentTypeInfoSourceTest, 686 INSTANTIATE_TEST_CASE_P(DifferentTypeInfoSourceTest,
673 ProtostreamObjectSourceAnysTest, 687 ProtostreamObjectSourceAnysTest,
674 ::testing::Values( 688 ::testing::Values(
675 testing::USE_TYPE_RESOLVER)); 689 testing::USE_TYPE_RESOLVER));
676 690
677 // Tests JSON any support. 691 // Tests JSON any support.
678 // 692 //
679 // This is the example expected output. 693 // This is the example expected output.
680 // { 694 // {
681 // "any": { 695 // "any": {
682 // "@type": "type.googleapis.com/google.protobuf.testing.anys.AnyM" 696 // "@type": "type.googleapis.com/google.protobuf.testing.AnyM"
683 // "foo": "foovalue" 697 // "foo": "foovalue"
684 // } 698 // }
685 // } 699 // }
686 TEST_P(ProtostreamObjectSourceAnysTest, BasicAny) { 700 TEST_P(ProtostreamObjectSourceAnysTest, BasicAny) {
687 AnyOut out; 701 AnyOut out;
688 ::google::protobuf::Any* any = out.mutable_any(); 702 ::google::protobuf::Any* any = out.mutable_any();
689 703
690 AnyM m; 704 AnyM m;
691 m.set_foo("foovalue"); 705 m.set_foo("foovalue");
692 any->PackFrom(m); 706 any->PackFrom(m);
693 707
694 ow_.StartObject("") 708 ow_.StartObject("")
695 ->StartObject("any") 709 ->StartObject("any")
696 ->RenderString("@type", 710 ->RenderString("@type",
697 "type.googleapis.com/google.protobuf.testing.anys.AnyM") 711 "type.googleapis.com/google.protobuf.testing.AnyM")
698 ->RenderString("foo", "foovalue") 712 ->RenderString("foo", "foovalue")
699 ->EndObject() 713 ->EndObject()
700 ->EndObject(); 714 ->EndObject();
701 715
702 DoTest(out, AnyOut::descriptor()); 716 DoTest(out, AnyOut::descriptor());
703 } 717 }
704 718
705 TEST_P(ProtostreamObjectSourceAnysTest, RecursiveAny) { 719 TEST_P(ProtostreamObjectSourceAnysTest, RecursiveAny) {
706 AnyOut out; 720 AnyOut out;
707 ::google::protobuf::Any* any = out.mutable_any(); 721 ::google::protobuf::Any* any = out.mutable_any();
708 any->set_type_url("type.googleapis.com/google.protobuf.Any"); 722 any->set_type_url("type.googleapis.com/google.protobuf.Any");
709 723
710 ::google::protobuf::Any nested_any; 724 ::google::protobuf::Any nested_any;
711 nested_any.set_type_url( 725 nested_any.set_type_url("type.googleapis.com/google.protobuf.testing.AnyM");
712 "type.googleapis.com/google.protobuf.testing.anys.AnyM");
713 726
714 AnyM m; 727 AnyM m;
715 m.set_foo("foovalue"); 728 m.set_foo("foovalue");
716 nested_any.set_value(m.SerializeAsString()); 729 nested_any.set_value(m.SerializeAsString());
717 730
718 any->set_value(nested_any.SerializeAsString()); 731 any->set_value(nested_any.SerializeAsString());
719 732
720 ow_.StartObject("") 733 ow_.StartObject("")
721 ->StartObject("any") 734 ->StartObject("any")
722 ->RenderString("@type", "type.googleapis.com/google.protobuf.Any") 735 ->RenderString("@type", "type.googleapis.com/google.protobuf.Any")
723 ->StartObject("value") 736 ->StartObject("value")
724 ->RenderString("@type", 737 ->RenderString("@type",
725 "type.googleapis.com/google.protobuf.testing.anys.AnyM") 738 "type.googleapis.com/google.protobuf.testing.AnyM")
726 ->RenderString("foo", "foovalue") 739 ->RenderString("foo", "foovalue")
727 ->EndObject() 740 ->EndObject()
728 ->EndObject() 741 ->EndObject()
729 ->EndObject(); 742 ->EndObject();
730 743
731 DoTest(out, AnyOut::descriptor()); 744 DoTest(out, AnyOut::descriptor());
732 } 745 }
733 746
734 TEST_P(ProtostreamObjectSourceAnysTest, DoubleRecursiveAny) { 747 TEST_P(ProtostreamObjectSourceAnysTest, DoubleRecursiveAny) {
735 AnyOut out; 748 AnyOut out;
736 ::google::protobuf::Any* any = out.mutable_any(); 749 ::google::protobuf::Any* any = out.mutable_any();
737 any->set_type_url("type.googleapis.com/google.protobuf.Any"); 750 any->set_type_url("type.googleapis.com/google.protobuf.Any");
738 751
739 ::google::protobuf::Any nested_any; 752 ::google::protobuf::Any nested_any;
740 nested_any.set_type_url("type.googleapis.com/google.protobuf.Any"); 753 nested_any.set_type_url("type.googleapis.com/google.protobuf.Any");
741 754
742 ::google::protobuf::Any second_nested_any; 755 ::google::protobuf::Any second_nested_any;
743 second_nested_any.set_type_url( 756 second_nested_any.set_type_url(
744 "type.googleapis.com/google.protobuf.testing.anys.AnyM"); 757 "type.googleapis.com/google.protobuf.testing.AnyM");
745 758
746 AnyM m; 759 AnyM m;
747 m.set_foo("foovalue"); 760 m.set_foo("foovalue");
748 second_nested_any.set_value(m.SerializeAsString()); 761 second_nested_any.set_value(m.SerializeAsString());
749 nested_any.set_value(second_nested_any.SerializeAsString()); 762 nested_any.set_value(second_nested_any.SerializeAsString());
750 any->set_value(nested_any.SerializeAsString()); 763 any->set_value(nested_any.SerializeAsString());
751 764
752 ow_.StartObject("") 765 ow_.StartObject("")
753 ->StartObject("any") 766 ->StartObject("any")
754 ->RenderString("@type", "type.googleapis.com/google.protobuf.Any") 767 ->RenderString("@type", "type.googleapis.com/google.protobuf.Any")
755 ->StartObject("value") 768 ->StartObject("value")
756 ->RenderString("@type", "type.googleapis.com/google.protobuf.Any") 769 ->RenderString("@type", "type.googleapis.com/google.protobuf.Any")
757 ->StartObject("value") 770 ->StartObject("value")
758 ->RenderString("@type", 771 ->RenderString("@type",
759 "type.googleapis.com/google.protobuf.testing.anys.AnyM") 772 "type.googleapis.com/google.protobuf.testing.AnyM")
760 ->RenderString("foo", "foovalue") 773 ->RenderString("foo", "foovalue")
761 ->EndObject() 774 ->EndObject()
762 ->EndObject() 775 ->EndObject()
763 ->EndObject() 776 ->EndObject()
764 ->EndObject(); 777 ->EndObject();
765 778
766 DoTest(out, AnyOut::descriptor()); 779 DoTest(out, AnyOut::descriptor());
767 } 780 }
768 781
769 TEST_P(ProtostreamObjectSourceAnysTest, EmptyAnyOutputsEmptyObject) { 782 TEST_P(ProtostreamObjectSourceAnysTest, EmptyAnyOutputsEmptyObject) {
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 TimestampDuration out; 1007 TimestampDuration out;
995 google::protobuf::Duration* dur = out.mutable_dur(); 1008 google::protobuf::Duration* dur = out.mutable_dur();
996 // Min allowed seconds + 1 1009 // Min allowed seconds + 1
997 dur->set_seconds(kDurationMaxSeconds + 1); 1010 dur->set_seconds(kDurationMaxSeconds + 1);
998 ow_.StartObject(""); 1011 ow_.StartObject("");
999 1012
1000 Status status = ExecuteTest(out, TimestampDuration::descriptor()); 1013 Status status = ExecuteTest(out, TimestampDuration::descriptor());
1001 EXPECT_EQ(util::error::INTERNAL, status.error_code()); 1014 EXPECT_EQ(util::error::INTERNAL, status.error_code());
1002 } 1015 }
1003 1016
1017 TEST_P(ProtostreamObjectSourceTimestampTest, TimestampDurationDefaultValue) {
1018 TimestampDuration out;
1019 out.mutable_ts()->set_seconds(0);
1020 out.mutable_dur()->set_seconds(0);
1021
1022 ow_.StartObject("")
1023 ->RenderString("ts", "1970-01-01T00:00:00Z")
1024 ->RenderString("dur", "0s")
1025 ->EndObject();
1026
1027 DoTest(out, TimestampDuration::descriptor());
1028 }
1029
1030
1004 } // namespace converter 1031 } // namespace converter
1005 } // namespace util 1032 } // namespace util
1006 } // namespace protobuf 1033 } // namespace protobuf
1007 } // namespace google 1034 } // namespace google
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698