blob: ee5305fe8737fa2c053b0aae3cd3a5220860544f (
plain)
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
|
"""Check invalid value returned by __getnewargs__ """
# pylint: disable=too-few-public-methods,missing-docstring,no-self-use,import-error, useless-object-inheritance
import six
from missing import Missing
class FirstGoodGetNewArgs(object):
"""__getnewargs__ returns <type 'tuple'>"""
def __getnewargs__(self):
return (1, "2", 3)
class SecondGoodGetNewArgs(object):
"""__getnewargs__ returns <type 'tuple'>"""
def __getnewargs__(self):
return tuple()
class GetNewArgsMetaclass(type):
def __getnewargs__(cls):
return (1, 2, 3)
@six.add_metaclass(GetNewArgsMetaclass)
class ThirdGoodGetNewArgs(object):
"""GetNewArgs through the metaclass."""
class FirstBadGetNewArgs(object):
""" __getnewargs__ returns an integer """
def __getnewargs__(self): # [invalid-getnewargs-returned]
return 1
class SecondBadGetNewArgs(object):
""" __getnewargs__ returns str """
def __getnewargs__(self): # [invalid-getnewargs-returned]
return "(1, 2, 3)"
class ThirdBadGetNewArgs(object):
""" __getnewargs__ returns node which does not have 'value' in AST """
def __getnewargs__(self): # [invalid-getnewargs-returned]
return lambda: tuple(1, 2)
class AmbigousGetNewArgs(object):
""" Uninferable return value """
__getnewargs__ = lambda self: Missing
class AnotherAmbiguousGetNewArgs(object):
"""Potential uninferable return value"""
def __getnewargs__(self):
return tuple(Missing)
|