| #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 |