diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 50a2d5f1..c706f828 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -3,3 +3,6 @@ ee5b17e5bdcb9c053d5eb107445a342c1fd3778a # Scala Steward: Reformat with scalafmt 3.7.5 21d9aa026e73c94347708197dfbe8dd911cf8c12 + +# Scala Steward: Reformat with scalafmt 3.8.1 +d1681e4362ebcfca955c30b5ba934c3755cdcda8 diff --git a/.scalafmt.conf b/.scalafmt.conf index c58e8f30..fbac6969 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = "3.8.0" +version = "3.8.1" runner.dialect = scala3 project.git = true diff --git a/parser-jawn/src/test/scala/frawa/typedjson/parser/jawn/JawnOffsetParserTest.scala b/parser-jawn/src/test/scala/frawa/typedjson/parser/jawn/JawnOffsetParserTest.scala index 50f4ff0c..e5045e34 100644 --- a/parser-jawn/src/test/scala/frawa/typedjson/parser/jawn/JawnOffsetParserTest.scala +++ b/parser-jawn/src/test/scala/frawa/typedjson/parser/jawn/JawnOffsetParserTest.scala @@ -74,7 +74,10 @@ class JawnOffsetParserTest extends FunSuite { Right( ArrayValue( Offset(0, 11), - Seq(NumberValue(Offset(1, 3), 13), ArrayValue(Offset(4, 10), Seq(BoolValue(Offset(5, 9), value = true)))) + Seq( + NumberValue(Offset(1, 3), 13), + ArrayValue(Offset(4, 10), Seq(BoolValue(Offset(5, 9), value = true))) + ) ) ) ) @@ -213,7 +216,11 @@ class JawnOffsetParserTest extends FunSuite { Right( ArrayValue( Offset(0, 10), - Seq(NumberValue(Offset(1, 3), 13), NumberValue(Offset(4, 6), 14), NumberValue(Offset(7, 9), 15)) + Seq( + NumberValue(Offset(1, 3), 13), + NumberValue(Offset(4, 6), 14), + NumberValue(Offset(7, 9), 15) + ) ) ) ) @@ -438,7 +445,9 @@ class JawnOffsetParserTest extends FunSuite { // assertEquals(pointerAt(recovered)(4), (Pointer.empty / "toto")) } - private def offsetAt(json: String)(at: Pointer): Either[OffsetParser.ParseError, Option[Offset]] = { + private def offsetAt( + json: String + )(at: Pointer): Either[OffsetParser.ParseError, Option[Offset]] = { parser.parseWithOffset(json).map(OffsetParser.offsetAt(_)(at)) } @@ -490,7 +499,10 @@ class JawnOffsetParserTest extends FunSuite { assertEquals(offsetAt("""{"toto":13}""")(Pointer.empty / "toto"), Right(Some(Offset(8, 10)))) assertEquals(offsetAt("""{"toto":13}""")(Pointer.empty / "missing"), Right(None)) assertEquals(offsetAt("""{"toto":13}""")(Pointer.empty / 13), Right(None)) - assertEquals(offsetAt("""{"foo": [13,14], "bar": {"gnu": 13}}""")(Pointer.empty), Right(Some(Offset(0, 36)))) + assertEquals( + offsetAt("""{"foo": [13,14], "bar": {"gnu": 13}}""")(Pointer.empty), + Right(Some(Offset(0, 36))) + ) assertEquals( offsetAt("""{"foo": [13,14], "bar": {"gnu": 13}}""")(Pointer.empty / "foo"), Right(Some(Offset(8, 15))) diff --git a/parser-jawn/src/test/scala/frawa/typedjson/parser/jawn/JawnParserTest.scala b/parser-jawn/src/test/scala/frawa/typedjson/parser/jawn/JawnParserTest.scala index 1106e5dc..ed2997a0 100644 --- a/parser-jawn/src/test/scala/frawa/typedjson/parser/jawn/JawnParserTest.scala +++ b/parser-jawn/src/test/scala/frawa/typedjson/parser/jawn/JawnParserTest.scala @@ -35,7 +35,10 @@ class JawnParserTest extends FunSuite { } test("object") { - assertEquals(Parser("""{"toto":"titi"}"""), Right(ObjectValue(Map("toto" -> StringValue("titi"))))) + assertEquals( + Parser("""{"toto":"titi"}"""), + Right(ObjectValue(Map("toto" -> StringValue("titi")))) + ) } test("big number") { diff --git a/parser-zio/src/test/scala/frawa/typedjson/parser/zio/ZioParserTest.scala b/parser-zio/src/test/scala/frawa/typedjson/parser/zio/ZioParserTest.scala index 69bd40ef..607f3afc 100644 --- a/parser-zio/src/test/scala/frawa/typedjson/parser/zio/ZioParserTest.scala +++ b/parser-zio/src/test/scala/frawa/typedjson/parser/zio/ZioParserTest.scala @@ -36,7 +36,10 @@ class ZioParserTest extends FunSuite: } test("object") { - assertEquals(Parser("""{"toto":"titi"}"""), Right(ObjectValue(Map("toto" -> StringValue("titi"))))) + assertEquals( + Parser("""{"toto":"titi"}"""), + Right(ObjectValue(Map("toto" -> StringValue("titi")))) + ) } test("big number") { diff --git a/parser/src/test/scala/frawa/typedjson/parser/OffsetParserTest.scala b/parser/src/test/scala/frawa/typedjson/parser/OffsetParserTest.scala index 959311df..56403c9f 100644 --- a/parser/src/test/scala/frawa/typedjson/parser/OffsetParserTest.scala +++ b/parser/src/test/scala/frawa/typedjson/parser/OffsetParserTest.scala @@ -44,7 +44,8 @@ class OffsetParserTest extends FunSuite: test("contextAt around array") { // [13,14] - val v = ArrayValue(Offset(0, 7), Seq(NumberValue(Offset(1, 3), 13), NumberValue(Offset(4, 6), 14))) + val v = + ArrayValue(Offset(0, 7), Seq(NumberValue(Offset(1, 3), 13), NumberValue(Offset(4, 6), 14))) assertEquals(contextAt(v)(0), NewValue(Pointer.empty / 0, Offset(0, 0))) assertEquals(contextAt(v)(1), InsideValue(Pointer.empty / 0, Offset(1, 3))) assertEquals(contextAt(v)(2), InsideValue(Pointer.empty / 0, Offset(1, 3))) diff --git a/typed-json/src/test/scala/frawa/typedjson/eval/EvalCoreTest.scala b/typed-json/src/test/scala/frawa/typedjson/eval/EvalCoreTest.scala index ba039095..ccb971e0 100644 --- a/typed-json/src/test/scala/frawa/typedjson/eval/EvalCoreTest.scala +++ b/typed-json/src/test/scala/frawa/typedjson/eval/EvalCoreTest.scala @@ -85,14 +85,20 @@ class EvalCoreTest extends FunSuite: test("false with errors") { withCompiledSchema(falseSchema) { fun => - assertEquals(doApply(fun, parseJsonValue("{}")), SimpleOutput(false, Seq(WithPointer(FalseSchemaReason())))) + assertEquals( + doApply(fun, parseJsonValue("{}")), + SimpleOutput(false, Seq(WithPointer(FalseSchemaReason()))) + ) } } test("boolean") { withCompiledSchema(boolSchema) { fun => assertEquals(doApply(fun, parseJsonValue("true")), SimpleOutput(true)) - assertEquals(doApply(fun, parseJsonValue("13")), SimpleOutput(false, Seq(WithPointer(TypeMismatch("boolean"))))) + assertEquals( + doApply(fun, parseJsonValue("13")), + SimpleOutput(false, Seq(WithPointer(TypeMismatch("boolean")))) + ) } } @@ -106,9 +112,18 @@ class EvalCoreTest extends FunSuite: test("false schema") { withCompiledSchema(falseSchema) { fun => - assertEquals(doApply(fun, parseJsonValue("null")), SimpleOutput(false, Seq(WithPointer(FalseSchemaReason())))) - assertEquals(doApply(fun, parseJsonValue("13")), SimpleOutput(false, Seq(WithPointer(FalseSchemaReason())))) - assertEquals(doApply(fun, parseJsonValue("{}")), SimpleOutput(false, Seq(WithPointer(FalseSchemaReason())))) + assertEquals( + doApply(fun, parseJsonValue("null")), + SimpleOutput(false, Seq(WithPointer(FalseSchemaReason()))) + ) + assertEquals( + doApply(fun, parseJsonValue("13")), + SimpleOutput(false, Seq(WithPointer(FalseSchemaReason()))) + ) + assertEquals( + doApply(fun, parseJsonValue("{}")), + SimpleOutput(false, Seq(WithPointer(FalseSchemaReason()))) + ) } } @@ -132,23 +147,38 @@ class EvalCoreTest extends FunSuite: test("not empty schema") { withCompiledSchema("""{"not": {}}""") { fun => - assertEquals(doApply(fun, parseJsonValue("null")), SimpleOutput(false, Seq(WithPointer(NotInvalid())))) - assertEquals(doApply(fun, parseJsonValue("13")), SimpleOutput(false, Seq(WithPointer(NotInvalid())))) - assertEquals(doApply(fun, parseJsonValue("{}")), SimpleOutput(false, Seq(WithPointer(NotInvalid())))) + assertEquals( + doApply(fun, parseJsonValue("null")), + SimpleOutput(false, Seq(WithPointer(NotInvalid()))) + ) + assertEquals( + doApply(fun, parseJsonValue("13")), + SimpleOutput(false, Seq(WithPointer(NotInvalid()))) + ) + assertEquals( + doApply(fun, parseJsonValue("{}")), + SimpleOutput(false, Seq(WithPointer(NotInvalid()))) + ) } } test("string") { withCompiledSchema(stringSchema) { fun => assertEquals(doApply(fun, parseJsonValue(""""hello"""")), SimpleOutput(true)) - assertEquals(doApply(fun, parseJsonValue("13")), SimpleOutput(false, Seq(WithPointer(TypeMismatch("string"))))) + assertEquals( + doApply(fun, parseJsonValue("13")), + SimpleOutput(false, Seq(WithPointer(TypeMismatch("string")))) + ) } } test("number") { withCompiledSchema(numberSchema) { fun => assertEquals(doApply(fun, parseJsonValue("13")), SimpleOutput(true)) - assertEquals(doApply(fun, parseJsonValue("null")), SimpleOutput(false, Seq(WithPointer(TypeMismatch("number"))))) + assertEquals( + doApply(fun, parseJsonValue("null")), + SimpleOutput(false, Seq(WithPointer(TypeMismatch("number")))) + ) } } @@ -308,7 +338,10 @@ class EvalCoreTest extends FunSuite: |""".stripMargin) { fun => assertEquals( doApply(fun, parseJsonValue("1313")), - SimpleOutput(false, Seq(WithPointer(TypeMismatch("string")), WithPointer(TypeMismatch("boolean")))) + SimpleOutput( + false, + Seq(WithPointer(TypeMismatch("string")), WithPointer(TypeMismatch("boolean"))) + ) ) } } @@ -433,7 +466,10 @@ class EvalCoreTest extends FunSuite: ) assertEquals( doApply(fun, parseJsonValue("13")), - SimpleOutput(false, Seq(WithPointer(TypeMismatch("null")), WithPointer(TypeMismatch("string")))) + SimpleOutput( + false, + Seq(WithPointer(TypeMismatch("null")), WithPointer(TypeMismatch("string"))) + ) ) } } diff --git a/typed-json/src/test/scala/frawa/typedjson/eval/EvalKeywordTest.scala b/typed-json/src/test/scala/frawa/typedjson/eval/EvalKeywordTest.scala index a8bfd2de..95babd17 100644 --- a/typed-json/src/test/scala/frawa/typedjson/eval/EvalKeywordTest.scala +++ b/typed-json/src/test/scala/frawa/typedjson/eval/EvalKeywordTest.scala @@ -619,27 +619,30 @@ class EvalKeywordTest extends FunSuite: } test("unevaluatedItems with prefixItems") { - withCompiledSchema("""{ "prefixItems": [{ "type": "boolean" }], "unevaluatedItems": { "type": "string" } }""") { - fun => - assertEquals( - doApplyBulk( - fun, - Seq( - parseJsonValue("""[true, "foo"]"""), - parseJsonValue("""[true, 13]""") - ), - state => {} - ), + withCompiledSchema( + """{ "prefixItems": [{ "type": "boolean" }], "unevaluatedItems": { "type": "string" } }""" + ) { fun => + assertEquals( + doApplyBulk( + fun, Seq( - SimpleOutput(true, annotations = Seq(EvaluatedIndices(Set(0, 1)))), - SimpleOutput(false, Seq(WithPointer(TypeMismatch("string"), Pointer.empty / 1))) - ) + parseJsonValue("""[true, "foo"]"""), + parseJsonValue("""[true, 13]""") + ), + state => {} + ), + Seq( + SimpleOutput(true, annotations = Seq(EvaluatedIndices(Set(0, 1)))), + SimpleOutput(false, Seq(WithPointer(TypeMismatch("string"), Pointer.empty / 1))) ) + ) } } test("unevaluatedItems with contains") { - withCompiledSchema("""{ "unevaluatedItems": { "type": "string" }, "contains": {"type": "boolean"} }""") { fun => + withCompiledSchema( + """{ "unevaluatedItems": { "type": "string" }, "contains": {"type": "boolean"} }""" + ) { fun => assertEquals( doApplyBulk( fun, diff --git a/typed-json/src/test/scala/frawa/typedjson/eval/EvalSpecDetailsTest.scala b/typed-json/src/test/scala/frawa/typedjson/eval/EvalSpecDetailsTest.scala index 0231fe19..1dd60372 100644 --- a/typed-json/src/test/scala/frawa/typedjson/eval/EvalSpecDetailsTest.scala +++ b/typed-json/src/test/scala/frawa/typedjson/eval/EvalSpecDetailsTest.scala @@ -485,7 +485,10 @@ class EvalSpecDetailsTest extends FunSuite: { _ => } ), Seq( - SimpleOutput(true, annotations = Seq(EvaluatedProperties(Set("alpha")), Ignored(Set("title")))), + SimpleOutput( + true, + annotations = Seq(EvaluatedProperties(Set("alpha")), Ignored(Set("title"))) + ), SimpleOutput( false, errors = Seq( diff --git a/typed-json/src/test/scala/frawa/typedjson/eval/Util.scala b/typed-json/src/test/scala/frawa/typedjson/eval/Util.scala index 9fc30094..254cc1e6 100644 --- a/typed-json/src/test/scala/frawa/typedjson/eval/Util.scala +++ b/typed-json/src/test/scala/frawa/typedjson/eval/Util.scala @@ -27,7 +27,12 @@ import scala.collection.immutable.Seq object Util: val vocabularyForTest: Option[Vocabulary] = dialect( - Seq(Vocabulary.coreId, Vocabulary.validationId, Vocabulary.applicatorId, Vocabulary.unevaluatedId) + Seq( + Vocabulary.coreId, + Vocabulary.validationId, + Vocabulary.applicatorId, + Vocabulary.unevaluatedId + ) ) def withKeywords( @@ -80,8 +85,8 @@ object Util: // println(s"counted ${s.count} binds") o - def doApplyBulk[O: OutputOps](fun: Value => R[O], values: Seq[Value], fun2: CacheState => Unit)(using - resolver: SchemaResolver + def doApplyBulk[O: OutputOps](fun: Value => R[O], values: Seq[Value], fun2: CacheState => Unit)( + using resolver: SchemaResolver ): Seq[O] = val emptyCache = empty(resolver, vocabularyForTest.get) val (s, os) = values diff --git a/typed-json/src/test/scala/frawa/typedjson/jsonSchemaTestSuite/Draft202012OptionalTest.scala b/typed-json/src/test/scala/frawa/typedjson/jsonSchemaTestSuite/Draft202012OptionalTest.scala index c026cbfd..682040d1 100644 --- a/typed-json/src/test/scala/frawa/typedjson/jsonSchemaTestSuite/Draft202012OptionalTest.scala +++ b/typed-json/src/test/scala/frawa/typedjson/jsonSchemaTestSuite/Draft202012OptionalTest.scala @@ -35,7 +35,10 @@ class Draft202012OptionalTest extends JsonSchemaTestSuite: ) override protected val ignoreByExpectation: Map[TestId, Seq[String]] = Map( - ("format-assertion.json", "schema that uses custom metaschema with format-assertion: false") -> Seq( + ( + "format-assertion.json", + "schema that uses custom metaschema with format-assertion: false" + ) -> Seq( "format-assertion: false: invalid string" ), ("dependencies-compatibility.json", "multiple dependents required") -> Seq( diff --git a/typed-json/src/test/scala/frawa/typedjson/keywords/KeywordsTest.scala b/typed-json/src/test/scala/frawa/typedjson/keywords/KeywordsTest.scala index 19cf9b57..e0921b04 100644 --- a/typed-json/src/test/scala/frawa/typedjson/keywords/KeywordsTest.scala +++ b/typed-json/src/test/scala/frawa/typedjson/keywords/KeywordsTest.scala @@ -26,7 +26,9 @@ import munit.Compare import munit.FunSuite class KeywordsTest extends FunSuite: - private val vocabularyForTest = dialect(Seq(Vocabulary.coreId, Vocabulary.validationId, Vocabulary.applicatorId)).get + private val vocabularyForTest = dialect( + Seq(Vocabulary.coreId, Vocabulary.validationId, Vocabulary.applicatorId) + ).get private def assertKeywords(schema: SchemaValue, vocabulary: Vocabulary = vocabularyForTest)( f: Keywords => Unit @@ -102,7 +104,9 @@ class KeywordsTest extends FunSuite: NotKeyword( Keywords( vocabularyForTest, - Set(WithLocation(TrivialKeyword(false), KeywordLocation(Pointer.parse("/not").get))) + Set( + WithLocation(TrivialKeyword(false), KeywordLocation(Pointer.parse("/not").get)) + ) ) ), KeywordLocation(Pointer.parse("/not").get) @@ -126,7 +130,9 @@ class KeywordsTest extends FunSuite: assertSchemaProblems(schema) { problems => assertEquals( problems, - SchemaProblems(Seq(WithPointer(InvalidSchemaValue(StringValue("gnu")), Pointer.empty / "not"))) + SchemaProblems( + Seq(WithPointer(InvalidSchemaValue(StringValue("gnu")), Pointer.empty / "not")) + ) ) } } @@ -405,7 +411,10 @@ class KeywordsTest extends FunSuite: Keywords( vocabularyForTest, Set( - WithLocation(NumberTypeKeyword, KeywordLocation(Pointer.empty / "if" / "type")) + WithLocation( + NumberTypeKeyword, + KeywordLocation(Pointer.empty / "if" / "type") + ) ), Seq() ) @@ -537,7 +546,8 @@ class KeywordsTest extends FunSuite: } test("meta: title") { - val vocabularyWithMeta = vocabularyForTest.combine(Vocabulary.specVocabularies(Vocabulary.metaDataId)) + val vocabularyWithMeta = + vocabularyForTest.combine(Vocabulary.specVocabularies(Vocabulary.metaDataId)) withSchema("""{ |"title": "My Title" |} @@ -557,7 +567,8 @@ class KeywordsTest extends FunSuite: } test("meta: title and description") { - val vocabularyWithMeta = vocabularyForTest.combine(Vocabulary.specVocabularies(Vocabulary.metaDataId)) + val vocabularyWithMeta = + vocabularyForTest.combine(Vocabulary.specVocabularies(Vocabulary.metaDataId)) withSchema("""{ |"description": "Longer description.", |"title": "My Title" @@ -578,7 +589,8 @@ class KeywordsTest extends FunSuite: } test("meta: all") { - val vocabularyWithMeta = vocabularyForTest.combine(Vocabulary.specVocabularies(Vocabulary.metaDataId)) + val vocabularyWithMeta = + vocabularyForTest.combine(Vocabulary.specVocabularies(Vocabulary.metaDataId)) withSchema("""{ |"description": "Longer description.", |"title": "My Title", diff --git a/typed-json/src/test/scala/frawa/typedjson/keywords/LoadedSchemasResolverTest.scala b/typed-json/src/test/scala/frawa/typedjson/keywords/LoadedSchemasResolverTest.scala index d688a942..403b1800 100644 --- a/typed-json/src/test/scala/frawa/typedjson/keywords/LoadedSchemasResolverTest.scala +++ b/typed-json/src/test/scala/frawa/typedjson/keywords/LoadedSchemasResolverTest.scala @@ -335,7 +335,10 @@ class LoadedSchemasResolverTest extends FunSuite: val Some(SchemaResolution(schema, resolver2)) = resolver1.resolveRef("cache-me"): @unchecked assertEquals(schema, SchemaValue.root(NullValue)) assertEquals(resolver2.isInstanceOf[LoadedSchemasResolver], true) - assertEquals(resolver2.asInstanceOf[LoadedSchemasResolver].schemas.keySet, Set(uri("cache-me"))) + assertEquals( + resolver2.asInstanceOf[LoadedSchemasResolver].schemas.keySet, + Set(uri("cache-me")) + ) } } @@ -369,7 +372,8 @@ class LoadedSchemasResolverTest extends FunSuite: withLoadedSchemas(Seq()) { resolver0 => val uriExample = uri(exampleUri) val lazyResolver: LazyResolver = uri => - if uri.toString == exampleUri then Some(RootSchemaValue(exampleSchema.value, Some(uriExample))) + if uri.toString == exampleUri then + Some(RootSchemaValue(exampleSchema.value, Some(uriExample))) else None val resolver = resolver0.withLazyResolver(lazyResolver) diff --git a/typed-json/src/test/scala/frawa/typedjson/meta/MetaSchemaTest.scala b/typed-json/src/test/scala/frawa/typedjson/meta/MetaSchemaTest.scala index 700600a0..c68bde96 100644 --- a/typed-json/src/test/scala/frawa/typedjson/meta/MetaSchemaTest.scala +++ b/typed-json/src/test/scala/frawa/typedjson/meta/MetaSchemaTest.scala @@ -38,7 +38,10 @@ class MetaSchemaTest extends FunSuite: val Some(schema) = resolver(base.resolve(name)): @unchecked f(schema) - def validateSpec(valueName: String, schemaName: String)(f: SimpleOutput => Unit, g: CacheState.Stats => Unit): Unit = + def validateSpec(valueName: String, schemaName: String)( + f: SimpleOutput => Unit, + g: CacheState.Stats => Unit + ): Unit = val evalBasic = Eval[R, SimpleOutput] given Eval[R, SimpleOutput] = evalBasic withSchemaSpec(schemaName) { schema => diff --git a/typed-json/src/test/scala/frawa/typedjson/output/OutputJsonTest.scala b/typed-json/src/test/scala/frawa/typedjson/output/OutputJsonTest.scala index 01896109..a520c072 100644 --- a/typed-json/src/test/scala/frawa/typedjson/output/OutputJsonTest.scala +++ b/typed-json/src/test/scala/frawa/typedjson/output/OutputJsonTest.scala @@ -75,43 +75,46 @@ class OutputJsonTest extends FunSuite: val (output, _) = typedJson.eval(parseJsonValue(Sample.value)) BasicOutput( - false, - error = None, - instanceLocation = Pointer.empty, - keywordLocation = None, - errors = Seq( - // TODO 1: failed at Pointer.empty, "keywordLocation": """, "instanceLocation": "", - // TODO 2: failed at Pointer.empty / 1, "keywordLocation": "/items/$ref", "absoluteKeywordLocation": "https://example.com/polygon#/$defs/point", - - BasicOutput.Error( - AdditionalPropertyInvalid("z"), - Pointer.empty / 1 / "z", - KeywordLocation( - "/items/$ref/additionalProperties", - "https://example.com/polygon#/$defs/point/additionalProperties" - ) - ), - BasicOutput.Error( - FalseSchemaReason(), - Pointer.empty / 1, - KeywordLocation( - "/items/$ref", - "https://example.com/polygon#/$defs/point" - ) - ), - BasicOutput.Error( - MissingRequiredProperties(Seq("y")), - Pointer.empty / 1, - KeywordLocation("/items/$ref/required", "https://example.com/polygon#/$defs/point/required") - ), - BasicOutput.Error( - MinItemsMismatch(3, 2), - Pointer.empty, - KeywordLocation("/minItems") + false, + error = None, + instanceLocation = Pointer.empty, + keywordLocation = None, + errors = Seq( + // TODO 1: failed at Pointer.empty, "keywordLocation": """, "instanceLocation": "", + // TODO 2: failed at Pointer.empty / 1, "keywordLocation": "/items/$ref", "absoluteKeywordLocation": "https://example.com/polygon#/$defs/point", + + BasicOutput.Error( + AdditionalPropertyInvalid("z"), + Pointer.empty / 1 / "z", + KeywordLocation( + "/items/$ref/additionalProperties", + "https://example.com/polygon#/$defs/point/additionalProperties" + ) + ), + BasicOutput.Error( + FalseSchemaReason(), + Pointer.empty / 1, + KeywordLocation( + "/items/$ref", + "https://example.com/polygon#/$defs/point" ) ), - annotations = Seq() - ) + BasicOutput.Error( + MissingRequiredProperties(Seq("y")), + Pointer.empty / 1, + KeywordLocation( + "/items/$ref/required", + "https://example.com/polygon#/$defs/point/required" + ) + ), + BasicOutput.Error( + MinItemsMismatch(3, 2), + Pointer.empty, + KeywordLocation("/minItems") + ) + ), + annotations = Seq() + ) // TODO // assertEquals(Some(expected), output) @@ -177,59 +180,64 @@ class OutputJsonTest extends FunSuite: val (output, _) = typedJson.eval(parseJsonValue(Sample.value)) DetailedOutput( - false, - error = None, - instanceLocation = Pointer.empty, - keywordLocation = Some(KeywordLocation.empty), - errors = Seq( - DetailedOutput( - valid = false, - error = None, - instanceLocation = Pointer.empty / 1, - keywordLocation = Some(KeywordLocation("/items/$ref", "https://example.com/polygon#/$defs/point")), - errors = Seq( - DetailedOutput( - valid = false, - error = Some(AdditionalPropertyInvalid("z")), - instanceLocation = Pointer.empty / 1 / "z", - keywordLocation = Some( - KeywordLocation( - "/items/$ref/additionalProperties", - "https://example.com/polygon#/$defs/point/additionalProperties" - ) - ), - errors = Seq( - DetailedOutput( - valid = false, - error = Some(FalseSchemaReason()), - instanceLocation = Pointer.empty / 1 / "z", - keywordLocation = Some( - KeywordLocation( - "/items/$ref/additionalProperties", - "https://example.com/polygon#/$defs/point/additionalProperties" - ) + false, + error = None, + instanceLocation = Pointer.empty, + keywordLocation = Some(KeywordLocation.empty), + errors = Seq( + DetailedOutput( + valid = false, + error = None, + instanceLocation = Pointer.empty / 1, + keywordLocation = + Some(KeywordLocation("/items/$ref", "https://example.com/polygon#/$defs/point")), + errors = Seq( + DetailedOutput( + valid = false, + error = Some(AdditionalPropertyInvalid("z")), + instanceLocation = Pointer.empty / 1 / "z", + keywordLocation = Some( + KeywordLocation( + "/items/$ref/additionalProperties", + "https://example.com/polygon#/$defs/point/additionalProperties" + ) + ), + errors = Seq( + DetailedOutput( + valid = false, + error = Some(FalseSchemaReason()), + instanceLocation = Pointer.empty / 1 / "z", + keywordLocation = Some( + KeywordLocation( + "/items/$ref/additionalProperties", + "https://example.com/polygon#/$defs/point/additionalProperties" ) ) ) - ), - DetailedOutput( - valid = false, - error = Some(MissingRequiredProperties(Seq("y"))), - instanceLocation = Pointer.empty / 1, - keywordLocation = - Some(KeywordLocation("/items/$ref/required", "https://example.com/polygon#/$defs/point/required")) + ) + ), + DetailedOutput( + valid = false, + error = Some(MissingRequiredProperties(Seq("y"))), + instanceLocation = Pointer.empty / 1, + keywordLocation = Some( + KeywordLocation( + "/items/$ref/required", + "https://example.com/polygon#/$defs/point/required" + ) ) ) - ), - DetailedOutput( - valid = false, - error = Some(MinItemsMismatch(3, 2)), - instanceLocation = Pointer.empty, - keywordLocation = Some(KeywordLocation("/minItems")) ) ), - annotations = Seq() - ) + DetailedOutput( + valid = false, + error = Some(MinItemsMismatch(3, 2)), + instanceLocation = Pointer.empty, + keywordLocation = Some(KeywordLocation("/minItems")) + ) + ), + annotations = Seq() + ) // assertEquals(output, Some(expected)) val detailedJson = output.map(OutputJson.detailed) @@ -282,79 +290,81 @@ object Sample: |] |""".stripMargin - val expectedBasic: String = """|{ - | "valid": false, - | "errors": [ - | { - | "keywordLocation": "/minItems", - | "instanceLocation": "", - | "error": "Expected at least 3 items but found 2." - | }, - | { - | "keywordLocation": "", - | "instanceLocation": "", - | "error": "A subschema had errors." - | }, - | { - | "keywordLocation": "/items/$ref", - | "absoluteKeywordLocation": - | "https://example.com/polygon#/$defs/point", - | "instanceLocation": "/1", - | "error": "A subschema had errors." - | }, - | { - | "keywordLocation": "/items/$ref/required", - | "absoluteKeywordLocation": - | "https://example.com/polygon#/$defs/point/required", - | "instanceLocation": "/1", - | "error": "Required property 'y' not found." - | }, - | { - | "keywordLocation": "/items/$ref/additionalProperties", - | "absoluteKeywordLocation": - | "https://example.com/polygon#/$defs/point/additionalProperties", - | "instanceLocation": "/1/z", - | "error": "Additional property 'z' found but was invalid." - | } - | ] - |} - |""".stripMargin - - val expectedDetailed = """|{ - | "valid": false, - | "keywordLocation": "", - | "instanceLocation": "", - | "errors": [ - | { - | "valid": false, - | "keywordLocation": "/items/$ref", - | "absoluteKeywordLocation": - | "https://example.com/polygon#/$defs/point", - | "instanceLocation": "/1", - | "errors": [ - | { - | "valid": false, - | "keywordLocation": "/items/$ref/required", - | "absoluteKeywordLocation": - | "https://example.com/polygon#/$defs/point/required", - | "instanceLocation": "/1", - | "error": "Required property 'y' not found." - | }, - | { - | "valid": false, - | "keywordLocation": "/items/$ref/additionalProperties", - | "absoluteKeywordLocation": - | "https://example.com/polygon#/$defs/point/additionalProperties", - | "instanceLocation": "/1/z", - | "error": "Additional property 'z' found but was invalid." - | } - | ] - | }, - | { - | "valid": false, - | "keywordLocation": "/minItems", - | "instanceLocation": "", - | "error": "Expected at least 3 items but found 2." - | } - | ] - |}""".stripMargin + val expectedBasic: String = + """|{ + | "valid": false, + | "errors": [ + | { + | "keywordLocation": "/minItems", + | "instanceLocation": "", + | "error": "Expected at least 3 items but found 2." + | }, + | { + | "keywordLocation": "", + | "instanceLocation": "", + | "error": "A subschema had errors." + | }, + | { + | "keywordLocation": "/items/$ref", + | "absoluteKeywordLocation": + | "https://example.com/polygon#/$defs/point", + | "instanceLocation": "/1", + | "error": "A subschema had errors." + | }, + | { + | "keywordLocation": "/items/$ref/required", + | "absoluteKeywordLocation": + | "https://example.com/polygon#/$defs/point/required", + | "instanceLocation": "/1", + | "error": "Required property 'y' not found." + | }, + | { + | "keywordLocation": "/items/$ref/additionalProperties", + | "absoluteKeywordLocation": + | "https://example.com/polygon#/$defs/point/additionalProperties", + | "instanceLocation": "/1/z", + | "error": "Additional property 'z' found but was invalid." + | } + | ] + |} + |""".stripMargin + + val expectedDetailed = + """|{ + | "valid": false, + | "keywordLocation": "", + | "instanceLocation": "", + | "errors": [ + | { + | "valid": false, + | "keywordLocation": "/items/$ref", + | "absoluteKeywordLocation": + | "https://example.com/polygon#/$defs/point", + | "instanceLocation": "/1", + | "errors": [ + | { + | "valid": false, + | "keywordLocation": "/items/$ref/required", + | "absoluteKeywordLocation": + | "https://example.com/polygon#/$defs/point/required", + | "instanceLocation": "/1", + | "error": "Required property 'y' not found." + | }, + | { + | "valid": false, + | "keywordLocation": "/items/$ref/additionalProperties", + | "absoluteKeywordLocation": + | "https://example.com/polygon#/$defs/point/additionalProperties", + | "instanceLocation": "/1/z", + | "error": "Additional property 'z' found but was invalid." + | } + | ] + | }, + | { + | "valid": false, + | "keywordLocation": "/minItems", + | "instanceLocation": "", + | "error": "Expected at least 3 items but found 2." + | } + | ] + |}""".stripMargin diff --git a/typed-json/src/test/scala/frawa/typedjson/suggest/SuggestTest.scala b/typed-json/src/test/scala/frawa/typedjson/suggest/SuggestTest.scala index 431ced36..ce2d6c72 100644 --- a/typed-json/src/test/scala/frawa/typedjson/suggest/SuggestTest.scala +++ b/typed-json/src/test/scala/frawa/typedjson/suggest/SuggestTest.scala @@ -58,7 +58,9 @@ class SuggestTest extends FunSuite: voc.combine(Vocabulary.specVocabularies(Vocabulary.metaDataId)) } - private def assertSuggest(text: String, at: Pointer = Pointer.empty, onlyKeys: Boolean = false)(schema: SchemaValue)( + private def assertSuggest(text: String, at: Pointer = Pointer.empty, onlyKeys: Boolean = false)( + schema: SchemaValue + )( f: SuggestResult => Unit ) = given OutputOps[SuggestOutput] = SuggestOutput.outputOps(at) @@ -67,12 +69,14 @@ class SuggestTest extends FunSuite: val value = parseJsonValue(text) withCompiledSchemaValue(schema, vocabulary = vocabularyWithMeta) { fun => Suggest.suggestAt(at)(fun) - val output = doApply(fun, value) - val result = Suggest.suggestions(at, onlyKeys, output) + val output = doApply(fun, value) + val result = Suggest.suggestions(at, onlyKeys, output) f(result) } - private def assertSuggestForSchema(text: String, at: Pointer, keysOnly: Boolean)(f: SuggestResult => Unit): Unit = + private def assertSuggestForSchema(text: String, at: Pointer, keysOnly: Boolean)( + f: SuggestResult => Unit + ): Unit = val lazyResolver = MetaSchemas.lazyResolver val base = MetaSchemas.draft202012 val Some(schema) = lazyResolver(base.resolve("schema")): @unchecked @@ -83,8 +87,8 @@ class SuggestTest extends FunSuite: val value = parseJsonValue(text) withCompiledSchemaValue(schema, Some(lazyResolver), Some(Vocabulary.specDialect())) { fun => Suggest.suggestAt(at)(fun) - val output = doApply(fun, value) - val result = Suggest.suggestions(at, keysOnly, output) + val output = doApply(fun, value) + val result = Suggest.suggestions(at, keysOnly, output) f(result) } diff --git a/typed-json/src/test/scala/frawa/typedjson/testutil/TestSchemas.scala b/typed-json/src/test/scala/frawa/typedjson/testutil/TestSchemas.scala index fc81e748..19708268 100644 --- a/typed-json/src/test/scala/frawa/typedjson/testutil/TestSchemas.scala +++ b/typed-json/src/test/scala/frawa/typedjson/testutil/TestSchemas.scala @@ -211,16 +211,18 @@ object TestSchemas: |} |}""".stripMargin - val refToValidationSpec: String = """{ - |"$id": "https://json-schema.org/draft/2020-12/partial", - |"$dynamicAnchor": "meta", - |"allOf": [ - | {"$ref": "https://json-schema.org/draft/2020-12/meta/validation"}, - | {"$ref": "https://json-schema.org/draft/2020-12/meta/core"} - |] - |}""".stripMargin - - val refIndirectToValidationSpec: String = """{ - |"$id": "https://example.net/root.json", - |"$ref": "https://json-schema.org/draft/2020-12/schema" - |}""".stripMargin + val refToValidationSpec: String = + """{ + |"$id": "https://json-schema.org/draft/2020-12/partial", + |"$dynamicAnchor": "meta", + |"allOf": [ + | {"$ref": "https://json-schema.org/draft/2020-12/meta/validation"}, + | {"$ref": "https://json-schema.org/draft/2020-12/meta/core"} + |] + |}""".stripMargin + + val refIndirectToValidationSpec: String = + """{ + |"$id": "https://example.net/root.json", + |"$ref": "https://json-schema.org/draft/2020-12/schema" + |}""".stripMargin