Passed
Branch master (2e0d62)
by Max
50s
created

tests.structured_data.test_match   A

Complexity

Total Complexity 22

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 42
dl 0
loc 56
rs 10
c 0
b 0
f 0
wmc 22
1
import pytest
2
3
4
def test_cant_use_keyword(match):
5
    with pytest.raises(ValueError):
6
        assert not match.Pattern('def')
7
8
9
def test_must_be_identifier(match):
10
    with pytest.raises(ValueError):
11
        assert not match.Pattern('1')
12
13
14
def test_matching(enum, match):
15
16
    @enum.enum
17
    class TestClass:
18
        StrPair: enum.Ctor[str, str]
19
    matcher = match.ValueMatcher(
20
        ((1, 2), TestClass.StrPair('a', 'b')))
21
    assert not matcher.match((
22
        (match.pat._, 4),
23
        match.pat._))
24
    assert matcher.matches is None
25
    structure = (
26
        match.pat.tup @ (1, match.pat.a),
27
        TestClass.StrPair(
28
            match.pat.b, match.pat.c))
29
    assert matcher.match(structure)
30
    assert matcher.matches == dict(tup=(1, 2), a=2, b='a', c='b')
31
    assert matcher.matches[match.pat.a, match.pat.b, match.pat.c, match.pat.tup] == (2, 'a', 'b', (1, 2))
32
    assert list(matcher.matches) == ['tup', 'a', 'b', 'c']  # Should preserve ordering.
33
    assert match.names(structure) == ['tup', 'a', 'b', 'c']
34
35
36
def test_as(match):
37
    pat = match.pat.hello
38
    assert pat @ match.pat._ is pat
39
40
41
def test_map_interface(match):
42
    matcher = match.ValueMatcher((1, 2, 3, 4))
43
    matcher.match((match.pat.a, match.pat._, match.pat._, match.pat.b))
44
    assert len(matcher.matches) == 2
45
    with pytest.raises(KeyError):
46
        assert not matcher.matches[None]
47
48
    matcher.matches[match.pat.c] = 7
49
    del matcher.matches[match.pat.c]
50
51
    with pytest.raises(TypeError):
52
        matcher.matches[None] = None
53
54
    with pytest.raises(KeyError):
55
        del matcher.matches[None]
56