blob: b06acd5696b48f7663bcb5848474ca3fa4b44381 [file] [log] [blame]
// Protocol Buffers - Google's data interchange format
// Copyright 2014 Google Inc. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
#include <memory>
#include "google/protobuf/any.pb.h"
#include "google/protobuf/compiler/command_line_interface.h"
#include <gtest/gtest.h>
#include "google/protobuf/compiler/csharp/csharp_helpers.h"
#include "google/protobuf/descriptor.pb.h"
#include "google/protobuf/io/printer.h"
#include "google/protobuf/io/zero_copy_stream.h"
namespace google {
namespace protobuf {
namespace compiler {
namespace csharp {
namespace {
TEST(CSharpEnumValue, PascalCasedPrefixStripping) {
EXPECT_EQ("Bar", GetEnumValueName("Foo", "BAR"));
EXPECT_EQ("BarBaz", GetEnumValueName("Foo", "BAR_BAZ"));
EXPECT_EQ("Bar", GetEnumValueName("Foo", "FOO_BAR"));
EXPECT_EQ("Bar", GetEnumValueName("Foo", "FOO__BAR"));
EXPECT_EQ("BarBaz", GetEnumValueName("Foo", "FOO_BAR_BAZ"));
EXPECT_EQ("BarBaz", GetEnumValueName("Foo", "Foo_BarBaz"));
EXPECT_EQ("Bar", GetEnumValueName("FO_O", "FOO_BAR"));
EXPECT_EQ("Bar", GetEnumValueName("FOO", "F_O_O_BAR"));
EXPECT_EQ("Bar", GetEnumValueName("Foo", "BAR"));
EXPECT_EQ("BarBaz", GetEnumValueName("Foo", "BAR_BAZ"));
EXPECT_EQ("Foo", GetEnumValueName("Foo", "FOO"));
EXPECT_EQ("Foo", GetEnumValueName("Foo", "FOO___"));
// Identifiers can't start with digits
EXPECT_EQ("_2Bar", GetEnumValueName("Foo", "FOO_2_BAR"));
EXPECT_EQ("_2", GetEnumValueName("Foo", "FOO___2"));
}
TEST(DescriptorProtoHelpers, IsDescriptorProto) {
EXPECT_TRUE(IsDescriptorProto(DescriptorProto::descriptor()->file()));
EXPECT_FALSE(IsDescriptorProto(google::protobuf::Any::descriptor()->file()));
}
TEST(DescriptorProtoHelpers, IsDescriptorOptionMessage) {
EXPECT_TRUE(IsDescriptorOptionMessage(FileOptions::descriptor()));
EXPECT_FALSE(IsDescriptorOptionMessage(google::protobuf::Any::descriptor()));
EXPECT_FALSE(IsDescriptorOptionMessage(DescriptorProto::descriptor()));
}
TEST(CSharpIdentifiers, UnderscoresToCamelCase) {
EXPECT_EQ("FooBar", UnderscoresToCamelCase("Foo_Bar", true));
EXPECT_EQ("fooBar", UnderscoresToCamelCase("FooBar", false));
EXPECT_EQ("foo123", UnderscoresToCamelCase("foo_123", false));
// remove leading underscores
EXPECT_EQ("Foo123", UnderscoresToCamelCase("_Foo_123", true));
// this one has slight unexpected output as it capitalises the first
// letter after consuming the underscores, but this was the existing
// behaviour so I have not changed it
EXPECT_EQ("FooBar", UnderscoresToCamelCase("___fooBar", false));
// leave a leading underscore for identifiers that would otherwise
// be invalid because they would start with a digit
EXPECT_EQ("_123Foo", UnderscoresToCamelCase("_123_foo", true));
EXPECT_EQ("_123Foo", UnderscoresToCamelCase("___123_foo", true));
}
} // namespace
} // namespace csharp
} // namespace compiler
} // namespace protobuf
} // namespace google