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

Side by Side Diff: third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_unittest.cc

Issue 21208003: Update protobuf to r428, part 1. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 4 months 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 | Annotate | Revision Log
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 // http://code.google.com/p/protobuf/ 3 // http://code.google.com/p/protobuf/
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 26 matching lines...) Expand all
37 // are actually testing the parser and other parts of the system at the same 37 // are actually testing the parser and other parts of the system at the same
38 // time, and that problems in the generator may show up as compile-time errors 38 // time, and that problems in the generator may show up as compile-time errors
39 // rather than unittest failures, which may be surprising. However, testing 39 // rather than unittest failures, which may be surprising. However, testing
40 // the output of the C++ generator directly would be very hard. We can't very 40 // the output of the C++ generator directly would be very hard. We can't very
41 // well just check it against golden files since those files would have to be 41 // well just check it against golden files since those files would have to be
42 // updated for any small change; such a test would be very brittle and probably 42 // updated for any small change; such a test would be very brittle and probably
43 // not very helpful. What we really want to test is that the code compiles 43 // not very helpful. What we really want to test is that the code compiles
44 // correctly and produces the interfaces we expect, which is why this test 44 // correctly and produces the interfaces we expect, which is why this test
45 // is written this way. 45 // is written this way.
46 46
47 #include <google/protobuf/compiler/cpp/cpp_unittest.h>
48
47 #include <vector> 49 #include <vector>
48 50
49 #include <google/protobuf/unittest.pb.h> 51 #include <google/protobuf/unittest.pb.h>
50 #include <google/protobuf/unittest_optimize_for.pb.h> 52 #include <google/protobuf/unittest_optimize_for.pb.h>
51 #include <google/protobuf/unittest_embed_optimize_for.pb.h> 53 #include <google/protobuf/unittest_embed_optimize_for.pb.h>
52 #include <google/protobuf/unittest_no_generic_services.pb.h> 54 #include <google/protobuf/unittest_no_generic_services.pb.h>
53 #include <google/protobuf/test_util.h> 55 #include <google/protobuf/test_util.h>
54 #include <google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h> 56 #include <google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h>
55 #include <google/protobuf/compiler/importer.h> 57 #include <google/protobuf/compiler/importer.h>
56 #include <google/protobuf/io/coded_stream.h> 58 #include <google/protobuf/io/coded_stream.h>
57 #include <google/protobuf/io/zero_copy_stream_impl.h> 59 #include <google/protobuf/io/zero_copy_stream_impl.h>
58 #include <google/protobuf/descriptor.h> 60 #include <google/protobuf/descriptor.h>
59 #include <google/protobuf/descriptor.pb.h> 61 #include <google/protobuf/descriptor.pb.h>
60 #include <google/protobuf/dynamic_message.h> 62 #include <google/protobuf/dynamic_message.h>
61 63
62 #include <google/protobuf/stubs/common.h> 64 #include <google/protobuf/stubs/common.h>
63 #include <google/protobuf/stubs/strutil.h> 65 #include <google/protobuf/stubs/strutil.h>
64 #include <google/protobuf/stubs/substitute.h> 66 #include <google/protobuf/stubs/substitute.h>
65 #include <google/protobuf/testing/googletest.h> 67 #include <google/protobuf/testing/googletest.h>
66 #include <gtest/gtest.h> 68 #include <gtest/gtest.h>
67 #include <google/protobuf/stubs/stl_util-inl.h> 69 #include <google/protobuf/stubs/stl_util.h>
68 70
69 namespace google { 71 namespace google {
70 namespace protobuf { 72 namespace protobuf {
71 namespace compiler { 73 namespace compiler {
72 namespace cpp { 74 namespace cpp {
73 75
74 // Can't use an anonymous namespace here due to brokenness of Tru64 compiler. 76 // Can't use an anonymous namespace here due to brokenness of Tru64 compiler.
75 namespace cpp_unittest { 77 namespace cpp_unittest {
76 78
79 namespace protobuf_unittest = ::protobuf_unittest;
80
77 81
78 class MockErrorCollector : public MultiFileErrorCollector { 82 class MockErrorCollector : public MultiFileErrorCollector {
79 public: 83 public:
80 MockErrorCollector() {} 84 MockErrorCollector() {}
81 ~MockErrorCollector() {} 85 ~MockErrorCollector() {}
82 86
83 string text_; 87 string text_;
84 88
85 // implements ErrorCollector --------------------------------------- 89 // implements ErrorCollector ---------------------------------------
86 void AddError(const string& filename, int line, int column, 90 void AddError(const string& filename, int line, int column,
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 EXPECT_TRUE(extreme_default.nan_float() != extreme_default.nan_float()); 171 EXPECT_TRUE(extreme_default.nan_float() != extreme_default.nan_float());
168 } 172 }
169 173
170 TEST(GeneratedMessageTest, Trigraph) { 174 TEST(GeneratedMessageTest, Trigraph) {
171 const unittest::TestExtremeDefaultValues& extreme_default = 175 const unittest::TestExtremeDefaultValues& extreme_default =
172 unittest::TestExtremeDefaultValues::default_instance(); 176 unittest::TestExtremeDefaultValues::default_instance();
173 177
174 EXPECT_EQ("? ? ?? ?? ??? ?\?/ ?\?-", extreme_default.cpp_trigraph()); 178 EXPECT_EQ("? ? ?? ?? ??? ?\?/ ?\?-", extreme_default.cpp_trigraph());
175 } 179 }
176 180
181 TEST(GeneratedMessageTest, ExtremeSmallIntegerDefault) {
182 const unittest::TestExtremeDefaultValues& extreme_default =
183 unittest::TestExtremeDefaultValues::default_instance();
184 EXPECT_EQ(-0x80000000, kint32min);
185 EXPECT_EQ(GOOGLE_LONGLONG(-0x8000000000000000), kint64min);
186 EXPECT_EQ(kint32min, extreme_default.really_small_int32());
187 EXPECT_EQ(kint64min, extreme_default.really_small_int64());
188 }
189
177 TEST(GeneratedMessageTest, Accessors) { 190 TEST(GeneratedMessageTest, Accessors) {
178 // Set every field to a unique value then go back and check all those 191 // Set every field to a unique value then go back and check all those
179 // values. 192 // values.
180 unittest::TestAllTypes message; 193 unittest::TestAllTypes message;
181 194
182 TestUtil::SetAllFields(&message); 195 TestUtil::SetAllFields(&message);
183 TestUtil::ExpectAllFieldsSet(message); 196 TestUtil::ExpectAllFieldsSet(message);
184 197
185 TestUtil::ModifyRepeatedFields(&message); 198 TestUtil::ModifyRepeatedFields(&message);
186 TestUtil::ExpectRepeatedFieldsModified(message); 199 TestUtil::ExpectRepeatedFieldsModified(message);
187 } 200 }
188 201
189 TEST(GeneratedMessageTest, MutableStringDefault) { 202 TEST(GeneratedMessageTest, MutableStringDefault) {
190 // mutable_foo() for a string should return a string initialized to its 203 // mutable_foo() for a string should return a string initialized to its
191 // default value. 204 // default value.
192 unittest::TestAllTypes message; 205 unittest::TestAllTypes message;
193 206
194 EXPECT_EQ("hello", *message.mutable_default_string()); 207 EXPECT_EQ("hello", *message.mutable_default_string());
195 208
196 // Note that the first time we call mutable_foo(), we get a newly-allocated 209 // Note that the first time we call mutable_foo(), we get a newly-allocated
197 // string, but if we clear it and call it again, we get the same object again. 210 // string, but if we clear it and call it again, we get the same object again.
198 // We should verify that it has its default value in both cases. 211 // We should verify that it has its default value in both cases.
199 message.set_default_string("blah"); 212 message.set_default_string("blah");
200 message.Clear(); 213 message.Clear();
201 214
202 EXPECT_EQ("hello", *message.mutable_default_string()); 215 EXPECT_EQ("hello", *message.mutable_default_string());
203 } 216 }
204 217
218 TEST(GeneratedMessageTest, StringDefaults) {
219 unittest::TestExtremeDefaultValues message;
220 // Check if '\000' can be used in default string value.
221 EXPECT_EQ(string("hel\000lo", 6), message.string_with_zero());
222 EXPECT_EQ(string("wor\000ld", 6), message.bytes_with_zero());
223 }
224
205 TEST(GeneratedMessageTest, ReleaseString) { 225 TEST(GeneratedMessageTest, ReleaseString) {
206 // Check that release_foo() starts out NULL, and gives us a value 226 // Check that release_foo() starts out NULL, and gives us a value
207 // that we can delete after it's been set. 227 // that we can delete after it's been set.
208 unittest::TestAllTypes message; 228 unittest::TestAllTypes message;
209 229
210 EXPECT_EQ(NULL, message.release_default_string()); 230 EXPECT_EQ(NULL, message.release_default_string());
211 EXPECT_FALSE(message.has_default_string()); 231 EXPECT_FALSE(message.has_default_string());
212 EXPECT_EQ("hello", message.default_string()); 232 EXPECT_EQ("hello", message.default_string());
213 233
214 message.set_default_string("blah"); 234 message.set_default_string("blah");
(...skipping 22 matching lines...) Expand all
237 message.release_optional_nested_message(); 257 message.release_optional_nested_message();
238 EXPECT_FALSE(message.has_optional_nested_message()); 258 EXPECT_FALSE(message.has_optional_nested_message());
239 ASSERT_TRUE(nest != NULL); 259 ASSERT_TRUE(nest != NULL);
240 EXPECT_EQ(1, nest->bb()); 260 EXPECT_EQ(1, nest->bb());
241 delete nest; 261 delete nest;
242 262
243 EXPECT_EQ(NULL, message.release_optional_nested_message()); 263 EXPECT_EQ(NULL, message.release_optional_nested_message());
244 EXPECT_FALSE(message.has_optional_nested_message()); 264 EXPECT_FALSE(message.has_optional_nested_message());
245 } 265 }
246 266
267 TEST(GeneratedMessageTest, SetAllocatedString) {
268 // Check that set_allocated_foo() works for strings.
269 unittest::TestAllTypes message;
270
271 EXPECT_FALSE(message.has_optional_string());
272 const string kHello("hello");
273 message.set_optional_string(kHello);
274 EXPECT_TRUE(message.has_optional_string());
275
276 message.set_allocated_optional_string(NULL);
277 EXPECT_FALSE(message.has_optional_string());
278 EXPECT_EQ("", message.optional_string());
279
280 message.set_allocated_optional_string(new string(kHello));
281 EXPECT_TRUE(message.has_optional_string());
282 EXPECT_EQ(kHello, message.optional_string());
283 }
284
285 TEST(GeneratedMessageTest, SetAllocatedMessage) {
286 // Check that set_allocated_foo() can be called in all cases.
287 unittest::TestAllTypes message;
288
289 EXPECT_FALSE(message.has_optional_nested_message());
290
291 message.mutable_optional_nested_message()->set_bb(1);
292 EXPECT_TRUE(message.has_optional_nested_message());
293
294 message.set_allocated_optional_nested_message(NULL);
295 EXPECT_FALSE(message.has_optional_nested_message());
296 EXPECT_EQ(&unittest::TestAllTypes::NestedMessage::default_instance(),
297 &message.optional_nested_message());
298
299 message.mutable_optional_nested_message()->set_bb(1);
300 unittest::TestAllTypes::NestedMessage* nest =
301 message.release_optional_nested_message();
302 ASSERT_TRUE(nest != NULL);
303 EXPECT_FALSE(message.has_optional_nested_message());
304
305 message.set_allocated_optional_nested_message(nest);
306 EXPECT_TRUE(message.has_optional_nested_message());
307 EXPECT_EQ(1, message.optional_nested_message().bb());
308 }
309
247 TEST(GeneratedMessageTest, Clear) { 310 TEST(GeneratedMessageTest, Clear) {
248 // Set every field to a unique value, clear the message, then check that 311 // Set every field to a unique value, clear the message, then check that
249 // it is cleared. 312 // it is cleared.
250 unittest::TestAllTypes message; 313 unittest::TestAllTypes message;
251 314
252 TestUtil::SetAllFields(&message); 315 TestUtil::SetAllFields(&message);
253 message.Clear(); 316 message.Clear();
254 TestUtil::ExpectClear(message); 317 TestUtil::ExpectClear(message);
255 318
256 // Unlike with the defaults test, we do NOT expect that requesting embedded 319 // Unlike with the defaults test, we do NOT expect that requesting embedded
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 // test_bad_identifiers.proto successfully compiled, then it works. The 751 // test_bad_identifiers.proto successfully compiled, then it works. The
689 // following is just a token usage to insure that the code is, in fact, 752 // following is just a token usage to insure that the code is, in fact,
690 // being compiled and linked. 753 // being compiled and linked.
691 754
692 protobuf_unittest::TestConflictingSymbolNames message; 755 protobuf_unittest::TestConflictingSymbolNames message;
693 message.set_uint32(1); 756 message.set_uint32(1);
694 EXPECT_EQ(3, message.ByteSize()); 757 EXPECT_EQ(3, message.ByteSize());
695 758
696 message.set_friend_(5); 759 message.set_friend_(5);
697 EXPECT_EQ(5, message.friend_()); 760 EXPECT_EQ(5, message.friend_());
761
762 // Instantiate extension template functions to test conflicting template
763 // parameter names.
764 typedef protobuf_unittest::TestConflictingSymbolNamesExtension ExtensionMessag e;
765 message.AddExtension(ExtensionMessage::repeated_int32_ext, 123);
766 EXPECT_EQ(123,
767 message.GetExtension(ExtensionMessage::repeated_int32_ext, 0));
698 } 768 }
699 769
700 #ifndef PROTOBUF_TEST_NO_DESCRIPTORS 770 #ifndef PROTOBUF_TEST_NO_DESCRIPTORS
701 771
702 TEST(GeneratedMessageTest, TestOptimizedForSize) { 772 TEST(GeneratedMessageTest, TestOptimizedForSize) {
703 // We rely on the tests in reflection_ops_unittest and wire_format_unittest 773 // We rely on the tests in reflection_ops_unittest and wire_format_unittest
704 // to really test that reflection-based methods work. Here we are mostly 774 // to really test that reflection-based methods work. Here we are mostly
705 // just making sure that TestOptimizedForSize actually builds and seems to 775 // just making sure that TestOptimizedForSize actually builds and seems to
706 // function. 776 // function.
707 777
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 // Make sure we can take the address of _MIN, _MAX and _ARRAYSIZE. 932 // Make sure we can take the address of _MIN, _MAX and _ARRAYSIZE.
863 void* null_pointer = 0; // NULL may be integer-type, not pointer-type. 933 void* null_pointer = 0; // NULL may be integer-type, not pointer-type.
864 EXPECT_NE(null_pointer, &unittest::TestAllTypes::NestedEnum_MIN); 934 EXPECT_NE(null_pointer, &unittest::TestAllTypes::NestedEnum_MIN);
865 EXPECT_NE(null_pointer, &unittest::TestAllTypes::NestedEnum_MAX); 935 EXPECT_NE(null_pointer, &unittest::TestAllTypes::NestedEnum_MAX);
866 EXPECT_NE(null_pointer, &unittest::TestAllTypes::NestedEnum_ARRAYSIZE); 936 EXPECT_NE(null_pointer, &unittest::TestAllTypes::NestedEnum_ARRAYSIZE);
867 937
868 EXPECT_NE(null_pointer, &unittest::ForeignEnum_MIN); 938 EXPECT_NE(null_pointer, &unittest::ForeignEnum_MIN);
869 EXPECT_NE(null_pointer, &unittest::ForeignEnum_MAX); 939 EXPECT_NE(null_pointer, &unittest::ForeignEnum_MAX);
870 EXPECT_NE(null_pointer, &unittest::ForeignEnum_ARRAYSIZE); 940 EXPECT_NE(null_pointer, &unittest::ForeignEnum_ARRAYSIZE);
871 941
872 // Make sure we can use _MIN, _MAX and _ARRAYSIZE as switch cases. 942 // Make sure we can use _MIN and _MAX as switch cases.
873 switch (unittest::SPARSE_A) { 943 switch (unittest::SPARSE_A) {
874 case unittest::TestSparseEnum_MIN: 944 case unittest::TestSparseEnum_MIN:
875 case unittest::TestSparseEnum_MAX: 945 case unittest::TestSparseEnum_MAX:
876 case unittest::TestSparseEnum_ARRAYSIZE:
877 break; 946 break;
878 default: 947 default:
879 break; 948 break;
880 } 949 }
881 } 950 }
882 951
883 #ifndef PROTOBUF_TEST_NO_DESCRIPTORS 952 #ifndef PROTOBUF_TEST_NO_DESCRIPTORS
884 953
885 TEST(GeneratedEnumTest, Name) { 954 TEST(GeneratedEnumTest, Name) {
886 // "Names" in the presence of dup values are a bit arbitrary. 955 // "Names" in the presence of dup values are a bit arbitrary.
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
1272 DescriptorPool::generated_pool()->InternalIsFileLoaded( 1341 DescriptorPool::generated_pool()->InternalIsFileLoaded(
1273 "google/protobuf/unittest.proto")); 1342 "google/protobuf/unittest.proto"));
1274 } 1343 }
1275 1344
1276 } // namespace cpp_unittest 1345 } // namespace cpp_unittest
1277 1346
1278 } // namespace cpp 1347 } // namespace cpp
1279 } // namespace compiler 1348 } // namespace compiler
1280 } // namespace protobuf 1349 } // namespace protobuf
1281 } // namespace google 1350 } // namespace google
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698