diff options
| author | Bobby <[email protected]> | 2026-07-17 14:43:56 +0530 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-07-17 14:43:56 +0530 |
| commit | d27e5f4145972990544975a033d03abdd3a5f596 (patch) | |
| tree | b0d069809b22ee040e3bd294b6b7a868d926fde8 /tests/library/corpora | |
| parent | 8bff9a0ec3c7b7207ecd994ace4c696b71fd84f5 (diff) | |
| parent | 5d71c2f3b7218895a10bf485ddd3a04df2c4f66e (diff) | |
| download | edify-main.tar.xz edify-main.zip | |
Multi-locale phone validator, expanded corpora, and all-validator round-trip + operator-algebra coverage (#288)HEADmain
Completes the remaining non-docs library items on the v1.0.0 milestone:
a genuinely multi-locale `phone` validator, real per-locale corpus
hardening, and an end-to-end coverage layer that exercises every shipped
validator and the operator algebra.
## Multi-locale phone (#154)
`phone` is rebuilt as a table-driven multi-locale model: an optional `+`
or `00` prefix, two to eight digit groups of one to four digits each,
single-character space/dot/dash separators, and any group optionally
parenthesised. It now accepts the display forms it previously missed —
leading and inline parenthesised area codes such as `(555) 123-4567` and
`+44 (0)20 7946 0958`, and variable national grouping from three-group
North American through five-group French — plus two-to-six-digit service
and short codes. Doubled separators, bare prefixes, and letters are
still rejected. The corpus grows from a seven-string smoke test to
twenty-one real numbers across eleven locales with ten adversarial
rejects.
## Postal locale coverage (#155)
Multi-locale postal codes are delivered by the existing `postal`
validator; this pins it down with a twenty-code corpus spanning North
America, Europe, Asia, and Oceania (including alphanumeric UK, Irish,
Canadian, and Dutch shapes) with ten adversarial rejects. `zip_code`
stays deliberately US-scoped, with `postal` as its locale-complete
counterpart.
## Validator snapshots (#191)
Every per-validator migration to a callable `Pattern` has landed, so
regenerating the built-in snapshot corpus is a no-op apart from
`phone`'s new emitted shape, which is refreshed here.
## End-to-end coverage of every construct (#258)
- Every registered library validator now round-trips through both dict
and JSON serialization with its emitted regex preserved — a property
test over the full validator set, alongside the existing compiled-source
invariant.
- The operator algebra (`+`, `|`, and `.use()`) is asserted identical to
its fluent-chain equivalent across every character-class constant, at
both the emitted-string and compiled-matcher level, so the two surfaces
can never drift.
- Hardening corpora expand beyond the smoke-test handful to `phone`,
`postal`, `semver`, `slug`, `hostname`, `port`, `isbn`, and `vin`, each
with real-world accepts and adversarial rejects.
Closes #154, Closes #155, Closes #191, Closes #258
Diffstat (limited to 'tests/library/corpora')
| -rw-r--r-- | tests/library/corpora/hostname.toml | 15 | ||||
| -rw-r--r-- | tests/library/corpora/isbn.toml | 13 | ||||
| -rw-r--r-- | tests/library/corpora/phone.toml | 25 | ||||
| -rw-r--r-- | tests/library/corpora/port.toml | 17 | ||||
| -rw-r--r-- | tests/library/corpora/postal.toml | 35 | ||||
| -rw-r--r-- | tests/library/corpora/semver.toml | 18 | ||||
| -rw-r--r-- | tests/library/corpora/slug.toml | 17 | ||||
| -rw-r--r-- | tests/library/corpora/vin.toml | 11 |
8 files changed, 148 insertions, 3 deletions
diff --git a/tests/library/corpora/hostname.toml b/tests/library/corpora/hostname.toml new file mode 100644 index 0000000..23da560 --- /dev/null +++ b/tests/library/corpora/hostname.toml @@ -0,0 +1,15 @@ +accepts = [ + "example.com", + "sub.example.co.uk", + "localhost", + "a.b.c", + "xn--d1acufc.example", +] + +rejects = [ + "", + "-bad.com", + ".com", + "a..b", + "exa mple.com", +] diff --git a/tests/library/corpora/isbn.toml b/tests/library/corpora/isbn.toml new file mode 100644 index 0000000..9028bc5 --- /dev/null +++ b/tests/library/corpora/isbn.toml @@ -0,0 +1,13 @@ +accepts = [ + "978-3-16-148410-0", + "0-306-40615-2", + "9783161484100", + "0306406152", +] + +rejects = [ + "", + "123", + "abc", + "978-3-16-148410-X", +] diff --git a/tests/library/corpora/phone.toml b/tests/library/corpora/phone.toml index 7abe2f7..f7f2b35 100644 --- a/tests/library/corpora/phone.toml +++ b/tests/library/corpora/phone.toml @@ -1,17 +1,36 @@ accepts = [ "+1 555 123 4567", - "+44 20 7946 0958", + "+1-555-123-4567", "555-123-4567", "555.123.4567", - "+1-555-123-4567", + "(555) 123-4567", "5551234567", + "1-800-555-0199", + "+44 20 7946 0958", + "+44 (0)20 7946 0958", "+81 3-1234-5678", + "+91 98765 43210", + "+49 30 12345678", + "+33 1 42 68 53 00", + "+61 2 9374 4000", + "+55 11 91234-5678", + "00 1 555 123 4567", + "112", + "911", + "999", + "311", + "08000", ] rejects = [ "", + " ", "not a phone", "abc-def-ghij", - " ", "555--123--4567", + "++15551234567", + "+", + "1", + "555-", + "(555 123-4567", ] diff --git a/tests/library/corpora/port.toml b/tests/library/corpora/port.toml new file mode 100644 index 0000000..4c715cc --- /dev/null +++ b/tests/library/corpora/port.toml @@ -0,0 +1,17 @@ +accepts = [ + "0", + "1", + "80", + "443", + "8080", + "65535", +] + +rejects = [ + "", + "65536", + "99999", + "-1", + "abc", + "8080a", +] diff --git a/tests/library/corpora/postal.toml b/tests/library/corpora/postal.toml new file mode 100644 index 0000000..5bf05fd --- /dev/null +++ b/tests/library/corpora/postal.toml @@ -0,0 +1,35 @@ +accepts = [ + "90210", + "90210-1234", + "10115", + "75008", + "110001", + "1011 AB", + "NL-1011 AB", + "SW1A 1AA", + "EC1A 1BB", + "GIR 0AA", + "K1A 0B1", + "D02 AF30", + "100-0001", + "01310-100", + "2000", + "00184", + "28001", + "114 55", + "00-001", + "101000", +] + +rejects = [ + "", + " ", + "notazip", + "abcde", + "!!!!!", + "90210-12", + "90210-", + "ZZ99 9ZZ", + "123456789", + "----", +] diff --git a/tests/library/corpora/semver.toml b/tests/library/corpora/semver.toml new file mode 100644 index 0000000..287c6c2 --- /dev/null +++ b/tests/library/corpora/semver.toml @@ -0,0 +1,18 @@ +accepts = [ + "1.0.0", + "2.1.3", + "10.20.30", + "1.0.0-alpha", + "1.0.0-alpha.1", + "1.0.0-rc.1+build.5", + "1.0.0+build.1", +] + +rejects = [ + "", + "1", + "1.0", + "v1.0.0", + "1.0.0.0", + "01.0.0", +] diff --git a/tests/library/corpora/slug.toml b/tests/library/corpora/slug.toml new file mode 100644 index 0000000..87d5407 --- /dev/null +++ b/tests/library/corpora/slug.toml @@ -0,0 +1,17 @@ +accepts = [ + "hello-world", + "my-post-123", + "a", + "abc", + "x-y-z", +] + +rejects = [ + "", + " ", + "Hello-World", + "hello_world", + "-abc", + "abc-", + "a--b", +] diff --git a/tests/library/corpora/vin.toml b/tests/library/corpora/vin.toml new file mode 100644 index 0000000..bc5909e --- /dev/null +++ b/tests/library/corpora/vin.toml @@ -0,0 +1,11 @@ +accepts = [ + "1HGBH41JXMN109186", + "5YJSA1E26HF000001", +] + +rejects = [ + "", + "1HGBH41JXMN10918", + "ABC", + "1HGBH41JXMN109186Q", +] |
