39 #include <google/protobuf/unittest.pb.h>
69 TEST_F(SnakeCaseCamelCaseTest, SnakeToCamel) {
70 EXPECT_EQ(
"fooBar", SnakeCaseToCamelCase(
"foo_bar"));
71 EXPECT_EQ(
"FooBar", SnakeCaseToCamelCase(
"_foo_bar"));
72 EXPECT_EQ(
"foo3Bar", SnakeCaseToCamelCase(
"foo3_bar"));
74 EXPECT_EQ(
"#FAIL#", SnakeCaseToCamelCase(
"Foo"));
79 EXPECT_EQ(
"#FAIL#", SnakeCaseToCamelCase(
"foo__bar"));
80 EXPECT_EQ(
"#FAIL#", SnakeCaseToCamelCase(
"foo_3bar"));
81 EXPECT_EQ(
"#FAIL#", SnakeCaseToCamelCase(
"foo_bar_"));
84 TEST_F(SnakeCaseCamelCaseTest, CamelToSnake) {
85 EXPECT_EQ(
"foo_bar", CamelCaseToSnakeCase(
"fooBar"));
86 EXPECT_EQ(
"_foo_bar", CamelCaseToSnakeCase(
"FooBar"));
87 EXPECT_EQ(
"foo3_bar", CamelCaseToSnakeCase(
"foo3Bar"));
89 EXPECT_EQ(
"#FAIL#", CamelCaseToSnakeCase(
"foo_bar"));
92 TEST_F(SnakeCaseCamelCaseTest, RoundTripTest) {
99 if (camelName !=
"#FAIL#") {
102 }
while (std::next_permutation(
name.begin(),
name.end()));
107 std::sort(
name.begin(),
name.end());
110 if (camelName !=
"#FAIL#") {
113 }
while (std::next_permutation(
name.begin(),
name.end()));
117 using protobuf_unittest::NestedTestAllTypes;
118 using protobuf_unittest::TestAllTypes;
119 using protobuf_unittest::TestRequired;
120 using protobuf_unittest::TestRequiredMessage;
122 TEST(FieldMaskUtilTest, StringFormat) {
125 mask.add_paths(
"foo_bar");
127 mask.add_paths(
"baz_quz");
141 TEST(FieldMaskUtilTest, JsonStringFormat) {
146 mask.add_paths(
"foo_bar");
149 mask.add_paths(
"bar_quz");
164 TEST(FieldMaskUtilTest, GetFieldDescriptors) {
165 std::vector<const FieldDescriptor*> field_descriptors;
173 "optional_nested_message.bb",
174 &field_descriptors));
176 EXPECT_EQ(
"optional_nested_message", field_descriptors[0]->
name());
185 TEST(FieldMaskUtilTest, TestIsVaildPath) {
186 EXPECT_TRUE(FieldMaskUtil::IsValidPath<TestAllTypes>(
"optional_int32"));
187 EXPECT_FALSE(FieldMaskUtil::IsValidPath<TestAllTypes>(
"optional_nonexist"));
189 FieldMaskUtil::IsValidPath<TestAllTypes>(
"optional_nested_message.bb"));
191 "optional_nested_message.nonexist"));
194 FieldMaskUtil::IsValidPath<TestAllTypes>(
"repeated_nested_message.bb"));
197 TEST(FieldMaskUtilTest, TestIsValidFieldMask) {
203 "optional_int32,optional_nested_message.bb,optional_nonexist", &
mask);
207 TEST(FieldMaskUtilTest, TestGetFieldMaskForAllFields) {
209 mask = FieldMaskUtil::GetFieldMaskForAllFields<TestAllTypes::NestedMessage>();
213 mask = FieldMaskUtil::GetFieldMaskForAllFields<TestAllTypes>();
265 TEST(FieldMaskUtilTest, TestToCanonicalForm) {
313 TEST(FieldMaskUtilTest, TestUnion) {
332 TEST(FieldMaskUtilTest, TestIntersect) {
351 TEST(FieldMaskUtilTest, TestSubtract) {
355 "optional_int32,optional_uint64,optional_nested_message,optional_foreign_"
356 "message,repeated_int32,repeated_foreign_message,repeated_nested_message."
361 "optional_int32,optional_nested_message.bb,optional_foreign_message.c,"
362 "repeated_int32,repeated_nested_message.bb,repeated_foreign_message.f,"
363 "repeated_foreign_message.d,repeated_nested_message.bb,repeated_uint32",
366 FieldMaskUtil::Subtract<TestAllTypes>(mask1, mask2, &out);
368 "optional_foreign_message.d,optional_uint64,repeated_foreign_message.c",
373 FieldMaskUtil::Subtract<TestAllTypes>(mask1, mask2, &out);
380 FieldMaskUtil::Subtract<TestAllTypes>(mask1, mask2, &out);
387 FieldMaskUtil::Subtract<TestAllTypes>(mask1, mask2, &out);
394 FieldMaskUtil::Subtract<TestAllTypes>(mask1, mask2, &out);
398 TEST(FieldMaskUtilTest, TestIspathInFieldMask) {
408 TEST(FieldMaskUtilTest, MergeMessage) {
413 #define TEST_MERGE_ONE_PRIMITIVE_FIELD(field_name) \
416 tmp.set_##field_name(src.field_name()); \
418 mask.add_paths(#field_name); \
420 FieldMaskUtil::MergeMessageTo(src, mask, options, &dst); \
421 EXPECT_EQ(tmp.DebugString(), dst.DebugString()); \
422 src.clear_##field_name(); \
423 tmp.clear_##field_name(); \
424 FieldMaskUtil::MergeMessageTo(src, mask, options, &dst); \
425 EXPECT_EQ(tmp.DebugString(), dst.DebugString()); \
445 #undef TEST_MERGE_ONE_PRIMITIVE_FIELD
447 #define TEST_MERGE_ONE_FIELD(field_name) \
450 *tmp.mutable_##field_name() = src.field_name(); \
452 mask.add_paths(#field_name); \
454 FieldMaskUtil::MergeMessageTo(src, mask, options, &dst); \
455 EXPECT_EQ(tmp.DebugString(), dst.DebugString()); \
482 #undef TEST_MERGE_ONE_FIELD
485 NestedTestAllTypes nested_src, nested_dst;
486 nested_src.mutable_child()->mutable_payload()->set_optional_int32(1234);
487 nested_src.mutable_child()
490 ->set_optional_int32(5678);
494 EXPECT_EQ(1234, nested_dst.child().payload().optional_int32());
495 EXPECT_EQ(0, nested_dst.child().child().payload().optional_int32());
499 EXPECT_EQ(1234, nested_dst.child().payload().optional_int32());
500 EXPECT_EQ(5678, nested_dst.child().child().payload().optional_int32());
505 EXPECT_EQ(0, nested_dst.child().payload().optional_int32());
506 EXPECT_EQ(5678, nested_dst.child().child().payload().optional_int32());
511 EXPECT_EQ(1234, nested_dst.child().payload().optional_int32());
512 EXPECT_EQ(5678, nested_dst.child().child().payload().optional_int32());
517 nested_dst.mutable_child()->mutable_payload()->set_optional_int64(4321);
521 EXPECT_EQ(1234, nested_dst.child().payload().optional_int32());
522 EXPECT_EQ(4321, nested_dst.child().payload().optional_int64());
524 options.set_replace_message_fields(
true);
527 EXPECT_EQ(1234, nested_dst.child().payload().optional_int32());
528 EXPECT_EQ(0, nested_dst.child().payload().optional_int64());
531 options.set_replace_message_fields(
false);
532 nested_dst.mutable_payload();
538 options.set_replace_message_fields(
true);
540 nested_dst.mutable_payload();
545 nested_src.mutable_payload()->add_repeated_int32(1234);
546 nested_dst.mutable_payload()->add_repeated_int32(5678);
550 ASSERT_EQ(2, nested_dst.payload().repeated_int32_size());
551 EXPECT_EQ(5678, nested_dst.payload().repeated_int32(0));
552 EXPECT_EQ(1234, nested_dst.payload().repeated_int32(1));
554 options.set_replace_repeated_fields(
true);
557 ASSERT_EQ(1, nested_dst.payload().repeated_int32_size());
558 EXPECT_EQ(1234, nested_dst.payload().repeated_int32(0));
561 TEST(FieldMaskUtilTest, TrimMessage) {
562 #define TEST_TRIM_ONE_PRIMITIVE_FIELD(field_name) \
565 TestUtil::SetAllFields(&msg); \
567 tmp.set_##field_name(msg.field_name()); \
569 mask.add_paths(#field_name); \
570 FieldMaskUtil::TrimMessage(mask, &msg); \
571 EXPECT_EQ(tmp.DebugString(), msg.DebugString()); \
591 #undef TEST_TRIM_ONE_PRIMITIVE_FIELD
593 #define TEST_TRIM_ONE_FIELD(field_name) \
596 TestUtil::SetAllFields(&msg); \
598 *tmp.mutable_##field_name() = msg.field_name(); \
600 mask.add_paths(#field_name); \
601 FieldMaskUtil::TrimMessage(mask, &msg); \
602 EXPECT_EQ(tmp.DebugString(), msg.DebugString()); \
629 #undef TEST_TRIM_ONE_FIELD
632 NestedTestAllTypes nested_msg;
633 nested_msg.mutable_child()->mutable_payload()->set_optional_int32(1234);
634 nested_msg.mutable_child()
637 ->set_optional_int32(5678);
638 NestedTestAllTypes trimmed_msg(nested_msg);
642 EXPECT_EQ(1234, trimmed_msg.child().payload().optional_int32());
643 EXPECT_EQ(0, trimmed_msg.child().child().payload().optional_int32());
645 trimmed_msg = nested_msg;
648 EXPECT_EQ(0, trimmed_msg.child().payload().optional_int32());
649 EXPECT_EQ(5678, trimmed_msg.child().child().payload().optional_int32());
651 trimmed_msg = nested_msg;
654 EXPECT_EQ(1234, trimmed_msg.child().payload().optional_int32());
655 EXPECT_EQ(5678, trimmed_msg.child().child().payload().optional_int32());
657 trimmed_msg = nested_msg;
660 EXPECT_EQ(0, trimmed_msg.child().payload().optional_int32());
661 EXPECT_EQ(5678, trimmed_msg.child().child().payload().optional_int32());
664 TestAllTypes all_types_msg;
666 TestAllTypes trimmed_all_types(all_types_msg);
669 EXPECT_EQ(trimmed_all_types.DebugString(), all_types_msg.DebugString());
673 TestRequired required_msg_1;
674 required_msg_1.set_a(1234);
675 required_msg_1.set_b(3456);
676 required_msg_1.set_c(5678);
677 TestRequired trimmed_required_msg_1(required_msg_1);
679 options.set_keep_required_fields(
true);
681 EXPECT_EQ(trimmed_required_msg_1.DebugString(), required_msg_1.DebugString());
684 required_msg_1.clear_a();
685 required_msg_1.clear_b();
686 required_msg_1.clear_c();
687 options.set_keep_required_fields(
false);
689 EXPECT_EQ(trimmed_required_msg_1.DebugString(), required_msg_1.DebugString());
692 TestRequiredMessage required_msg_2;
693 required_msg_2.mutable_optional_message()->set_a(1234);
694 required_msg_2.mutable_optional_message()->set_b(3456);
695 required_msg_2.mutable_optional_message()->set_c(5678);
696 required_msg_2.mutable_required_message()->set_a(1234);
697 required_msg_2.mutable_required_message()->set_b(3456);
698 required_msg_2.mutable_required_message()->set_c(5678);
699 required_msg_2.mutable_required_message()->set_dummy2(7890);
700 TestRequired* repeated_msg = required_msg_2.add_repeated_message();
701 repeated_msg->set_a(1234);
702 repeated_msg->set_b(3456);
703 repeated_msg->set_c(5678);
704 TestRequiredMessage trimmed_required_msg_2(required_msg_2);
706 options.set_keep_required_fields(
true);
707 required_msg_2.clear_repeated_message();
708 required_msg_2.mutable_required_message()->clear_dummy2();
710 EXPECT_EQ(trimmed_required_msg_2.DebugString(), required_msg_2.DebugString());
713 required_msg_2.mutable_required_message()->set_dummy2(7890);
714 trimmed_required_msg_2.mutable_required_message()->set_dummy2(7890);
715 required_msg_2.clear_optional_message();
717 EXPECT_EQ(trimmed_required_msg_2.DebugString(), required_msg_2.DebugString());
721 required_msg_2.mutable_required_message()->clear_a();
722 required_msg_2.mutable_required_message()->clear_b();
723 required_msg_2.mutable_required_message()->clear_c();
724 options.set_keep_required_fields(
false);
726 EXPECT_EQ(trimmed_required_msg_2.DebugString(), required_msg_2.DebugString());
730 TestAllTypes empty_msg;
732 "optional_int32,optional_bytes,optional_nested_message.bb", &
mask);
740 TestAllTypes oneof_msg;
741 oneof_msg.set_oneof_uint32(11);
747 TEST(FieldMaskUtilTest, TrimMessageReturnValue) {
749 TestAllTypes trimed_msg;
750 TestAllTypes default_msg;
758 trimed_msg.set_optional_string(
"abc");
760 EXPECT_EQ(trimed_msg.DebugString(), default_msg.DebugString());
764 trimed_msg.add_repeated_string(
"abc");
765 trimed_msg.add_repeated_string(
"def");
767 EXPECT_EQ(trimed_msg.DebugString(), default_msg.DebugString());
771 trimed_msg.mutable_optional_nested_message()->set_bb(123);
773 EXPECT_EQ(trimed_msg.DebugString(), default_msg.DebugString());
777 trimed_msg.add_repeated_nested_message()->set_bb(123);
778 trimed_msg.add_repeated_nested_message()->set_bb(456);
780 EXPECT_EQ(trimed_msg.DebugString(), default_msg.DebugString());
784 trimed_msg.set_oneof_uint32(123);
786 EXPECT_EQ(trimed_msg.DebugString(), default_msg.DebugString());
791 trimed_msg.set_optional_int32(123);
793 EXPECT_EQ(trimed_msg.optional_int32(), 123);
798 trimed_msg.add_repeated_string(
"abc");
799 trimed_msg.add_repeated_string(
"def");
801 EXPECT_EQ(trimed_msg.repeated_string(0),
"abc");
802 EXPECT_EQ(trimed_msg.repeated_string(1),
"def");
807 trimed_msg.mutable_optional_nested_message()->set_bb(123);
809 EXPECT_EQ(trimed_msg.optional_nested_message().bb(), 123);