blob: c736da76e34679e81d34719f2d5215c8b3cc35e7 [file] [edit]
#include "editions/edition_defaults_test_utils.h"
#include "google/protobuf/descriptor.pb.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
#include "google/protobuf/test_textproto.h"
namespace google {
namespace protobuf {
namespace compiler {
absl::optional<FeatureSetDefaults::FeatureSetEditionDefault> FindEditionDefault(
const FeatureSetDefaults& defaults, Edition edition) {
for (const auto& edition_default : defaults.defaults()) {
if (edition_default.edition() == edition) {
return edition_default;
}
}
return absl::nullopt;
}
namespace {
// TODO: Remove this function once test util Partially is available
// in OSS.
//
// Removes any EDITION_UNSTABLE entries from the defaults repeated field.
FeatureSetDefaults ScrubUnstable(const FeatureSetDefaults& defaults) {
FeatureSetDefaults result = defaults;
auto* mutable_defaults = result.mutable_defaults();
for (int i = 0; i < mutable_defaults->size(); ++i) {
if (mutable_defaults->Get(i).edition() == EDITION_UNSTABLE) {
mutable_defaults->DeleteSubrange(i, 1);
--i;
}
}
return result;
}
} // namespace
// Partially matches FeatureSetDefaults against a textproto for the purpose of
// ignoring defaults for EDITION_UNSTABLE.
::testing::Matcher<FeatureSetDefaults> PartiallyMatchesEditionDefaults(
absl::string_view expected_textproto) {
return ::testing::ResultOf(ScrubUnstable,
::google::protobuf::EqualsProto(expected_textproto));
}
} // namespace compiler
} // namespace protobuf
} // namespace google