blob: 1f3202cbce39540383eb05ac2e38cfbfe41394fc [file] [log] [blame]
#include "google/protobuf/compiler/rust/enum.h"
#include <cstdint>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "absl/strings/string_view.h"
namespace {
using ::google::protobuf::compiler::rust::EnumValues;
using ::google::protobuf::compiler::rust::RustEnumValue;
using ::testing::AllOf;
using ::testing::ElementsAre;
using ::testing::Eq;
using ::testing::Field;
using ::testing::IsEmpty;
template <class Aliases>
auto EnumValue(absl::string_view name, int32_t number, Aliases aliases) {
return AllOf(Field("name", &RustEnumValue::name, Eq(name)),
Field("number", &RustEnumValue::number, Eq(number)),
Field("aliases", &RustEnumValue::aliases, aliases));
}
auto EnumValue(absl::string_view name, int32_t number) {
return EnumValue(name, number, IsEmpty());
}
TEST(EnumTest, EnumValues) {
EXPECT_THAT(EnumValues("Enum", {{"ENUM_FOO", 1}, {"ENUM_BAR", 2}}),
ElementsAre(EnumValue("Foo", 1), EnumValue("Bar", 2)));
EXPECT_THAT(EnumValues("Enum", {{"FOO", 1}, {"ENUM_BAR", 2}}),
ElementsAre(EnumValue("Foo", 1), EnumValue("Bar", 2)));
EXPECT_THAT(EnumValues("Enum", {{"enumFOO", 1}, {"eNuM_BaR", 2}}),
ElementsAre(EnumValue("Foo", 1), EnumValue("Bar", 2)));
EXPECT_THAT(EnumValues("Enum", {{"ENUM_ENUM_UNKNOWN", 1}, {"ENUM_ENUM", 2}}),
ElementsAre(EnumValue("EnumUnknown", 1), EnumValue("Enum", 2)));
EXPECT_THAT(EnumValues("Enum", {{"ENUM_VAL", 1}, {"ENUM_ALIAS", 1}}),
ElementsAre(EnumValue("Val", 1, ElementsAre("Alias"))));
EXPECT_THAT(
EnumValues("Enum",
{{"ENUM_VAL", 1}, {"ENUM_ALIAS", 1}, {"ENUM_ALIAS2", 1}}),
ElementsAre(EnumValue("Val", 1, ElementsAre("Alias", "Alias2"))));
EXPECT_THAT(EnumValues("Enum", {{"ENUM_ENUM", 1}, {"ENUM", 1}}),
ElementsAre(EnumValue("Enum", 1, IsEmpty())));
}
} // namespace