File: test_pattern_serialization.py

package info (click to toggle)
python-fastjsonschema 2.21.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,780 kB
  • sloc: python: 3,343; makefile: 88; sh: 18
file content (59 lines) | stat: -rw-r--r-- 1,930 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import re

from fastjsonschema.generator import serialize_regexes


# Examples
ENTRYPOINT_PATTERN = r"[^\[\s=]([^=]*[^\s=])?"
PEP508_IDENTIFIER_PATTERN = r"([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])"
PEP440_VERSION = r"""
    v?
    (?:
        (?:(?P<epoch>[0-9]+)!)?                           # epoch
        (?P<release>[0-9]+(?:\.[0-9]+)*)                  # release segment
        (?P<pre>                                          # pre-release
            [-_\.]?
            (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
            [-_\.]?
            (?P<pre_n>[0-9]+)?
        )?
        (?P<post>                                         # post release
            (?:-(?P<post_n1>[0-9]+))
            |
            (?:
                [-_\.]?
                (?P<post_l>post|rev|r)
                [-_\.]?
                (?P<post_n2>[0-9]+)?
            )
        )?
        (?P<dev>                                          # dev release
            [-_\.]?
            (?P<dev_l>dev)
            [-_\.]?
            (?P<dev_n>[0-9]+)?
        )?
    )
    (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
"""

EXAMPLES = {
    "unicode-identifier": re.compile(r"^(\w&[^0-9])\w*$", re.I),
    "entry-point": re.compile(f"^{ENTRYPOINT_PATTERN}$", re.I),
    "pep508-identifier": re.compile(f"^{PEP508_IDENTIFIER_PATTERN}$", re.I),
    # Regression tests:
    "issue-109": re.compile(r"^[ \r\n\t\S]+$"),
    # Some long regexes that would likely break with pprint:
    "pep-440": re.compile(r"^\s*" + PEP440_VERSION + r"\s*$", re.X | re.I)
}


def test_serialize_regexes():
    serialized = serialize_regexes(EXAMPLES)
    reconstructed = eval(serialized)
    for key, value in EXAMPLES.items():
        assert key in reconstructed
        evaluated = reconstructed[key]
        assert value.pattern == evaluated.pattern
        assert value.flags == evaluated.flags
        assert value == evaluated