|
|
@@ -21,8 +21,8 @@ using JsonCppAdapter = jvalidate::adapter::JsonCppAdapter<Json::Value const>;
|
|
|
using jvalidate::adapter::Type;
|
|
|
|
|
|
using testing::Eq;
|
|
|
+using testing::HasSubstr;
|
|
|
using testing::Test;
|
|
|
-using testing::ThrowsMessage;
|
|
|
using testing::Types;
|
|
|
using testing::VariantWith;
|
|
|
|
|
|
@@ -50,65 +50,58 @@ TEST(PointerTest, BackCoercesIntToString) {
|
|
|
TEST(PointerTest, BackIsEmptySafe) { EXPECT_THAT(""_jptr.back(), ""); }
|
|
|
|
|
|
TEST(PointerTest, ForbidsBadTilde) {
|
|
|
- EXPECT_NO_THROW("/~1"_jptr);
|
|
|
- EXPECT_THROW("/~2"_jptr, std::runtime_error);
|
|
|
+ EXPECT_THAT(Pointer::parse("/~1"), Expected(testing::_));
|
|
|
+ EXPECT_THAT(Pointer::parse("/~2"), Unexpected(HasSubstr("illegal tilde")));
|
|
|
}
|
|
|
|
|
|
TEST(PointerTest, CanConcatenate) { EXPECT_THAT("/A"_jptr / "/B"_jptr, "/A/B"_jptr); }
|
|
|
|
|
|
TEST(PointerTest, CanGoToParent) { EXPECT_THAT("/A/B"_jptr / parent, "/A"_jptr); }
|
|
|
|
|
|
-TEST(PointerTest, Print) { EXPECT_THAT(testing::PrintToString(Pointer("/B/0/A")), "/B/0/A"); }
|
|
|
+TEST(PointerTest, Print) { EXPECT_THAT(testing::PrintToString("/B/0/A"_jptr), "/B/0/A"); }
|
|
|
|
|
|
TEST(RelatvivePointerTest, CannotPrefixWithZero) {
|
|
|
- EXPECT_THROW(RelativePointer("01"), std::runtime_error);
|
|
|
+ EXPECT_THAT(RelativePointer::parse("01"), Unexpected("Cannot zero-prefix a relative pointer"));
|
|
|
}
|
|
|
|
|
|
TEST(RelatvivePointerTest, Print) {
|
|
|
- EXPECT_THAT(testing::PrintToString(RelativePointer("0")), "0");
|
|
|
- EXPECT_THAT(testing::PrintToString(RelativePointer("1#")), "1#");
|
|
|
- EXPECT_THAT(testing::PrintToString(RelativePointer("1/B/0/A")), "1/B/0/A");
|
|
|
+ EXPECT_THAT(testing::PrintToString("0"_relptr), "0");
|
|
|
+ EXPECT_THAT(testing::PrintToString("1#"_relptr), "1#");
|
|
|
+ EXPECT_THAT(testing::PrintToString("1/B/0/A"_relptr), "1/B/0/A");
|
|
|
}
|
|
|
|
|
|
TEST(RelatvivePointerTest, ZeroIsHere) {
|
|
|
Json::Value json;
|
|
|
json["A"] = 1;
|
|
|
- RelativePointer const rel("0");
|
|
|
- EXPECT_THAT(rel.inspect("/A"_jptr, JsonCppAdapter(json)),
|
|
|
- VariantWith<JsonCppAdapter>(JsonCppAdapter(json["A"])))
|
|
|
- << rel;
|
|
|
+ EXPECT_THAT("0"_relptr.inspect("/A"_jptr, JsonCppAdapter(json)),
|
|
|
+ VariantWith<JsonCppAdapter>(JsonCppAdapter(json["A"])));
|
|
|
}
|
|
|
|
|
|
TEST(RelatvivePointerTest, CanWalkBackwards) {
|
|
|
Json::Value json;
|
|
|
json["A"] = 1;
|
|
|
- RelativePointer const rel("1");
|
|
|
- EXPECT_THAT(rel.inspect("/A"_jptr, JsonCppAdapter(json)),
|
|
|
- VariantWith<JsonCppAdapter>(JsonCppAdapter(json)))
|
|
|
- << rel;
|
|
|
+ EXPECT_THAT("1"_relptr.inspect("/A"_jptr, JsonCppAdapter(json)),
|
|
|
+ VariantWith<JsonCppAdapter>(JsonCppAdapter(json)));
|
|
|
}
|
|
|
|
|
|
TEST(RelatvivePointerTest, CanFetchKey) {
|
|
|
Json::Value json;
|
|
|
json["A"] = 1;
|
|
|
- RelativePointer const rel("0#");
|
|
|
- EXPECT_THAT(rel.inspect("/A"_jptr, JsonCppAdapter(json)), VariantWith<std::string>(Eq("A")))
|
|
|
- << rel;
|
|
|
+ EXPECT_THAT("0#"_relptr.inspect("/A"_jptr, JsonCppAdapter(json)),
|
|
|
+ VariantWith<std::string>(Eq("A")));
|
|
|
}
|
|
|
|
|
|
TEST(RelatvivePointerTest, CanGoUpAndDown) {
|
|
|
Json::Value json;
|
|
|
json["A"] = 1;
|
|
|
json["B"] = 2;
|
|
|
- RelativePointer const rel("1/B");
|
|
|
- EXPECT_THAT(rel.inspect("/A"_jptr, JsonCppAdapter(json)),
|
|
|
- VariantWith<JsonCppAdapter>(JsonCppAdapter(json["B"])))
|
|
|
- << rel;
|
|
|
+ EXPECT_THAT("1/B"_relptr.inspect("/A"_jptr, JsonCppAdapter(json)),
|
|
|
+ VariantWith<JsonCppAdapter>(JsonCppAdapter(json["B"])));
|
|
|
}
|
|
|
|
|
|
TEST(ReferenceTest, Print) {
|
|
|
EXPECT_THAT(testing::PrintToString(Reference(jvalidate::URI("file://path/to/document.json"),
|
|
|
- Anchor("Anchor"), Pointer("/key/1/id"))),
|
|
|
+ Anchor("Anchor"), "/key/1/id"_jptr)),
|
|
|
"file://path/to/document.json#Anchor/key/1/id");
|
|
|
}
|
|
|
|
|
|
@@ -149,30 +142,29 @@ TEST(NumberTest, DoubleOutOfIntegerRange) {
|
|
|
EXPECT_FALSE(fits_in_integer(-10000000000000000000.0));
|
|
|
}
|
|
|
|
|
|
-TYPED_TEST(NumberFromStrTest, NumberParsesIntegers) { EXPECT_THAT(from_str<TypeParam>("10"), 10); }
|
|
|
+TYPED_TEST(NumberFromStrTest, NumberParsesIntegers) {
|
|
|
+ EXPECT_THAT(parse_integer<TypeParam>("10"), Expected(10));
|
|
|
+}
|
|
|
|
|
|
TYPED_TEST(NumberFromStrTest, NumberParsesNegativeIntegers) {
|
|
|
if constexpr (std::is_signed_v<TypeParam>) {
|
|
|
- EXPECT_THAT(from_str<TypeParam>("-10"), -10);
|
|
|
+ EXPECT_THAT(parse_integer<TypeParam>("-10"), Expected(-10));
|
|
|
} else {
|
|
|
- EXPECT_THAT([] { from_str<TypeParam>("-10"); },
|
|
|
- ThrowsMessage<std::runtime_error>("Invalid argument"));
|
|
|
+ EXPECT_THAT(parse_integer<TypeParam>("-10"), Unexpected(std::errc::invalid_argument));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(NumberFromStrTest, ThrowsOnPlusSign) {
|
|
|
- EXPECT_THAT([] { from_str<TypeParam>("+10"); },
|
|
|
- ThrowsMessage<std::runtime_error>("Invalid argument"));
|
|
|
+ EXPECT_THAT(parse_integer<TypeParam>("+10"), Unexpected(std::errc::invalid_argument));
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(NumberFromStrTest, ThrowsOnTooManyChars) {
|
|
|
- EXPECT_THAT([] { from_str<TypeParam>("10 coconuts"); },
|
|
|
- ThrowsMessage<std::runtime_error>("NaN: 10 coconuts"));
|
|
|
+ EXPECT_THAT(parse_integer<TypeParam>("10 coconuts"), Unexpected(std::errc::result_out_of_range));
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(NumberFromStrTest, ThrowsOnOutOfRange) {
|
|
|
- EXPECT_THAT([] { from_str<TypeParam>("99999999999999999999999999999"); },
|
|
|
- ThrowsMessage<std::runtime_error>("Result too large"));
|
|
|
+ EXPECT_THAT(parse_integer<TypeParam>("99999999999999999999999999999"),
|
|
|
+ Unexpected(std::errc::result_out_of_range));
|
|
|
}
|
|
|
|
|
|
TEST(StringAdapterTest, IsStringy) {
|