annotation_test.cxx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include "gmock/gmock-matchers.h"
  2. #include <string_view>
  3. #include <gmock/gmock.h>
  4. #include <gtest/gtest.h>
  5. #include <jvalidate/adapter.h>
  6. #include <jvalidate/adapters/jsoncpp.h>
  7. #include <jvalidate/detail/pointer.h>
  8. #include <jvalidate/enum.h>
  9. #include <jvalidate/schema.h>
  10. #include <jvalidate/status.h>
  11. #include <jvalidate/uri.h>
  12. #include <jvalidate/validation_result.h>
  13. #include <jvalidate/validator.h>
  14. #include <json/reader.h>
  15. #include <json/value.h>
  16. using enum jvalidate::schema::Version;
  17. auto operator""_jptr(char const * data, size_t len) {
  18. return jvalidate::detail::Pointer(std::string_view{data, len});
  19. }
  20. Json::Value operator""_json(char const * data, size_t len) {
  21. Json::Value value;
  22. Json::CharReaderBuilder builder;
  23. std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
  24. std::string error;
  25. if (not reader->parse(data, data + len, &value, &error)) {
  26. throw std::runtime_error(error);
  27. }
  28. return value;
  29. }
  30. MATCHER_P(HasAnnotationsFor, doc_path, "") { return arg.has_annotation(doc_path); }
  31. MATCHER_P2(HasAnnotationAt, doc_path, schema_path, "") {
  32. return arg.has_annotation(doc_path, schema_path);
  33. }
  34. MATCHER_P3(AnnotationAt, doc_path, schema_path, matcher, "") {
  35. auto const * anno = arg.annotation(doc_path, schema_path);
  36. if (not anno) {
  37. return false;
  38. }
  39. return testing::ExplainMatchResult(matcher, *anno, result_listener);
  40. }
  41. TEST(Annotation, AttachesFormattingAnnotation) {
  42. jvalidate::Schema const schema(R"({
  43. "format": "uri"
  44. })"_json,
  45. Draft2020_12);
  46. auto const instance = R"("http://json-schema.org")"_json;
  47. jvalidate::ValidationResult result;
  48. bool const valid = jvalidate::Validator(schema).validate(instance, &result);
  49. EXPECT_TRUE(valid);
  50. EXPECT_THAT(result, AnnotationAt(""_jptr, "/format"_jptr, "format 'uri'"));
  51. }
  52. int main(int argc, char ** argv) {
  53. testing::InitGoogleMock(&argc, argv);
  54. return RUN_ALL_TESTS();
  55. }