-
-
Notifications
You must be signed in to change notification settings - Fork 170
/
super_test.py
123 lines (112 loc) · 3.32 KB
/
super_test.py
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
import pytest
from pyupgrade import _fix_py3_plus
@pytest.mark.parametrize(
's',
(
# syntax error
'x(',
'class C(Base):\n'
' def f(self):\n'
' super().f()\n',
# super class doesn't match class name
'class C(Base):\n'
' def f(self):\n'
' super(Base, self).f()\n',
# super outside of a class (technically legal!)
'def f(self):\n'
' super(C, self).f()\n',
# super used in a comprehension
'class C(Base):\n'
' def f(self):\n'
' return [super(C, self).f() for _ in ()]\n',
'class C(Base):\n'
' def f(self):\n'
' return {super(C, self).f() for _ in ()}\n',
'class C(Base):\n'
' def f(self):\n'
' return (super(C, self).f() for _ in ())\n',
'class C(Base):\n'
' def f(self):\n'
' return {True: super(C, self).f() for _ in ()}\n',
# nested comprehension
'class C(Base):\n'
' def f(self):\n'
' return [\n'
' (\n'
' [_ for _ in ()],\n'
' super(C, self).f(),\n'
' )\n'
' for _ in ()'
' ]\n',
# super in a closure
'class C(Base):\n'
' def f(self):\n'
' def g():\n'
' super(C, self).f()\n'
' g()\n',
'class C(Base):\n'
' def f(self):\n'
' g = lambda: super(C, self).f()\n'
' g()\n',
),
)
def test_fix_super_noop(s):
assert _fix_py3_plus(s, (3,)) == s
@pytest.mark.parametrize(
('s', 'expected'),
(
(
'class C(Base):\n'
' def f(self):\n'
' super(C, self).f()\n',
'class C(Base):\n'
' def f(self):\n'
' super().f()\n',
),
(
'class C(Base):\n'
' def f(self):\n'
' super (C, self).f()\n',
'class C(Base):\n'
' def f(self):\n'
' super ().f()\n',
),
(
'class Outer:\n'
' class C(Base):\n'
' def f(self):\n'
' super (C, self).f()\n',
'class Outer:\n'
' class C(Base):\n'
' def f(self):\n'
' super ().f()\n',
),
(
'class C(Base):\n'
' f = lambda self: super(C, self).f()\n',
'class C(Base):\n'
' f = lambda self: super().f()\n',
),
(
'class C(Base):\n'
' @classmethod\n'
' def f(cls):\n'
' super(C, cls).f()\n',
'class C(Base):\n'
' @classmethod\n'
' def f(cls):\n'
' super().f()\n',
),
pytest.param(
'class C:\n'
' async def foo(self):\n'
' super(C, self).foo()\n',
'class C:\n'
' async def foo(self):\n'
' super().foo()\n',
id='async def super',
),
),
)
def test_fix_super(s, expected):
assert _fix_py3_plus(s, (3,)) == expected