From 5267d35f4bb57cfa90daf3eb4d82271d2b48a493 Mon Sep 17 00:00:00 2001 From: pommicket Date: Tue, 9 Sep 2025 01:06:37 -0400 Subject: Improve schema API, more tests --- site/spec.html | 17 ++++++++++------- tests/errors/bad_escape1.pom | 1 + tests/errors/bad_escape2.pom | 1 + tests/errors/bad_escape_surrogate_half.pom | 1 + tests/errors/bad_escape_unicode_empty.pom | 1 + tests/errors/bad_escape_unicode_too_long.pom | 1 + tests/errors/bad_hex_escape.pom | 1 + tests/errors/bad_key6.pom | 1 + tests/errors/bad_key7.pom | 1 + tests/errors/bad_section1.pom | 2 ++ tests/errors/bad_section2.pom | 2 ++ tests/errors/bad_section3.pom | 2 ++ tests/errors/bad_section4.pom | 2 ++ tests/errors/bad_section5.pom | 2 ++ tests/errors/bad_section6.pom | 2 ++ tests/errors/missing_equals.pom | 1 + tests/errors/no_closing_backtick.pom | 1 + tests/errors/no_closing_bracket.pom | 1 + tests/errors/no_closing_quote.pom | 1 + tests/errors/stray_chars_backtick.pom | 1 + tests/errors/stray_chars_quote.pom | 1 + tests/errors/stray_cr.pom | 1 + tests/parsing/long_key.flat.pom | 2 ++ tests/parsing/long_key.pom | 3 +++ 24 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 tests/errors/bad_escape1.pom create mode 100644 tests/errors/bad_escape2.pom create mode 100644 tests/errors/bad_escape_surrogate_half.pom create mode 100644 tests/errors/bad_escape_unicode_empty.pom create mode 100644 tests/errors/bad_escape_unicode_too_long.pom create mode 100644 tests/errors/bad_hex_escape.pom create mode 100644 tests/errors/bad_key6.pom create mode 100644 tests/errors/bad_key7.pom create mode 100644 tests/errors/bad_section1.pom create mode 100644 tests/errors/bad_section2.pom create mode 100644 tests/errors/bad_section3.pom create mode 100644 tests/errors/bad_section4.pom create mode 100644 tests/errors/bad_section5.pom create mode 100644 tests/errors/bad_section6.pom create mode 100644 tests/errors/missing_equals.pom create mode 100644 tests/errors/no_closing_backtick.pom create mode 100644 tests/errors/no_closing_bracket.pom create mode 100644 tests/errors/no_closing_quote.pom create mode 100644 tests/errors/stray_chars_backtick.pom create mode 100644 tests/errors/stray_chars_quote.pom create mode 100644 tests/errors/stray_cr.pom create mode 100644 tests/parsing/long_key.flat.pom create mode 100644 tests/parsing/long_key.pom diff --git a/site/spec.html b/site/spec.html index 706e019..0222acc 100644 --- a/site/spec.html +++ b/site/spec.html @@ -673,17 +673,20 @@ and for my.nephews.car.id is String (no schema key matches, so the default of St with the initial key. removed, and their corresponding values. Returns an empty configuration if there are no descendants of key defined. -
  • - check_against_schema(conf: Configuration, schema: Configuration) -> Configuration (optional)
    - Check that schema - is a valid schema and that conf follows it, - returning an error with detailed information - if not. If successful, returns a configuration with default values filled out. -
  • merge(conf_a: Configuration, conf_b: Configuration) -> Configuration
    Returns the result of merging conf_b into conf_a.
  • +
  • + parse_schema(conf: Configuration) -> Schema (optional)
    + Parse conf as a schema, returning an error if it is invalid. +
  • +
  • + check_against_schema(conf: Configuration, schema: Schema) -> Configuration (optional)
    + Check conf follows schema, + returning an error with detailed information + if not. If successful, returns a configuration with default values filled out. +
  • Examples

    diff --git a/tests/errors/bad_escape1.pom b/tests/errors/bad_escape1.pom new file mode 100644 index 0000000..f02020b --- /dev/null +++ b/tests/errors/bad_escape1.pom @@ -0,0 +1 @@ +no_trigraph = "a?\?=b" diff --git a/tests/errors/bad_escape2.pom b/tests/errors/bad_escape2.pom new file mode 100644 index 0000000..ae183cb --- /dev/null +++ b/tests/errors/bad_escape2.pom @@ -0,0 +1 @@ +vtab = "\v" diff --git a/tests/errors/bad_escape_surrogate_half.pom b/tests/errors/bad_escape_surrogate_half.pom new file mode 100644 index 0000000..d208923 --- /dev/null +++ b/tests/errors/bad_escape_surrogate_half.pom @@ -0,0 +1 @@ +x = "\u{D812}" diff --git a/tests/errors/bad_escape_unicode_empty.pom b/tests/errors/bad_escape_unicode_empty.pom new file mode 100644 index 0000000..eacd36d --- /dev/null +++ b/tests/errors/bad_escape_unicode_empty.pom @@ -0,0 +1 @@ +x = "\u{}" diff --git a/tests/errors/bad_escape_unicode_too_long.pom b/tests/errors/bad_escape_unicode_too_long.pom new file mode 100644 index 0000000..7a3374a --- /dev/null +++ b/tests/errors/bad_escape_unicode_too_long.pom @@ -0,0 +1 @@ +x = "\u{0000030}" diff --git a/tests/errors/bad_hex_escape.pom b/tests/errors/bad_hex_escape.pom new file mode 100644 index 0000000..c40ba2f --- /dev/null +++ b/tests/errors/bad_hex_escape.pom @@ -0,0 +1 @@ +capital_beta = "\xCE\x92" diff --git a/tests/errors/bad_key6.pom b/tests/errors/bad_key6.pom new file mode 100644 index 0000000..b690d02 --- /dev/null +++ b/tests/errors/bad_key6.pom @@ -0,0 +1 @@ +test key = 5 diff --git a/tests/errors/bad_key7.pom b/tests/errors/bad_key7.pom new file mode 100644 index 0000000..7647aca --- /dev/null +++ b/tests/errors/bad_key7.pom @@ -0,0 +1 @@ + = 4 diff --git a/tests/errors/bad_section1.pom b/tests/errors/bad_section1.pom new file mode 100644 index 0000000..310e60b --- /dev/null +++ b/tests/errors/bad_section1.pom @@ -0,0 +1,2 @@ +[ foo ] +x = 5 diff --git a/tests/errors/bad_section2.pom b/tests/errors/bad_section2.pom new file mode 100644 index 0000000..54f44c9 --- /dev/null +++ b/tests/errors/bad_section2.pom @@ -0,0 +1,2 @@ +[.foo] +x = 5 diff --git a/tests/errors/bad_section3.pom b/tests/errors/bad_section3.pom new file mode 100644 index 0000000..1e98c39 --- /dev/null +++ b/tests/errors/bad_section3.pom @@ -0,0 +1,2 @@ +[+] +x = 5 diff --git a/tests/errors/bad_section4.pom b/tests/errors/bad_section4.pom new file mode 100644 index 0000000..820d148 --- /dev/null +++ b/tests/errors/bad_section4.pom @@ -0,0 +1,2 @@ +[foo.] +x = 5 diff --git a/tests/errors/bad_section5.pom b/tests/errors/bad_section5.pom new file mode 100644 index 0000000..9b4815d --- /dev/null +++ b/tests/errors/bad_section5.pom @@ -0,0 +1,2 @@ +[foo..bar] +x = 5 diff --git a/tests/errors/bad_section6.pom b/tests/errors/bad_section6.pom new file mode 100644 index 0000000..4d97247 --- /dev/null +++ b/tests/errors/bad_section6.pom @@ -0,0 +1,2 @@ +[.] +x = 5 diff --git a/tests/errors/missing_equals.pom b/tests/errors/missing_equals.pom new file mode 100644 index 0000000..7e0466a --- /dev/null +++ b/tests/errors/missing_equals.pom @@ -0,0 +1 @@ +music is on diff --git a/tests/errors/no_closing_backtick.pom b/tests/errors/no_closing_backtick.pom new file mode 100644 index 0000000..09f5dde --- /dev/null +++ b/tests/errors/no_closing_backtick.pom @@ -0,0 +1 @@ +foo = `x diff --git a/tests/errors/no_closing_bracket.pom b/tests/errors/no_closing_bracket.pom new file mode 100644 index 0000000..2abea67 --- /dev/null +++ b/tests/errors/no_closing_bracket.pom @@ -0,0 +1 @@ +[foo diff --git a/tests/errors/no_closing_quote.pom b/tests/errors/no_closing_quote.pom new file mode 100644 index 0000000..42d51a4 --- /dev/null +++ b/tests/errors/no_closing_quote.pom @@ -0,0 +1 @@ +foo = "x diff --git a/tests/errors/stray_chars_backtick.pom b/tests/errors/stray_chars_backtick.pom new file mode 100644 index 0000000..7463874 --- /dev/null +++ b/tests/errors/stray_chars_backtick.pom @@ -0,0 +1 @@ +name = `Andy` B diff --git a/tests/errors/stray_chars_quote.pom b/tests/errors/stray_chars_quote.pom new file mode 100644 index 0000000..d384fd8 --- /dev/null +++ b/tests/errors/stray_chars_quote.pom @@ -0,0 +1 @@ +name = "Andy" B diff --git a/tests/errors/stray_cr.pom b/tests/errors/stray_cr.pom new file mode 100644 index 0000000..858e526 --- /dev/null +++ b/tests/errors/stray_cr.pom @@ -0,0 +1 @@ +# Two CRs: diff --git a/tests/parsing/long_key.flat.pom b/tests/parsing/long_key.flat.pom new file mode 100644 index 0000000..21739bd --- /dev/null +++ b/tests/parsing/long_key.flat.pom @@ -0,0 +1,2 @@ +A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z = 50 +A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = a diff --git a/tests/parsing/long_key.pom b/tests/parsing/long_key.pom new file mode 100644 index 0000000..4168306 --- /dev/null +++ b/tests/parsing/long_key.pom @@ -0,0 +1,3 @@ +[A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z] +a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z = 50 +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = a -- cgit v1.2.3