diff options
| author | Bobby <[email protected]> | 2026-07-15 16:46:09 +0530 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-07-15 16:46:09 +0530 |
| commit | 433d41bf5887e61cc570a874e244e226c25b8a41 (patch) | |
| tree | b00a7012bec6ae5ce6ec08e0ce7fe3c98c032df5 /tests | |
| parent | 7682321de9195bf903d1cc1d8df87d0f9522636b (diff) | |
| parent | 38212d5104e22028485eb90ff362c27c1ad7a7ec (diff) | |
| download | edify-433d41bf5887e61cc570a874e244e226c25b8a41.tar.xz edify-433d41bf5887e61cc570a874e244e226c25b8a41.zip | |
feat(library): new ipv4/ipv6/iso_date/zip_code/email_rfc_5322 validators + real-world corpus hardening + guarantee docstrings (#283)
Ships the validator-hardening epic and splits the bench-baseline
regenerate job into its own workflow.
## New validators
- **`ipv4`** — strict IPv4 dotted-quad. Splits the shape out of the
unified `ip` for callers who need v4-only.
- **`ipv6`** — every documented IPv6 form: full 8-group,
`::`-compressed, link-local `%zone`, IPv4-mapped `::ffff:1.2.3.4`, and
the hybrid IPv4-suffix. Splits the shape out of `ip` the same way.
- **`iso_date`** — strict ISO 8601 date shape `YYYY-MM-DD`. Distinct
from the existing `datetime` (which includes a time component) and the
loose `date` (which accepts many separators).
- **`zip_code`** — US ZIP or ZIP+4 postal-code shape.
- **`email_rfc_5322`** — the strict RFC 5322 mailbox subset already
inside `email`, exposed as its own callable so downstream callers can
pick permissive vs strict semantics without composing themselves.
## Real-world corpus hardening
- **`tests/library/corpora/<name>.toml`** — per-validator TOML files
with `accepts` and `rejects` lists (233 cases across 14 validators).
Adding a new validator just means dropping in a new TOML.
- **`tests/library/hardening.test.py`** — parametrized test that walks
every corpus file, resolves the validator from `edify.library`, and
asserts the boolean verdict matches the expected side. `pytest -k
hardening` runs the whole corpus in under half a second.
- Coverage: `email`, `email_rfc_5322`, `url`, `ipv4`, `ipv6`, `mac`,
`uuid`, `guid`, `ssn`, `date`, `iso_date`, `phone`, `zip_code`,
`password`.
## Guarantee documentation pass
- Every hardened validator's module docstring now spells out what it
does and does not guarantee — shape vs semantics, anchoring, case
sensitivity, structural exclusions. Callers no longer have to grep the
regex or read the source to know whether `mac(...)` accepts EUI-64 or
whether `iso_date(...)` validates calendar correctness.
- The `password` validator gets a first-class guarantee block covering
the default policy (min length, class thresholds, special-char set) and
the passphrase-strength and non-ASCII limits it deliberately does not
check.
## CI hygiene — split bench-baseline job
- The `bench: regenerate runner baseline` job moves out of `build` into
its own `.github/workflows/bench-baseline.yml`. It only registers when
workflow_dispatch fires with a typed `YES` confirmation.
- Every push and pull_request stops surfacing the two skipped
baseline-regen checks that were appearing on every commit.
- The runtime behavior is unchanged: baselines are still
runner-generated and committed back with `contents: write` permission.
Closes #78, closes #152, closes #153, closes #156, closes #157, closes
#158, closes #159, closes #160, closes #161, closes #162, closes #163,
closes #164, closes #165, closes #166, closes #167, closes #168, closes
#169.
Diffstat (limited to 'tests')
85 files changed, 370 insertions, 2 deletions
diff --git a/tests/docs/snapshots.test.py b/tests/docs/snapshots.test.py index 75523ee..5b97ddb 100644 --- a/tests/docs/snapshots.test.py +++ b/tests/docs/snapshots.test.py @@ -72,9 +72,11 @@ def _discover_blocks(): yield rst_path, block_start, block_source, relative_stem -def _snapshot_bodies_for_block(namespace: dict) -> str: +def _snapshot_bodies_for_block(namespace: dict, pre_exec_names: frozenset[str]) -> str: interesting_pairs = [] for identifier, value in namespace.items(): + if identifier in pre_exec_names: + continue if identifier.startswith("_") or identifier in {"edify", "Pattern", "Regex"}: continue if isinstance(value, Regex): @@ -124,8 +126,9 @@ def test_doc_code_block_produces_the_snapshotted_regex( if _ON_PYPY and (stem_string, block_start) in _BLOCKS_SKIPPED_ON_PYPY: pytest.skip("doc block hits PyPy's re.DEBUG upstream disassembler bug") namespace = _prepared_exec_namespace() + pre_exec_names = frozenset(namespace) exec(compile(block_source, str(rst_path), "exec"), namespace) - rendered = _snapshot_bodies_for_block(namespace) + rendered = _snapshot_bodies_for_block(namespace, pre_exec_names) snapshot_path = _SNAPSHOT_ROOT / stem_string / f"{block_start:04d}.regex" assert_snapshot(rendered, snapshot_path) diff --git a/tests/library/corpora/date.toml b/tests/library/corpora/date.toml new file mode 100644 index 0000000..0d5133b --- /dev/null +++ b/tests/library/corpora/date.toml @@ -0,0 +1,22 @@ +accepts = [ + "2026-07-15", + "07/15/2026", + "15-07-2026", + "2026/07/15", + "15.07.2026", + "2026.07.15", + "20260715", + "1/1/2000", +] + +rejects = [ + "", + "not a date", + "2026", + "2026-7", + "20260", + "2026-07-15T10:30", + "2026-07-15 extra", + " 2026-07-15", + "abcd-ef-gh", +] diff --git a/tests/library/corpora/email.toml b/tests/library/corpora/email.toml new file mode 100644 index 0000000..bd32ca7 --- /dev/null +++ b/tests/library/corpora/email.toml @@ -0,0 +1,25 @@ +accepts = [ + "[email protected]", + "[email protected]", + "[email protected]", + "[email protected]", + "[email protected]", + "[email protected]", + "[email protected]", + "[email protected]", + "user@[192.0.2.1]", +] + +rejects = [ + "", + " ", + "plainaddress", + "@no-local.example.com", + "no-at-sign.example.com", + "spaces in [email protected]", + "user@", + "[email protected]", + "user@example", + "user@@example.com", + "[email protected]", +] diff --git a/tests/library/corpora/email_rfc_5322.toml b/tests/library/corpora/email_rfc_5322.toml new file mode 100644 index 0000000..b4f04d5 --- /dev/null +++ b/tests/library/corpora/email_rfc_5322.toml @@ -0,0 +1,20 @@ +accepts = [ + "[email protected]", + "[email protected]", + "user@[192.0.2.1]", + "[email protected]", + "[email protected]", + "[email protected]", +] + +rejects = [ + "", + "plainaddress", + "@no-local.example.com", + "user@", + "user@@example.com", + "unquoted [email protected]", + "user@example", + "[email protected]", + "[email protected]", +] diff --git a/tests/library/corpora/guid.toml b/tests/library/corpora/guid.toml new file mode 100644 index 0000000..fa5d7d9 --- /dev/null +++ b/tests/library/corpora/guid.toml @@ -0,0 +1,16 @@ +accepts = [ + "01234567-89ab-cdef-0123-456789abcdef", + "{01234567-89AB-CDEF-0123-456789ABCDEF}", + "AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE", + "12345678-90ab-cdef-1234-567890abcdef", + "{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}", +] + +rejects = [ + "", + "not-a-guid", + "012345678-9ab-cdef-0123-456789abcdef", + "01234567-89ab-cdef-0123-456789abcde", + "01234567-89ab-cdef-0123-456789abcdefg", + "01234567-89abcdef-0123-456789abcdef", +] diff --git a/tests/library/corpora/ipv4.toml b/tests/library/corpora/ipv4.toml new file mode 100644 index 0000000..9883b48 --- /dev/null +++ b/tests/library/corpora/ipv4.toml @@ -0,0 +1,27 @@ +accepts = [ + "0.0.0.0", + "127.0.0.1", + "192.168.1.1", + "10.0.0.1", + "172.16.254.1", + "255.255.255.255", + "8.8.8.8", + "1.1.1.1", +] + +rejects = [ + "", + "256.0.0.1", + "300.1.1.1", + "1.2.3", + "1.2.3.4.5", + "1.2.3.4.", + ".1.2.3.4", + "01.2.3.4", + "1.2.3.04", + "1.2.3.4 ", + " 1.2.3.4", + "999.999.999.999", + "not.an.ip.addr", + "a.b.c.d", +] diff --git a/tests/library/corpora/ipv6.toml b/tests/library/corpora/ipv6.toml new file mode 100644 index 0000000..30f4908 --- /dev/null +++ b/tests/library/corpora/ipv6.toml @@ -0,0 +1,24 @@ +accepts = [ + "::", + "::1", + "2001:db8::", + "2001:db8::1", + "2001:0db8:85a3:0000:0000:8a2e:0370:7334", + "2001:db8:85a3::8a2e:370:7334", + "fe80::1", + "::ffff:192.0.2.1", + "2001:db8::192.0.2.1", + "fe80::1%eth0", +] + +rejects = [ + "", + "not an ipv6", + "192.0.2.1", + "2001:db8:::1", + "2001:db8::gggg", + "2001:db8::1::2", + "2001:db8:85a3:0000:0000:8a2e:0370:7334:extra", + ":", + "1:2:3:4:5:6:7", +] diff --git a/tests/library/corpora/iso_date.toml b/tests/library/corpora/iso_date.toml new file mode 100644 index 0000000..5f4b41e --- /dev/null +++ b/tests/library/corpora/iso_date.toml @@ -0,0 +1,21 @@ +accepts = [ + "2026-07-15", + "1999-01-01", + "2000-12-31", + "2026-02-30", + "0001-01-01", + "9999-12-31", +] + +rejects = [ + "", + "07/15/2026", + "2026-7-15", + "2026-07-5", + "26-07-15", + "2026-07-15T00:00:00", + "2026-07-15Z", + " 2026-07-15", + "2026-07-15 ", + "abcd-ef-gh", +] diff --git a/tests/library/corpora/mac.toml b/tests/library/corpora/mac.toml new file mode 100644 index 0000000..08bd777 --- /dev/null +++ b/tests/library/corpora/mac.toml @@ -0,0 +1,21 @@ +accepts = [ + "00:00:5e:00:53:af", + "00-00-5e-00-53-af", + "AA:BB:CC:DD:EE:FF", + "aa:bb:cc:dd:ee:ff", + "01:23:45:67:89:AB", + "de-ad-be-ef-00-01", +] + +rejects = [ + "", + "00:00:5e:00:53", + "00:00:5e:00:53:af:00", + "0:0:5e:0:53:af", + "gg:hh:ii:jj:kk:ll", + "00:00:5e:00:53:zz", + "00.00.5e.00.53.af", + "00 00 5e 00 53 af", + " 00:00:5e:00:53:af", + "00:00:5e:00:53:af ", +] diff --git a/tests/library/corpora/password.toml b/tests/library/corpora/password.toml new file mode 100644 index 0000000..3861a7b --- /dev/null +++ b/tests/library/corpora/password.toml @@ -0,0 +1,21 @@ +accepts = [ + "Password1!", + "S3cure#Pass", + "Abcdef1@", + "LongerPassword2$", + "T3sting.Password", + "Str0ng!Pass", +] + +rejects = [ + "", + "short", + "password", + "PASSWORD", + "Password", + "Password1", + "password1!", + "PASSWORD1!", + "12345678", + "!!!!!!!!", +] diff --git a/tests/library/corpora/phone.toml b/tests/library/corpora/phone.toml new file mode 100644 index 0000000..7abe2f7 --- /dev/null +++ b/tests/library/corpora/phone.toml @@ -0,0 +1,17 @@ +accepts = [ + "+1 555 123 4567", + "+44 20 7946 0958", + "555-123-4567", + "555.123.4567", + "+1-555-123-4567", + "5551234567", + "+81 3-1234-5678", +] + +rejects = [ + "", + "not a phone", + "abc-def-ghij", + " ", + "555--123--4567", +] diff --git a/tests/library/corpora/ssn.toml b/tests/library/corpora/ssn.toml new file mode 100644 index 0000000..81b0610 --- /dev/null +++ b/tests/library/corpora/ssn.toml @@ -0,0 +1,23 @@ +accepts = [ + "100-22-3333", + "555-44-6666", + "111-22-3333", + "213-45-6789", + "123-45-6789", +] + +rejects = [ + "", + "000-22-3333", + "666-22-3333", + "900-22-3333", + "999-22-3333", + "123-00-4567", + "123-45-0000", + "12-34-5678", + "123-4-5678", + "123-45-678", + "123 45 6789", + "1234-56-789", + "abc-de-fghi", +] diff --git a/tests/library/corpora/url.toml b/tests/library/corpora/url.toml new file mode 100644 index 0000000..4ac3b6c --- /dev/null +++ b/tests/library/corpora/url.toml @@ -0,0 +1,23 @@ +accepts = [ + "http://example.com", + "https://example.com", + "https://www.example.com", + "https://sub.example.com/path/to/resource", + "https://example.com/path?query=value&other=1", + "https://example.com:8080/path", + "http://example.co.uk", + "https://example.com/path#fragment", + "http://192.0.2.1", + "https://example.com/~user/", +] + +rejects = [ + "", + "not a url", + "example", + "://missing-scheme", + "http://", + "javascript:alert(1)", + " http://example.com", + "http://example .com", +] diff --git a/tests/library/corpora/uuid.toml b/tests/library/corpora/uuid.toml new file mode 100644 index 0000000..546ab8d --- /dev/null +++ b/tests/library/corpora/uuid.toml @@ -0,0 +1,22 @@ +accepts = [ + "01234567-89ab-1cde-8f01-23456789abcd", + "01234567-89ab-2cde-9f01-23456789abcd", + "01234567-89ab-4cde-8f01-23456789abcd", + "01234567-89ab-5cde-9f01-23456789abcd", + "550e8400-e29b-41d4-a716-446655440000", + "6ba7b810-9dad-11d1-80b4-00c04fd430c8", + "0f8fad5b-d9cb-469f-a165-70867728950e", +] + +rejects = [ + "", + "not-a-uuid", + "01234567-89ab-6cde-8f01-23456789abcd", + "01234567-89ab-1cde-cf01-23456789abcd", + "0123456789ab1cde8f0123456789abcd", + "01234567-89ab-1cde-8f01-23456789abc", + "01234567-89ab-1cde-8f01-23456789abcde", + "01234567-89ab-1cde-8f01-23456789abcg", + " 01234567-89ab-1cde-8f01-23456789abcd", + "01234567-89ab-1cde-8f01-23456789abcd ", +] diff --git a/tests/library/corpora/zip_code.toml b/tests/library/corpora/zip_code.toml new file mode 100644 index 0000000..3320840 --- /dev/null +++ b/tests/library/corpora/zip_code.toml @@ -0,0 +1,21 @@ +accepts = [ + "00000", + "12345", + "99999", + "12345-6789", + "90210-1234", + "00501-0001", +] + +rejects = [ + "", + "1234", + "123456", + "12345-", + "12345-67", + "12345-67890", + "abcde", + "12345 6789", + " 12345", + "12345 ", +] diff --git a/tests/library/hardening.test.py b/tests/library/hardening.test.py new file mode 100644 index 0000000..0c8305a --- /dev/null +++ b/tests/library/hardening.test.py @@ -0,0 +1,57 @@ +"""Real-world corpus hardening tests for every hand-picked library validator. + +Each corpus file under ``tests/library/corpora/<name>.toml`` lists ``accepts`` +and ``rejects`` — strings the named validator must accept or reject exactly. +Adding a new validator only means dropping a new TOML file next to the others; +the parametrization discovers it at collection time. +""" + +from __future__ import annotations + +import tomllib +from pathlib import Path + +import pytest + +import edify.library as library_module +from edify import Pattern + +_CORPUS_ROOT = Path(__file__).parent / "corpora" + + +def _corpus_cases(): + for corpus_path in sorted(_CORPUS_ROOT.glob("*.toml")): + validator_name = corpus_path.stem + validator = getattr(library_module, validator_name) + if not isinstance(validator, Pattern): + continue + parsed = tomllib.loads(corpus_path.read_text()) + for accept_input in parsed.get("accepts", []): + yield validator_name, validator, "accept", accept_input + for reject_input in parsed.get("rejects", []): + yield validator_name, validator, "reject", reject_input + + +_CASES = list(_corpus_cases()) + + + ("validator_name", "validator", "expected_verdict", "input_string"), + _CASES, + ids=[ + f"{name}-{verdict}-{index}" + for index, (name, _validator, verdict, _input_string) in enumerate(_CASES) + ], +) +def test_library_validator_matches_the_committed_corpus( + validator_name, validator, expected_verdict, input_string +): + observed = validator(input_string) + if expected_verdict == "accept": + assert observed is True, ( + f"validator {validator_name!r} rejected {input_string!r} but corpus expects accept" + ) + else: + assert observed is False, ( + f"validator {validator_name!r} accepted {input_string!r} but corpus expects reject" + ) diff --git a/tests/snapshots/docs/built-in/index/0028.regex b/tests/snapshots/docs/built-in/index/0028.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/built-in/index/0028.regex +++ b/tests/snapshots/docs/built-in/index/0028.regex diff --git a/tests/snapshots/docs/built-in/index/0034.regex b/tests/snapshots/docs/built-in/index/0034.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/built-in/index/0034.regex +++ b/tests/snapshots/docs/built-in/index/0034.regex diff --git a/tests/snapshots/docs/built-in/index/0064.regex b/tests/snapshots/docs/built-in/index/0064.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/built-in/index/0064.regex +++ b/tests/snapshots/docs/built-in/index/0064.regex diff --git a/tests/snapshots/docs/built-in/index/0115.regex b/tests/snapshots/docs/built-in/index/0115.regex Binary files differindex bfea61d..e69de29 100644 --- a/tests/snapshots/docs/built-in/index/0115.regex +++ b/tests/snapshots/docs/built-in/index/0115.regex diff --git a/tests/snapshots/docs/built-in/index/0128.regex b/tests/snapshots/docs/built-in/index/0128.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/built-in/index/0128.regex +++ b/tests/snapshots/docs/built-in/index/0128.regex diff --git a/tests/snapshots/docs/built-in/index/0160.regex b/tests/snapshots/docs/built-in/index/0160.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/built-in/index/0160.regex +++ b/tests/snapshots/docs/built-in/index/0160.regex diff --git a/tests/snapshots/docs/built-in/index/0199.regex b/tests/snapshots/docs/built-in/index/0199.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/built-in/index/0199.regex +++ b/tests/snapshots/docs/built-in/index/0199.regex diff --git a/tests/snapshots/docs/built-in/index/0957.regex b/tests/snapshots/docs/built-in/index/0957.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/built-in/index/0957.regex +++ b/tests/snapshots/docs/built-in/index/0957.regex diff --git a/tests/snapshots/docs/built-in/index/0983.regex b/tests/snapshots/docs/built-in/index/0983.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/built-in/index/0983.regex +++ b/tests/snapshots/docs/built-in/index/0983.regex diff --git a/tests/snapshots/docs/built-in/index/1001.regex b/tests/snapshots/docs/built-in/index/1001.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/built-in/index/1001.regex +++ b/tests/snapshots/docs/built-in/index/1001.regex diff --git a/tests/snapshots/docs/built-in/index/1017.regex b/tests/snapshots/docs/built-in/index/1017.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/built-in/index/1017.regex +++ b/tests/snapshots/docs/built-in/index/1017.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0019.regex b/tests/snapshots/docs/regex-builder/builder/index/0019.regex Binary files differindex 3a6abd5..e69de29 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0019.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0019.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0044.regex b/tests/snapshots/docs/regex-builder/builder/index/0044.regex Binary files differindex fd99ebb..2da4cc7 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0044.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0044.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0059.regex b/tests/snapshots/docs/regex-builder/builder/index/0059.regex Binary files differindex 8f6a9c7..ce62c83 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0059.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0059.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0080.regex b/tests/snapshots/docs/regex-builder/builder/index/0080.regex Binary files differindex f8428de..102648a 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0080.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0080.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0103.regex b/tests/snapshots/docs/regex-builder/builder/index/0103.regex Binary files differindex 1829d24..e1fa18e 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0103.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0103.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0120.regex b/tests/snapshots/docs/regex-builder/builder/index/0120.regex Binary files differindex 9cd58c7..4506fef 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0120.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0120.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0139.regex b/tests/snapshots/docs/regex-builder/builder/index/0139.regex Binary files differindex df37fb5..c88ce12 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0139.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0139.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0156.regex b/tests/snapshots/docs/regex-builder/builder/index/0156.regex Binary files differindex b460d45..0c6af77 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0156.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0156.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0175.regex b/tests/snapshots/docs/regex-builder/builder/index/0175.regex Binary files differindex 0c33843..c15c7e5 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0175.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0175.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0189.regex b/tests/snapshots/docs/regex-builder/builder/index/0189.regex Binary files differindex 9186a50..f7ac50f 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0189.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0189.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0201.regex b/tests/snapshots/docs/regex-builder/builder/index/0201.regex Binary files differindex 3734389..58060dc 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0201.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0201.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0216.regex b/tests/snapshots/docs/regex-builder/builder/index/0216.regex Binary files differindex 75e1c54..3de05f2 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0216.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0216.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0232.regex b/tests/snapshots/docs/regex-builder/builder/index/0232.regex Binary files differindex 495a4a2..b2daf0f 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0232.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0232.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0248.regex b/tests/snapshots/docs/regex-builder/builder/index/0248.regex Binary files differindex d51fcf6..eb99a63 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0248.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0248.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0265.regex b/tests/snapshots/docs/regex-builder/builder/index/0265.regex Binary files differindex d62f468..48048d5 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0265.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0265.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0293.regex b/tests/snapshots/docs/regex-builder/builder/index/0293.regex Binary files differindex a7833cd..b8c3cf2 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0293.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0293.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0318.regex b/tests/snapshots/docs/regex-builder/builder/index/0318.regex Binary files differindex 7b80739..f732ed4 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0318.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0318.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0347.regex b/tests/snapshots/docs/regex-builder/builder/index/0347.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0347.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0347.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0371.regex b/tests/snapshots/docs/regex-builder/builder/index/0371.regex Binary files differindex c8c8e22..f10e97e 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0371.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0371.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0421.regex b/tests/snapshots/docs/regex-builder/builder/index/0421.regex Binary files differindex d16376a..c130394 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0421.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0421.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0445.regex b/tests/snapshots/docs/regex-builder/builder/index/0445.regex Binary files differindex 3a62450..cb4c442 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0445.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0445.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0469.regex b/tests/snapshots/docs/regex-builder/builder/index/0469.regex Binary files differindex 7d9fa46..37ed6e9 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0469.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0469.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0493.regex b/tests/snapshots/docs/regex-builder/builder/index/0493.regex Binary files differindex 470123c..657ffbd 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0493.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0493.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0514.regex b/tests/snapshots/docs/regex-builder/builder/index/0514.regex Binary files differindex ad1e9ea..ae0718c 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0514.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0514.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0535.regex b/tests/snapshots/docs/regex-builder/builder/index/0535.regex Binary files differindex 8b71c9d..265763b 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0535.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0535.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0554.regex b/tests/snapshots/docs/regex-builder/builder/index/0554.regex Binary files differindex 7098f9c..3f1635a 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0554.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0554.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0573.regex b/tests/snapshots/docs/regex-builder/builder/index/0573.regex Binary files differindex b77a507..3fc175f 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0573.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0573.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0592.regex b/tests/snapshots/docs/regex-builder/builder/index/0592.regex Binary files differindex 29e3ccc..5888bc7 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0592.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0592.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0611.regex b/tests/snapshots/docs/regex-builder/builder/index/0611.regex Binary files differindex d115de0..5c873e9 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0611.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0611.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0630.regex b/tests/snapshots/docs/regex-builder/builder/index/0630.regex Binary files differindex 14e843f..b37ced0 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0630.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0630.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0649.regex b/tests/snapshots/docs/regex-builder/builder/index/0649.regex Binary files differindex 5dbd654..7c6294d 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0649.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0649.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0668.regex b/tests/snapshots/docs/regex-builder/builder/index/0668.regex Binary files differindex 1526551..3f444ff 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0668.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0668.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0687.regex b/tests/snapshots/docs/regex-builder/builder/index/0687.regex Binary files differindex 51fc73e..0be6e37 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0687.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0687.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0706.regex b/tests/snapshots/docs/regex-builder/builder/index/0706.regex Binary files differindex 5a1cd83..3d6b76b 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0706.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0706.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0725.regex b/tests/snapshots/docs/regex-builder/builder/index/0725.regex Binary files differindex ffec79c..fe1cd7f 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0725.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0725.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0744.regex b/tests/snapshots/docs/regex-builder/builder/index/0744.regex Binary files differindex 9321e99..d878e68 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0744.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0744.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0762.regex b/tests/snapshots/docs/regex-builder/builder/index/0762.regex Binary files differindex 3c348f5..9cc8684 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0762.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0762.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0780.regex b/tests/snapshots/docs/regex-builder/builder/index/0780.regex Binary files differindex b76ca12..d9e3092 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0780.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0780.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0798.regex b/tests/snapshots/docs/regex-builder/builder/index/0798.regex Binary files differindex 09c76e6..f0ed1dd 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0798.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0798.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0816.regex b/tests/snapshots/docs/regex-builder/builder/index/0816.regex Binary files differindex 2404b1d..d1882c9 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0816.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0816.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0834.regex b/tests/snapshots/docs/regex-builder/builder/index/0834.regex Binary files differindex cd4745e..43c0cb8 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0834.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0834.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0852.regex b/tests/snapshots/docs/regex-builder/builder/index/0852.regex Binary files differindex cd83a68..8c19bb1 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0852.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0852.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0892.regex b/tests/snapshots/docs/regex-builder/builder/index/0892.regex Binary files differindex 57c8680..a3f699e 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0892.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0892.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0913.regex b/tests/snapshots/docs/regex-builder/builder/index/0913.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0913.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0913.regex diff --git a/tests/snapshots/docs/regex-builder/builder/index/0942.regex b/tests/snapshots/docs/regex-builder/builder/index/0942.regex Binary files differindex a75fda3..4d14633 100644 --- a/tests/snapshots/docs/regex-builder/builder/index/0942.regex +++ b/tests/snapshots/docs/regex-builder/builder/index/0942.regex diff --git a/tests/snapshots/docs/regex-builder/flags/index/0026.regex b/tests/snapshots/docs/regex-builder/flags/index/0026.regex Binary files differindex 2404b1d..d1882c9 100644 --- a/tests/snapshots/docs/regex-builder/flags/index/0026.regex +++ b/tests/snapshots/docs/regex-builder/flags/index/0026.regex diff --git a/tests/snapshots/docs/regex-builder/flags/index/0038.regex b/tests/snapshots/docs/regex-builder/flags/index/0038.regex Binary files differindex 2404b1d..d1882c9 100644 --- a/tests/snapshots/docs/regex-builder/flags/index/0038.regex +++ b/tests/snapshots/docs/regex-builder/flags/index/0038.regex diff --git a/tests/snapshots/docs/regex-builder/flags/index/0051.regex b/tests/snapshots/docs/regex-builder/flags/index/0051.regex Binary files differindex 2404b1d..d1882c9 100644 --- a/tests/snapshots/docs/regex-builder/flags/index/0051.regex +++ b/tests/snapshots/docs/regex-builder/flags/index/0051.regex diff --git a/tests/snapshots/docs/regex-builder/flags/index/0065.regex b/tests/snapshots/docs/regex-builder/flags/index/0065.regex Binary files differindex 2404b1d..d1882c9 100644 --- a/tests/snapshots/docs/regex-builder/flags/index/0065.regex +++ b/tests/snapshots/docs/regex-builder/flags/index/0065.regex diff --git a/tests/snapshots/docs/regex-builder/flags/index/0080.regex b/tests/snapshots/docs/regex-builder/flags/index/0080.regex Binary files differindex 2404b1d..d1882c9 100644 --- a/tests/snapshots/docs/regex-builder/flags/index/0080.regex +++ b/tests/snapshots/docs/regex-builder/flags/index/0080.regex diff --git a/tests/snapshots/docs/regex-builder/flags/index/0094.regex b/tests/snapshots/docs/regex-builder/flags/index/0094.regex Binary files differindex 2404b1d..d1882c9 100644 --- a/tests/snapshots/docs/regex-builder/flags/index/0094.regex +++ b/tests/snapshots/docs/regex-builder/flags/index/0094.regex diff --git a/tests/snapshots/docs/upgrading/0.3-to-1.0/0018.regex b/tests/snapshots/docs/upgrading/0.3-to-1.0/0018.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/upgrading/0.3-to-1.0/0018.regex +++ b/tests/snapshots/docs/upgrading/0.3-to-1.0/0018.regex diff --git a/tests/snapshots/docs/upgrading/0.3-to-1.0/0037.regex b/tests/snapshots/docs/upgrading/0.3-to-1.0/0037.regex Binary files differindex 4ba98bc..e69de29 100644 --- a/tests/snapshots/docs/upgrading/0.3-to-1.0/0037.regex +++ b/tests/snapshots/docs/upgrading/0.3-to-1.0/0037.regex diff --git a/tests/snapshots/library/email_rfc_5322.regex b/tests/snapshots/library/email_rfc_5322.regex new file mode 100644 index 0000000..6557f12 --- /dev/null +++ b/tests/snapshots/library/email_rfc_5322.regex @@ -0,0 +1 @@ +^(?:(?:[a-z0-9!\#\$%\&'\*\+/=\?\^_`\{\|\}\~\-])+(?:\.(?:[a-z0-9!\#\$%\&'\*\+/=\?\^_`\{\|\}\~\-])+)*|"(?:(?:[-\\-!#-[]-]|\\[- \\-]))*")@(?:(?:[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|[a-z0-9\-]*[a-z0-9]:(?:(?:[-\\-!-ZS-]|\\[- \\-]))+)\])$
\ No newline at end of file diff --git a/tests/snapshots/library/ipv4.regex b/tests/snapshots/library/ipv4.regex new file mode 100644 index 0000000..13e689f --- /dev/null +++ b/tests/snapshots/library/ipv4.regex @@ -0,0 +1 @@ +^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$
\ No newline at end of file diff --git a/tests/snapshots/library/ipv6.regex b/tests/snapshots/library/ipv6.regex new file mode 100644 index 0000000..a1636ac --- /dev/null +++ b/tests/snapshots/library/ipv6.regex @@ -0,0 +1 @@ +^(?:(?:(?:[0-9a-fA-F]){1,4}:){7}(?:[0-9a-fA-F]){1,4}|(?:(?:[0-9a-fA-F]){1,4}:){1,7}:|(?:(?:[0-9a-fA-F]){1,4}:){1,6}:(?:[0-9a-fA-F]){1,4}|(?:(?:[0-9a-fA-F]){1,4}:){1,5}(?::(?:[0-9a-fA-F]){1,4}){1,2}|(?:(?:[0-9a-fA-F]){1,4}:){1,4}(?::(?:[0-9a-fA-F]){1,4}){1,3}|(?:(?:[0-9a-fA-F]){1,4}:){1,3}(?::(?:[0-9a-fA-F]){1,4}){1,4}|(?:(?:[0-9a-fA-F]){1,4}:){1,2}(?::(?:[0-9a-fA-F]){1,4}){1,5}|(?:[0-9a-fA-F]){1,4}:(?:(?::(?:[0-9a-fA-F]){1,4}){1,6})|:(?:(?:(?::(?:[0-9a-fA-F]){1,4}){1,7}|[:]))|fe80:(?::(?:[0-9a-fA-F]){0,4}){0,4}%[0-9a-zA-Z]+|::(?:ffff(?::0{1,4})?:)?(?:(?:25[0-5]|(?:(?:2[0-4]|1?\d))?\d)\.){3}(?:25[0-5]|(?:(?:2[0-4]|1?\d))?\d)|(?:(?:[0-9a-fA-F]){1,4}:){1,4}:(?:(?:25[0-5]|(?:(?:2[0-4]|1?\d))?\d)\.){3}(?:25[0-5]|(?:(?:2[0-4]|1?\d))?\d))$
\ No newline at end of file diff --git a/tests/snapshots/library/iso_date.regex b/tests/snapshots/library/iso_date.regex new file mode 100644 index 0000000..85341c2 --- /dev/null +++ b/tests/snapshots/library/iso_date.regex @@ -0,0 +1 @@ +^\d{4}\-\d{2}\-\d{2}$
\ No newline at end of file diff --git a/tests/snapshots/library/zip_code.regex b/tests/snapshots/library/zip_code.regex new file mode 100644 index 0000000..84a7b93 --- /dev/null +++ b/tests/snapshots/library/zip_code.regex @@ -0,0 +1 @@ +^\d{5}(?:\-\d{4})?$
\ No newline at end of file |
