proto.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #pragma once
  2. #include <util/generic/hash_set.h>
  3. #include <util/generic/string.h>
  4. #include <util/system/defaults.h>
  5. namespace NProtobufJsonTest {
  6. template <typename TProto>
  7. inline void
  8. FillFlatProto(TProto* proto,
  9. const THashSet<TString>& skippedFields = THashSet<TString>()) {
  10. #define DEFINE_FIELD(name, value) \
  11. if (skippedFields.find(#name) == skippedFields.end()) \
  12. proto->Set##name(value);
  13. #include <library/cpp/protobuf/json/ut/fields.incl>
  14. #undef DEFINE_FIELD
  15. }
  16. template <typename TRepeatedField, typename TValue>
  17. inline void
  18. AddValue(TRepeatedField* field, TValue value) {
  19. field->Add(value);
  20. }
  21. inline void
  22. AddValue(google::protobuf::RepeatedPtrField<TString>* field, const TString& value) {
  23. *(field->Add()) = value;
  24. }
  25. inline void
  26. FillRepeatedProto(TFlatRepeated* proto,
  27. const THashSet<TString>& skippedFields = THashSet<TString>()) {
  28. #define DEFINE_REPEATED_FIELD(name, type, ...) \
  29. if (skippedFields.find(#name) == skippedFields.end()) { \
  30. type values[] = {__VA_ARGS__}; \
  31. for (size_t i = 0, end = Y_ARRAY_SIZE(values); i < end; ++i) { \
  32. AddValue(proto->Mutable##name(), values[i]); \
  33. } \
  34. }
  35. #include <library/cpp/protobuf/json/ut/repeated_fields.incl>
  36. #undef DEFINE_REPEATED_FIELD
  37. }
  38. template <typename TProto>
  39. inline void
  40. FillCompositeProto(TProto* proto, const THashSet<TString>& skippedFields = THashSet<TString>()) {
  41. FillFlatProto(proto->MutablePart(), skippedFields);
  42. }
  43. #define UNIT_ASSERT_PROTOS_EQUAL(lhs, rhs) \
  44. do { \
  45. if (lhs.SerializeAsString() != rhs.SerializeAsString()) { \
  46. Cerr << ">>>>>>>>>> lhs != rhs:" << Endl; \
  47. Cerr << lhs.DebugString() << Endl; \
  48. Cerr << rhs.DebugString() << Endl; \
  49. UNIT_ASSERT_STRINGS_EQUAL(lhs.DebugString(), rhs.DebugString()); \
  50. UNIT_ASSERT_STRINGS_EQUAL(lhs.SerializeAsString(), rhs.SerializeAsString()); \
  51. } \
  52. } while (false);
  53. }