#include <google/protobuf/stubs/logging.h>
#include <google/protobuf/stubs/common.h>
#include <google/protobuf/field_mask.pb.h>
-#include <google/protobuf/unittest.pb.h>
#include <google/protobuf/test_util.h>
+#include <google/protobuf/unittest.pb.h>
#include <gtest/gtest.h>
namespace google {
class SnakeCaseCamelCaseTest : public ::testing::Test {
protected:
- string SnakeCaseToCamelCase(const string& input) {
- string output;
+ string SnakeCaseToCamelCase(const std::string& input) {
+ std::string output;
if (FieldMaskUtil::SnakeCaseToCamelCase(input, &output)) {
return output;
} else {
}
}
- string CamelCaseToSnakeCase(const string& input) {
- string output;
+ string CamelCaseToSnakeCase(const std::string& input) {
+ std::string output;
if (FieldMaskUtil::CamelCaseToSnakeCase(input, &output)) {
return output;
} else {
TEST_F(SnakeCaseCamelCaseTest, RoundTripTest) {
// Enumerates all possible snake_case names and test that converting it to
// camelCase and then to snake_case again will yield the original name.
- string name = "___abc123";
+ std::string name = "___abc123";
std::sort(name.begin(), name.end());
do {
- string camelName = SnakeCaseToCamelCase(name);
+ std::string camelName = SnakeCaseToCamelCase(name);
if (camelName != "#FAIL#") {
EXPECT_EQ(name, CamelCaseToSnakeCase(camelName));
}
name = "abcABC123";
std::sort(name.begin(), name.end());
do {
- string camelName = CamelCaseToSnakeCase(name);
+ std::string camelName = CamelCaseToSnakeCase(name);
if (camelName != "#FAIL#") {
EXPECT_EQ(name, SnakeCaseToCamelCase(camelName));
}
} while (std::next_permutation(name.begin(), name.end()));
}
+using google::protobuf::FieldMask;
+using protobuf_unittest::NestedTestAllTypes;
using protobuf_unittest::TestAllTypes;
using protobuf_unittest::TestRequired;
using protobuf_unittest::TestRequiredMessage;
-using protobuf_unittest::NestedTestAllTypes;
-using google::protobuf::FieldMask;
TEST(FieldMaskUtilTest, StringFormat) {
FieldMask mask;
TEST(FieldMaskUtilTest, JsonStringFormat) {
FieldMask mask;
- string value;
+ std::string value;
EXPECT_TRUE(FieldMaskUtil::ToJsonString(mask, &value));
EXPECT_EQ("", value);
mask.add_paths("foo_bar");
required_msg_2.clear_repeated_message();
required_msg_2.mutable_required_message()->clear_dummy2();
FieldMaskUtil::TrimMessage(mask, &trimmed_required_msg_2, options);
- EXPECT_EQ(trimmed_required_msg_2.DebugString(),
- required_msg_2.DebugString());
+ EXPECT_EQ(trimmed_required_msg_2.DebugString(), required_msg_2.DebugString());
FieldMaskUtil::FromString("required_message", &mask);
required_msg_2.mutable_required_message()->set_dummy2(7890);
trimmed_required_msg_2.mutable_required_message()->set_dummy2(7890);
required_msg_2.clear_optional_message();
FieldMaskUtil::TrimMessage(mask, &trimmed_required_msg_2, options);
- EXPECT_EQ(trimmed_required_msg_2.DebugString(),
- required_msg_2.DebugString());
+ EXPECT_EQ(trimmed_required_msg_2.DebugString(), required_msg_2.DebugString());
// Test trim required message with keep_required_fields is set false.
FieldMaskUtil::FromString("required_message.dummy2", &mask);
required_msg_2.mutable_required_message()->clear_c();
options.set_keep_required_fields(false);
FieldMaskUtil::TrimMessage(mask, &trimmed_required_msg_2, options);
- EXPECT_EQ(trimmed_required_msg_2.DebugString(),
- required_msg_2.DebugString());
+ EXPECT_EQ(trimmed_required_msg_2.DebugString(), required_msg_2.DebugString());
// Verify that trimming an empty message has no effect. In particular, fields
// mentioned in the field mask should not be created or changed.
EXPECT_EQ(11, oneof_msg.oneof_uint32());
}
+TEST(FieldMaskUtilTest, TrimMessageReturnValue) {
+ FieldMask mask;
+ TestAllTypes trimed_msg;
+ TestAllTypes default_msg;
+
+ // Field mask on optional field.
+ FieldMaskUtil::FromString("optional_int32", &mask);
+
+ // Verify that if a message is updted by FieldMaskUtil::TrimMessage(), the
+ // function returns true.
+ // Test on primary field.
+ trimed_msg.set_optional_string("abc");
+ EXPECT_TRUE(FieldMaskUtil::TrimMessage(mask, &trimed_msg));
+ EXPECT_EQ(trimed_msg.DebugString(), default_msg.DebugString());
+ trimed_msg.Clear();
+
+ // Test on repeated primary field.
+ trimed_msg.add_repeated_string("abc");
+ trimed_msg.add_repeated_string("def");
+ EXPECT_TRUE(FieldMaskUtil::TrimMessage(mask, &trimed_msg));
+ EXPECT_EQ(trimed_msg.DebugString(), default_msg.DebugString());
+ trimed_msg.Clear();
+
+ // Test on nested message.
+ trimed_msg.mutable_optional_nested_message()->set_bb(123);
+ EXPECT_TRUE(FieldMaskUtil::TrimMessage(mask, &trimed_msg));
+ EXPECT_EQ(trimed_msg.DebugString(), default_msg.DebugString());
+ trimed_msg.Clear();
+
+ // Test on repeated nested message.
+ trimed_msg.add_repeated_nested_message()->set_bb(123);
+ trimed_msg.add_repeated_nested_message()->set_bb(456);
+ EXPECT_TRUE(FieldMaskUtil::TrimMessage(mask, &trimed_msg));
+ EXPECT_EQ(trimed_msg.DebugString(), default_msg.DebugString());
+ trimed_msg.Clear();
+
+ // Test on oneof field.
+ trimed_msg.set_oneof_uint32(123);
+ EXPECT_TRUE(FieldMaskUtil::TrimMessage(mask, &trimed_msg));
+ EXPECT_EQ(trimed_msg.DebugString(), default_msg.DebugString());
+ trimed_msg.Clear();
+
+ // If there is no field set other then those whitelisted,
+ // FieldMaskUtil::TrimMessage() should return false.
+ trimed_msg.set_optional_int32(123);
+ EXPECT_FALSE(FieldMaskUtil::TrimMessage(mask, &trimed_msg));
+ EXPECT_EQ(trimed_msg.optional_int32(), 123);
+ trimed_msg.Clear();
+
+ // Field mask on repated field.
+ FieldMaskUtil::FromString("repeated_string", &mask);
+ trimed_msg.add_repeated_string("abc");
+ trimed_msg.add_repeated_string("def");
+ EXPECT_FALSE(FieldMaskUtil::TrimMessage(mask, &trimed_msg));
+ EXPECT_EQ(trimed_msg.repeated_string(0), "abc");
+ EXPECT_EQ(trimed_msg.repeated_string(1), "def");
+ trimed_msg.Clear();
+
+ // Field mask on nested message.
+ FieldMaskUtil::FromString("optional_nested_message.bb", &mask);
+ trimed_msg.mutable_optional_nested_message()->set_bb(123);
+ EXPECT_FALSE(FieldMaskUtil::TrimMessage(mask, &trimed_msg));
+ EXPECT_EQ(trimed_msg.optional_nested_message().bb(), 123);
+ trimed_msg.Clear();
+
+ // TODO(b/32443320): field mask on repeated nested message is not yet
+ // supported.
+}
+
} // namespace
} // namespace util