]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Lib/lib2to3/tests/test_util.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Lib / lib2to3 / tests / test_util.py
CommitLineData
4710c53d 1""" Test suite for the code in fixer_util """\r
2\r
3# Testing imports\r
4from . import support\r
5\r
6# Python imports\r
7import os.path\r
8\r
9# Local imports\r
10from lib2to3.pytree import Node, Leaf\r
11from lib2to3 import fixer_util\r
12from lib2to3.fixer_util import Attr, Name, Call, Comma\r
13from lib2to3.pgen2 import token\r
14\r
15def parse(code, strip_levels=0):\r
16 # The topmost node is file_input, which we don't care about.\r
17 # The next-topmost node is a *_stmt node, which we also don't care about\r
18 tree = support.parse_string(code)\r
19 for i in range(strip_levels):\r
20 tree = tree.children[0]\r
21 tree.parent = None\r
22 return tree\r
23\r
24class MacroTestCase(support.TestCase):\r
25 def assertStr(self, node, string):\r
26 if isinstance(node, (tuple, list)):\r
27 node = Node(fixer_util.syms.simple_stmt, node)\r
28 self.assertEqual(str(node), string)\r
29\r
30\r
31class Test_is_tuple(support.TestCase):\r
32 def is_tuple(self, string):\r
33 return fixer_util.is_tuple(parse(string, strip_levels=2))\r
34\r
35 def test_valid(self):\r
36 self.assertTrue(self.is_tuple("(a, b)"))\r
37 self.assertTrue(self.is_tuple("(a, (b, c))"))\r
38 self.assertTrue(self.is_tuple("((a, (b, c)),)"))\r
39 self.assertTrue(self.is_tuple("(a,)"))\r
40 self.assertTrue(self.is_tuple("()"))\r
41\r
42 def test_invalid(self):\r
43 self.assertFalse(self.is_tuple("(a)"))\r
44 self.assertFalse(self.is_tuple("('foo') % (b, c)"))\r
45\r
46\r
47class Test_is_list(support.TestCase):\r
48 def is_list(self, string):\r
49 return fixer_util.is_list(parse(string, strip_levels=2))\r
50\r
51 def test_valid(self):\r
52 self.assertTrue(self.is_list("[]"))\r
53 self.assertTrue(self.is_list("[a]"))\r
54 self.assertTrue(self.is_list("[a, b]"))\r
55 self.assertTrue(self.is_list("[a, [b, c]]"))\r
56 self.assertTrue(self.is_list("[[a, [b, c]],]"))\r
57\r
58 def test_invalid(self):\r
59 self.assertFalse(self.is_list("[]+[]"))\r
60\r
61\r
62class Test_Attr(MacroTestCase):\r
63 def test(self):\r
64 call = parse("foo()", strip_levels=2)\r
65\r
66 self.assertStr(Attr(Name("a"), Name("b")), "a.b")\r
67 self.assertStr(Attr(call, Name("b")), "foo().b")\r
68\r
69 def test_returns(self):\r
70 attr = Attr(Name("a"), Name("b"))\r
71 self.assertEqual(type(attr), list)\r
72\r
73\r
74class Test_Name(MacroTestCase):\r
75 def test(self):\r
76 self.assertStr(Name("a"), "a")\r
77 self.assertStr(Name("foo.foo().bar"), "foo.foo().bar")\r
78 self.assertStr(Name("a", prefix="b"), "ba")\r
79\r
80\r
81class Test_Call(MacroTestCase):\r
82 def _Call(self, name, args=None, prefix=None):\r
83 """Help the next test"""\r
84 children = []\r
85 if isinstance(args, list):\r
86 for arg in args:\r
87 children.append(arg)\r
88 children.append(Comma())\r
89 children.pop()\r
90 return Call(Name(name), children, prefix)\r
91\r
92 def test(self):\r
93 kids = [None,\r
94 [Leaf(token.NUMBER, 1), Leaf(token.NUMBER, 2),\r
95 Leaf(token.NUMBER, 3)],\r
96 [Leaf(token.NUMBER, 1), Leaf(token.NUMBER, 3),\r
97 Leaf(token.NUMBER, 2), Leaf(token.NUMBER, 4)],\r
98 [Leaf(token.STRING, "b"), Leaf(token.STRING, "j", prefix=" ")]\r
99 ]\r
100 self.assertStr(self._Call("A"), "A()")\r
101 self.assertStr(self._Call("b", kids[1]), "b(1,2,3)")\r
102 self.assertStr(self._Call("a.b().c", kids[2]), "a.b().c(1,3,2,4)")\r
103 self.assertStr(self._Call("d", kids[3], prefix=" "), " d(b, j)")\r
104\r
105\r
106class Test_does_tree_import(support.TestCase):\r
107 def _find_bind_rec(self, name, node):\r
108 # Search a tree for a binding -- used to find the starting\r
109 # point for these tests.\r
110 c = fixer_util.find_binding(name, node)\r
111 if c: return c\r
112 for child in node.children:\r
113 c = self._find_bind_rec(name, child)\r
114 if c: return c\r
115\r
116 def does_tree_import(self, package, name, string):\r
117 node = parse(string)\r
118 # Find the binding of start -- that's what we'll go from\r
119 node = self._find_bind_rec('start', node)\r
120 return fixer_util.does_tree_import(package, name, node)\r
121\r
122 def try_with(self, string):\r
123 failing_tests = (("a", "a", "from a import b"),\r
124 ("a.d", "a", "from a.d import b"),\r
125 ("d.a", "a", "from d.a import b"),\r
126 (None, "a", "import b"),\r
127 (None, "a", "import b, c, d"))\r
128 for package, name, import_ in failing_tests:\r
129 n = self.does_tree_import(package, name, import_ + "\n" + string)\r
130 self.assertFalse(n)\r
131 n = self.does_tree_import(package, name, string + "\n" + import_)\r
132 self.assertFalse(n)\r
133\r
134 passing_tests = (("a", "a", "from a import a"),\r
135 ("x", "a", "from x import a"),\r
136 ("x", "a", "from x import b, c, a, d"),\r
137 ("x.b", "a", "from x.b import a"),\r
138 ("x.b", "a", "from x.b import b, c, a, d"),\r
139 (None, "a", "import a"),\r
140 (None, "a", "import b, c, a, d"))\r
141 for package, name, import_ in passing_tests:\r
142 n = self.does_tree_import(package, name, import_ + "\n" + string)\r
143 self.assertTrue(n)\r
144 n = self.does_tree_import(package, name, string + "\n" + import_)\r
145 self.assertTrue(n)\r
146\r
147 def test_in_function(self):\r
148 self.try_with("def foo():\n\tbar.baz()\n\tstart=3")\r
149\r
150class Test_find_binding(support.TestCase):\r
151 def find_binding(self, name, string, package=None):\r
152 return fixer_util.find_binding(name, parse(string), package)\r
153\r
154 def test_simple_assignment(self):\r
155 self.assertTrue(self.find_binding("a", "a = b"))\r
156 self.assertTrue(self.find_binding("a", "a = [b, c, d]"))\r
157 self.assertTrue(self.find_binding("a", "a = foo()"))\r
158 self.assertTrue(self.find_binding("a", "a = foo().foo.foo[6][foo]"))\r
159 self.assertFalse(self.find_binding("a", "foo = a"))\r
160 self.assertFalse(self.find_binding("a", "foo = (a, b, c)"))\r
161\r
162 def test_tuple_assignment(self):\r
163 self.assertTrue(self.find_binding("a", "(a,) = b"))\r
164 self.assertTrue(self.find_binding("a", "(a, b, c) = [b, c, d]"))\r
165 self.assertTrue(self.find_binding("a", "(c, (d, a), b) = foo()"))\r
166 self.assertTrue(self.find_binding("a", "(a, b) = foo().foo[6][foo]"))\r
167 self.assertFalse(self.find_binding("a", "(foo, b) = (b, a)"))\r
168 self.assertFalse(self.find_binding("a", "(foo, (b, c)) = (a, b, c)"))\r
169\r
170 def test_list_assignment(self):\r
171 self.assertTrue(self.find_binding("a", "[a] = b"))\r
172 self.assertTrue(self.find_binding("a", "[a, b, c] = [b, c, d]"))\r
173 self.assertTrue(self.find_binding("a", "[c, [d, a], b] = foo()"))\r
174 self.assertTrue(self.find_binding("a", "[a, b] = foo().foo[a][foo]"))\r
175 self.assertFalse(self.find_binding("a", "[foo, b] = (b, a)"))\r
176 self.assertFalse(self.find_binding("a", "[foo, [b, c]] = (a, b, c)"))\r
177\r
178 def test_invalid_assignments(self):\r
179 self.assertFalse(self.find_binding("a", "foo.a = 5"))\r
180 self.assertFalse(self.find_binding("a", "foo[a] = 5"))\r
181 self.assertFalse(self.find_binding("a", "foo(a) = 5"))\r
182 self.assertFalse(self.find_binding("a", "foo(a, b) = 5"))\r
183\r
184 def test_simple_import(self):\r
185 self.assertTrue(self.find_binding("a", "import a"))\r
186 self.assertTrue(self.find_binding("a", "import b, c, a, d"))\r
187 self.assertFalse(self.find_binding("a", "import b"))\r
188 self.assertFalse(self.find_binding("a", "import b, c, d"))\r
189\r
190 def test_from_import(self):\r
191 self.assertTrue(self.find_binding("a", "from x import a"))\r
192 self.assertTrue(self.find_binding("a", "from a import a"))\r
193 self.assertTrue(self.find_binding("a", "from x import b, c, a, d"))\r
194 self.assertTrue(self.find_binding("a", "from x.b import a"))\r
195 self.assertTrue(self.find_binding("a", "from x.b import b, c, a, d"))\r
196 self.assertFalse(self.find_binding("a", "from a import b"))\r
197 self.assertFalse(self.find_binding("a", "from a.d import b"))\r
198 self.assertFalse(self.find_binding("a", "from d.a import b"))\r
199\r
200 def test_import_as(self):\r
201 self.assertTrue(self.find_binding("a", "import b as a"))\r
202 self.assertTrue(self.find_binding("a", "import b as a, c, a as f, d"))\r
203 self.assertFalse(self.find_binding("a", "import a as f"))\r
204 self.assertFalse(self.find_binding("a", "import b, c as f, d as e"))\r
205\r
206 def test_from_import_as(self):\r
207 self.assertTrue(self.find_binding("a", "from x import b as a"))\r
208 self.assertTrue(self.find_binding("a", "from x import g as a, d as b"))\r
209 self.assertTrue(self.find_binding("a", "from x.b import t as a"))\r
210 self.assertTrue(self.find_binding("a", "from x.b import g as a, d"))\r
211 self.assertFalse(self.find_binding("a", "from a import b as t"))\r
212 self.assertFalse(self.find_binding("a", "from a.d import b as t"))\r
213 self.assertFalse(self.find_binding("a", "from d.a import b as t"))\r
214\r
215 def test_simple_import_with_package(self):\r
216 self.assertTrue(self.find_binding("b", "import b"))\r
217 self.assertTrue(self.find_binding("b", "import b, c, d"))\r
218 self.assertFalse(self.find_binding("b", "import b", "b"))\r
219 self.assertFalse(self.find_binding("b", "import b, c, d", "c"))\r
220\r
221 def test_from_import_with_package(self):\r
222 self.assertTrue(self.find_binding("a", "from x import a", "x"))\r
223 self.assertTrue(self.find_binding("a", "from a import a", "a"))\r
224 self.assertTrue(self.find_binding("a", "from x import *", "x"))\r
225 self.assertTrue(self.find_binding("a", "from x import b, c, a, d", "x"))\r
226 self.assertTrue(self.find_binding("a", "from x.b import a", "x.b"))\r
227 self.assertTrue(self.find_binding("a", "from x.b import *", "x.b"))\r
228 self.assertTrue(self.find_binding("a", "from x.b import b, c, a, d", "x.b"))\r
229 self.assertFalse(self.find_binding("a", "from a import b", "a"))\r
230 self.assertFalse(self.find_binding("a", "from a.d import b", "a.d"))\r
231 self.assertFalse(self.find_binding("a", "from d.a import b", "a.d"))\r
232 self.assertFalse(self.find_binding("a", "from x.y import *", "a.b"))\r
233\r
234 def test_import_as_with_package(self):\r
235 self.assertFalse(self.find_binding("a", "import b.c as a", "b.c"))\r
236 self.assertFalse(self.find_binding("a", "import a as f", "f"))\r
237 self.assertFalse(self.find_binding("a", "import a as f", "a"))\r
238\r
239 def test_from_import_as_with_package(self):\r
240 # Because it would take a lot of special-case code in the fixers\r
241 # to deal with from foo import bar as baz, we'll simply always\r
242 # fail if there is an "from ... import ... as ..."\r
243 self.assertFalse(self.find_binding("a", "from x import b as a", "x"))\r
244 self.assertFalse(self.find_binding("a", "from x import g as a, d as b", "x"))\r
245 self.assertFalse(self.find_binding("a", "from x.b import t as a", "x.b"))\r
246 self.assertFalse(self.find_binding("a", "from x.b import g as a, d", "x.b"))\r
247 self.assertFalse(self.find_binding("a", "from a import b as t", "a"))\r
248 self.assertFalse(self.find_binding("a", "from a import b as t", "b"))\r
249 self.assertFalse(self.find_binding("a", "from a import b as t", "t"))\r
250\r
251 def test_function_def(self):\r
252 self.assertTrue(self.find_binding("a", "def a(): pass"))\r
253 self.assertTrue(self.find_binding("a", "def a(b, c, d): pass"))\r
254 self.assertTrue(self.find_binding("a", "def a(): b = 7"))\r
255 self.assertFalse(self.find_binding("a", "def d(b, (c, a), e): pass"))\r
256 self.assertFalse(self.find_binding("a", "def d(a=7): pass"))\r
257 self.assertFalse(self.find_binding("a", "def d(a): pass"))\r
258 self.assertFalse(self.find_binding("a", "def d(): a = 7"))\r
259\r
260 s = """\r
261 def d():\r
262 def a():\r
263 pass"""\r
264 self.assertFalse(self.find_binding("a", s))\r
265\r
266 def test_class_def(self):\r
267 self.assertTrue(self.find_binding("a", "class a: pass"))\r
268 self.assertTrue(self.find_binding("a", "class a(): pass"))\r
269 self.assertTrue(self.find_binding("a", "class a(b): pass"))\r
270 self.assertTrue(self.find_binding("a", "class a(b, c=8): pass"))\r
271 self.assertFalse(self.find_binding("a", "class d: pass"))\r
272 self.assertFalse(self.find_binding("a", "class d(a): pass"))\r
273 self.assertFalse(self.find_binding("a", "class d(b, a=7): pass"))\r
274 self.assertFalse(self.find_binding("a", "class d(b, *a): pass"))\r
275 self.assertFalse(self.find_binding("a", "class d(b, **a): pass"))\r
276 self.assertFalse(self.find_binding("a", "class d: a = 7"))\r
277\r
278 s = """\r
279 class d():\r
280 class a():\r
281 pass"""\r
282 self.assertFalse(self.find_binding("a", s))\r
283\r
284 def test_for(self):\r
285 self.assertTrue(self.find_binding("a", "for a in r: pass"))\r
286 self.assertTrue(self.find_binding("a", "for a, b in r: pass"))\r
287 self.assertTrue(self.find_binding("a", "for (a, b) in r: pass"))\r
288 self.assertTrue(self.find_binding("a", "for c, (a,) in r: pass"))\r
289 self.assertTrue(self.find_binding("a", "for c, (a, b) in r: pass"))\r
290 self.assertTrue(self.find_binding("a", "for c in r: a = c"))\r
291 self.assertFalse(self.find_binding("a", "for c in a: pass"))\r
292\r
293 def test_for_nested(self):\r
294 s = """\r
295 for b in r:\r
296 for a in b:\r
297 pass"""\r
298 self.assertTrue(self.find_binding("a", s))\r
299\r
300 s = """\r
301 for b in r:\r
302 for a, c in b:\r
303 pass"""\r
304 self.assertTrue(self.find_binding("a", s))\r
305\r
306 s = """\r
307 for b in r:\r
308 for (a, c) in b:\r
309 pass"""\r
310 self.assertTrue(self.find_binding("a", s))\r
311\r
312 s = """\r
313 for b in r:\r
314 for (a,) in b:\r
315 pass"""\r
316 self.assertTrue(self.find_binding("a", s))\r
317\r
318 s = """\r
319 for b in r:\r
320 for c, (a, d) in b:\r
321 pass"""\r
322 self.assertTrue(self.find_binding("a", s))\r
323\r
324 s = """\r
325 for b in r:\r
326 for c in b:\r
327 a = 7"""\r
328 self.assertTrue(self.find_binding("a", s))\r
329\r
330 s = """\r
331 for b in r:\r
332 for c in b:\r
333 d = a"""\r
334 self.assertFalse(self.find_binding("a", s))\r
335\r
336 s = """\r
337 for b in r:\r
338 for c in a:\r
339 d = 7"""\r
340 self.assertFalse(self.find_binding("a", s))\r
341\r
342 def test_if(self):\r
343 self.assertTrue(self.find_binding("a", "if b in r: a = c"))\r
344 self.assertFalse(self.find_binding("a", "if a in r: d = e"))\r
345\r
346 def test_if_nested(self):\r
347 s = """\r
348 if b in r:\r
349 if c in d:\r
350 a = c"""\r
351 self.assertTrue(self.find_binding("a", s))\r
352\r
353 s = """\r
354 if b in r:\r
355 if c in d:\r
356 c = a"""\r
357 self.assertFalse(self.find_binding("a", s))\r
358\r
359 def test_while(self):\r
360 self.assertTrue(self.find_binding("a", "while b in r: a = c"))\r
361 self.assertFalse(self.find_binding("a", "while a in r: d = e"))\r
362\r
363 def test_while_nested(self):\r
364 s = """\r
365 while b in r:\r
366 while c in d:\r
367 a = c"""\r
368 self.assertTrue(self.find_binding("a", s))\r
369\r
370 s = """\r
371 while b in r:\r
372 while c in d:\r
373 c = a"""\r
374 self.assertFalse(self.find_binding("a", s))\r
375\r
376 def test_try_except(self):\r
377 s = """\r
378 try:\r
379 a = 6\r
380 except:\r
381 b = 8"""\r
382 self.assertTrue(self.find_binding("a", s))\r
383\r
384 s = """\r
385 try:\r
386 b = 8\r
387 except:\r
388 a = 6"""\r
389 self.assertTrue(self.find_binding("a", s))\r
390\r
391 s = """\r
392 try:\r
393 b = 8\r
394 except KeyError:\r
395 pass\r
396 except:\r
397 a = 6"""\r
398 self.assertTrue(self.find_binding("a", s))\r
399\r
400 s = """\r
401 try:\r
402 b = 8\r
403 except:\r
404 b = 6"""\r
405 self.assertFalse(self.find_binding("a", s))\r
406\r
407 def test_try_except_nested(self):\r
408 s = """\r
409 try:\r
410 try:\r
411 a = 6\r
412 except:\r
413 pass\r
414 except:\r
415 b = 8"""\r
416 self.assertTrue(self.find_binding("a", s))\r
417\r
418 s = """\r
419 try:\r
420 b = 8\r
421 except:\r
422 try:\r
423 a = 6\r
424 except:\r
425 pass"""\r
426 self.assertTrue(self.find_binding("a", s))\r
427\r
428 s = """\r
429 try:\r
430 b = 8\r
431 except:\r
432 try:\r
433 pass\r
434 except:\r
435 a = 6"""\r
436 self.assertTrue(self.find_binding("a", s))\r
437\r
438 s = """\r
439 try:\r
440 try:\r
441 b = 8\r
442 except KeyError:\r
443 pass\r
444 except:\r
445 a = 6\r
446 except:\r
447 pass"""\r
448 self.assertTrue(self.find_binding("a", s))\r
449\r
450 s = """\r
451 try:\r
452 pass\r
453 except:\r
454 try:\r
455 b = 8\r
456 except KeyError:\r
457 pass\r
458 except:\r
459 a = 6"""\r
460 self.assertTrue(self.find_binding("a", s))\r
461\r
462 s = """\r
463 try:\r
464 b = 8\r
465 except:\r
466 b = 6"""\r
467 self.assertFalse(self.find_binding("a", s))\r
468\r
469 s = """\r
470 try:\r
471 try:\r
472 b = 8\r
473 except:\r
474 c = d\r
475 except:\r
476 try:\r
477 b = 6\r
478 except:\r
479 t = 8\r
480 except:\r
481 o = y"""\r
482 self.assertFalse(self.find_binding("a", s))\r
483\r
484 def test_try_except_finally(self):\r
485 s = """\r
486 try:\r
487 c = 6\r
488 except:\r
489 b = 8\r
490 finally:\r
491 a = 9"""\r
492 self.assertTrue(self.find_binding("a", s))\r
493\r
494 s = """\r
495 try:\r
496 b = 8\r
497 finally:\r
498 a = 6"""\r
499 self.assertTrue(self.find_binding("a", s))\r
500\r
501 s = """\r
502 try:\r
503 b = 8\r
504 finally:\r
505 b = 6"""\r
506 self.assertFalse(self.find_binding("a", s))\r
507\r
508 s = """\r
509 try:\r
510 b = 8\r
511 except:\r
512 b = 9\r
513 finally:\r
514 b = 6"""\r
515 self.assertFalse(self.find_binding("a", s))\r
516\r
517 def test_try_except_finally_nested(self):\r
518 s = """\r
519 try:\r
520 c = 6\r
521 except:\r
522 b = 8\r
523 finally:\r
524 try:\r
525 a = 9\r
526 except:\r
527 b = 9\r
528 finally:\r
529 c = 9"""\r
530 self.assertTrue(self.find_binding("a", s))\r
531\r
532 s = """\r
533 try:\r
534 b = 8\r
535 finally:\r
536 try:\r
537 pass\r
538 finally:\r
539 a = 6"""\r
540 self.assertTrue(self.find_binding("a", s))\r
541\r
542 s = """\r
543 try:\r
544 b = 8\r
545 finally:\r
546 try:\r
547 b = 6\r
548 finally:\r
549 b = 7"""\r
550 self.assertFalse(self.find_binding("a", s))\r
551\r
552class Test_touch_import(support.TestCase):\r
553\r
554 def test_after_docstring(self):\r
555 node = parse('"""foo"""\nbar()')\r
556 fixer_util.touch_import(None, "foo", node)\r
557 self.assertEqual(str(node), '"""foo"""\nimport foo\nbar()\n\n')\r
558\r
559 def test_after_imports(self):\r
560 node = parse('"""foo"""\nimport bar\nbar()')\r
561 fixer_util.touch_import(None, "foo", node)\r
562 self.assertEqual(str(node), '"""foo"""\nimport bar\nimport foo\nbar()\n\n')\r
563\r
564 def test_beginning(self):\r
565 node = parse('bar()')\r
566 fixer_util.touch_import(None, "foo", node)\r
567 self.assertEqual(str(node), 'import foo\nbar()\n\n')\r
568\r
569 def test_from_import(self):\r
570 node = parse('bar()')\r
571 fixer_util.touch_import("html", "escape", node)\r
572 self.assertEqual(str(node), 'from html import escape\nbar()\n\n')\r
573\r
574 def test_name_import(self):\r
575 node = parse('bar()')\r
576 fixer_util.touch_import(None, "cgi", node)\r
577 self.assertEqual(str(node), 'import cgi\nbar()\n\n')\r
578\r
579class Test_find_indentation(support.TestCase):\r
580\r
581 def test_nothing(self):\r
582 fi = fixer_util.find_indentation\r
583 node = parse("node()")\r
584 self.assertEqual(fi(node), u"")\r
585 node = parse("")\r
586 self.assertEqual(fi(node), u"")\r
587\r
588 def test_simple(self):\r
589 fi = fixer_util.find_indentation\r
590 node = parse("def f():\n x()")\r
591 self.assertEqual(fi(node), u"")\r
592 self.assertEqual(fi(node.children[0].children[4].children[2]), u" ")\r
593 node = parse("def f():\n x()\n y()")\r
594 self.assertEqual(fi(node.children[0].children[4].children[4]), u" ")\r