1
- from copy import copy
1
+ from copy import copy , deepcopy
2
2
3
- from graphql .language import Node
3
+ from graphql .language import Location , Node , Source , Token , TokenKind
4
+ from graphql .pyutils import inspect
4
5
5
6
6
7
class SampleTestNode (Node ):
7
8
__slots__ = "alpha" , "beta"
8
9
9
10
11
+ def describe_token_class ():
12
+ def initializes ():
13
+ prev = Token (TokenKind .EQUALS , 10 , 11 , 1 , 2 )
14
+ token = Token (
15
+ kind = TokenKind .NAME ,
16
+ start = 11 ,
17
+ end = 12 ,
18
+ line = 1 ,
19
+ column = 3 ,
20
+ prev = prev ,
21
+ value = "n" ,
22
+ )
23
+ assert prev .kind == TokenKind .EQUALS
24
+ assert prev .start == 10
25
+ assert prev .end == 11
26
+ assert prev .line == 1
27
+ assert prev .column == 2
28
+ assert token .kind == TokenKind .NAME
29
+ assert token .start == 11
30
+ assert token .end == 12
31
+ assert token .line == 1
32
+ assert token .column == 3
33
+ assert token .prev is prev
34
+ assert token .value == "n"
35
+
36
+ def can_stringify ():
37
+ token = Token (TokenKind .NAME , 1 , 2 , 1 , 2 , value = "test" )
38
+ assert str (token ) == "Name 'test'"
39
+ assert token .desc == str (token )
40
+
41
+ def has_representation_with_line_and_column ():
42
+ token = Token (TokenKind .NAME , 1 , 2 , 1 , 2 , value = "test" )
43
+ assert repr (token ) == "<Token Name 'test' 1:2>"
44
+ assert inspect (token ) == repr (token )
45
+
46
+ def can_check_equality ():
47
+ token1 = Token (TokenKind .NAME , 1 , 2 , 1 , 2 , value = "test" )
48
+ token2 = Token (TokenKind .NAME , 1 , 2 , 1 , 2 , value = "test" )
49
+ assert token2 == token1
50
+ assert not token2 != token1
51
+ token3 = Token (TokenKind .NAME , 1 , 2 , 1 , 2 , value = "text" )
52
+ assert token3 != token1
53
+ token4 = Token (TokenKind .NAME , 1 , 4 , 1 , 2 , value = "test" )
54
+ assert token4 != token1
55
+ token5 = Token (TokenKind .NAME , 1 , 2 , 1 , 4 , value = "test" )
56
+ assert token5 != token1
57
+
58
+ def can_hash ():
59
+ token1 = Token (TokenKind .NAME , 1 , 2 , 1 , 2 , value = "hash" )
60
+ token2 = Token (TokenKind .NAME , 1 , 2 , 1 , 2 , value = "hash" )
61
+ assert token2 == token1
62
+ assert hash (token2 ) == hash (token1 )
63
+ token3 = Token (TokenKind .NAME , 1 , 2 , 1 , 2 , value = "bash" )
64
+ assert token3 != token1
65
+ assert hash (token3 ) != hash (token1 )
66
+
67
+ def can_copy ():
68
+ token1 = Token (TokenKind .NAME , 1 , 2 , 1 , 2 , value = "copy" )
69
+ token2 = copy (token1 )
70
+ assert token2 == token1
71
+ assert token2 is not token1
72
+
73
+
74
+ def describe_location_class ():
75
+ token1 = Token (TokenKind .NAME , 1 , 2 , 1 , 2 )
76
+ token2 = Token (TokenKind .NAME , 2 , 3 , 1 , 3 )
77
+ source = Source ("source" )
78
+
79
+ def initializes ():
80
+ loc = Location (1 , 2 , token1 , token2 , source )
81
+ assert loc .start == 1
82
+ assert loc .end == 2
83
+ assert loc .start_token is token1
84
+ assert loc .end_token is token2
85
+ assert loc .source is source
86
+
87
+ def can_stringify_with_start_and_end ():
88
+ loc = Location (1 , 2 , token1 , token2 , source )
89
+ assert str (loc ) == "1:2"
90
+
91
+ def has_representation_with_start_and_end ():
92
+ loc = Location (1 , 2 , token1 , token2 , source )
93
+ assert repr (loc ) == "<Location 1:2>"
94
+ assert inspect (loc ) == repr (loc )
95
+
96
+ def can_check_equality ():
97
+ loc1 = Location (1 , 2 , token1 , token2 , source )
98
+ loc2 = Location (1 , 2 , token1 , token2 , source )
99
+ assert loc2 == loc1
100
+ loc3 = Location (3 , 2 , token1 , token2 , source )
101
+ assert loc3 != loc1
102
+ loc4 = Location (1 , 4 , token1 , token2 , source )
103
+ assert loc4 != loc1
104
+
105
+ def can_check_equality_with_tuple_or_list ():
106
+ loc = Location (1 , 2 , token1 , token2 , source )
107
+ assert loc == (1 , 2 )
108
+ assert loc == [1 , 2 ]
109
+ assert not loc != (1 , 2 )
110
+ assert not loc != [1 , 2 ]
111
+ assert loc != (3 , 2 )
112
+ assert loc != [1 , 4 ]
113
+
114
+ def can_hash ():
115
+ loc1 = Location (1 , 2 , token1 , token2 , source )
116
+ loc2 = Location (1 , 2 , token1 , token2 , source )
117
+ assert loc2 == loc1
118
+ assert hash (loc2 ) == hash (loc1 )
119
+ loc3 = Location (1 , 3 , token1 , token2 , source )
120
+ assert loc3 != loc1
121
+ assert hash (loc3 ) != hash (loc1 )
122
+
123
+
10
124
def describe_node_class ():
11
125
def initializes_with_keywords ():
12
126
node = SampleTestNode (alpha = 1 , beta = 2 , loc = 0 )
@@ -32,17 +146,49 @@ def can_check_equality():
32
146
node = SampleTestNode (alpha = 1 , beta = 2 )
33
147
node2 = SampleTestNode (alpha = 1 , beta = 2 )
34
148
assert node2 == node
149
+ assert not node2 != node
35
150
node2 = SampleTestNode (alpha = 1 , beta = 1 )
36
151
assert node2 != node
37
152
node2 = Node (alpha = 1 , beta = 2 )
38
153
assert node2 != node
39
154
155
+ def can_hash ():
156
+ node = SampleTestNode (alpha = 1 , beta = 2 )
157
+ node2 = SampleTestNode (alpha = 1 , beta = 2 )
158
+ assert node == node2
159
+ assert node2 is not node
160
+ assert hash (node2 ) == hash (node )
161
+ node3 = SampleTestNode (alpha = 1 , beta = 3 )
162
+ assert node3 != node
163
+ assert hash (node3 ) != hash (node )
164
+
40
165
def can_create_shallow_copy ():
41
166
node = SampleTestNode (alpha = 1 , beta = 2 )
42
167
node2 = copy (node )
43
168
assert node2 is not node
44
169
assert node2 == node
45
170
171
+ def shallow_copy_is_really_shallow ():
172
+ node = SampleTestNode (alpha = 1 , beta = 2 )
173
+ node2 = SampleTestNode (alpha = node , beta = node )
174
+ node3 = copy (node2 )
175
+ assert node3 is not node2
176
+ assert node3 == node2
177
+ assert node3 .alpha is node2 .alpha
178
+ assert node3 .beta is node2 .beta
179
+
180
+ def can_create_deep_copy ():
181
+ alpha = SampleTestNode (alpha = 1 , beta = 2 )
182
+ beta = SampleTestNode (alpha = 3 , beta = 4 )
183
+ node = SampleTestNode (alpha = alpha , beta = beta )
184
+ node2 = deepcopy (node )
185
+ assert node2 is not node
186
+ assert node2 == node
187
+ assert node2 .alpha == alpha
188
+ assert node2 .alpha is not alpha
189
+ assert node2 .alpha == alpha
190
+ assert node2 .beta is not beta
191
+
46
192
def provides_snake_cased_kind_as_class_attribute ():
47
193
assert SampleTestNode .kind == "sample_test"
48
194
0 commit comments