File: test_dirty_equals.py

package info (click to toggle)
python-inline-snapshot 0.23.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,116 kB
  • sloc: python: 6,888; makefile: 34; sh: 28
file content (161 lines) | stat: -rw-r--r-- 3,235 bytes parent folder | download
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
import pytest

from inline_snapshot._inline_snapshot import snapshot
from inline_snapshot.testing._example import Example


@pytest.mark.xfail
def test_dirty_equals_repr():
    Example(
        """\
from inline_snapshot import snapshot
from dirty_equals import IsStr

def test_something():
    assert [IsStr()] == snapshot()
    """
    ).run_inline(
        ["--inline-snapshot=create"],
        changed_files=snapshot({}),
        raises=snapshot(
            """\
UsageError:
inline-snapshot uses `copy.deepcopy` to copy objects,
but the copied object is not equal to the original one:

original: [HasRepr(IsStr, '< type(obj) can not be compared with == >')]
copied:   [HasRepr(IsStr, '< type(obj) can not be compared with == >')]

Please fix the way your object is copied or your __eq__ implementation.
"""
        ),
    )


def test_compare_dirty_equals_twice() -> None:

    Example(
        """
from dirty_equals import IsStr
from inline_snapshot import snapshot

def test():
    for x in 'ab':
        assert x == snapshot(IsStr())
        assert [x,5] == snapshot([IsStr(),3])
        assert {'a':x,'b':5} == snapshot({'a':IsStr(),'b':3})

"""
    ).run_inline(
        ["--inline-snapshot=fix"],
        changed_files=snapshot(
            {
                "test_something.py": """\

from dirty_equals import IsStr
from inline_snapshot import snapshot

def test():
    for x in 'ab':
        assert x == snapshot(IsStr())
        assert [x,5] == snapshot([IsStr(),5])
        assert {'a':x,'b':5} == snapshot({'a':IsStr(),'b':5})

"""
            }
        ),
    )


def test_dirty_equals_in_unused_snapshot() -> None:

    Example(
        """
from dirty_equals import IsStr
from inline_snapshot import snapshot,Is

snapshot([IsStr(),3])
snapshot((IsStr(),3))
snapshot({1:IsStr(),2:3})
snapshot({1+1:2})

t=(1,2)
d={1:2}
l=[1,2]
snapshot([Is(t),Is(d),Is(l)])

def test():
    pass

"""
    ).run_inline(
        ["--inline-snapshot=fix"],
        changed_files=snapshot({}),
    )


def test_now_like_dirty_equals():
    # test for cases like https://github.com/15r10nk/inline-snapshot/issues/116

    Example(
        """
from dirty_equals import DirtyEquals
from inline_snapshot import snapshot


def test_time():

    now = 5

    class Now(DirtyEquals):
        def equals(self, other):
            return other == now

    assert 5 == snapshot(Now())

    now = 6

    assert 5 == snapshot(Now()), "different time"
"""
    ).run_inline(
        ["--inline-snapshot=fix"],
        changed_files=snapshot({}),
        raises=snapshot(
            """\
AssertionError:
different time\
"""
        ),
    )


def test_dirty_equals_with_changing_args() -> None:

    Example(
        """\
from dirty_equals import IsInt
from inline_snapshot import snapshot

def test_number():

    for i in range(5):
        assert ["a",i] == snapshot(["e",IsInt(gt=i-1,lt=i+1)])

"""
    ).run_inline(
        ["--inline-snapshot=fix"],
        changed_files=snapshot(
            {
                "test_something.py": """\
from dirty_equals import IsInt
from inline_snapshot import snapshot

def test_number():

    for i in range(5):
        assert ["a",i] == snapshot(["a",IsInt(gt=i-1,lt=i+1)])

"""
            }
        ),
    )