Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

unittest_utils.py 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # Copyright (c) 2014, 2016 Google, Inc.
  2. # Copyright (c) 2015-2016 Claudiu Popa <pcmanticore@gmail.com>
  3. # Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
  4. # For details: https://github.com/PyCQA/astroid/blob/master/COPYING.LESSER
  5. import unittest
  6. from astroid import builder
  7. from astroid import InferenceError
  8. from astroid import nodes
  9. from astroid import node_classes
  10. from astroid import util as astroid_util
  11. class InferenceUtil(unittest.TestCase):
  12. def test_not_exclusive(self):
  13. module = builder.parse("""
  14. x = 10
  15. for x in range(5):
  16. print (x)
  17. if x > 0:
  18. print ('#' * x)
  19. """, __name__, __file__)
  20. xass1 = module.locals['x'][0]
  21. assert xass1.lineno == 2
  22. xnames = [n for n in module.nodes_of_class(nodes.Name) if n.name == 'x']
  23. assert len(xnames) == 3
  24. assert xnames[1].lineno == 6
  25. self.assertEqual(node_classes.are_exclusive(xass1, xnames[1]), False)
  26. self.assertEqual(node_classes.are_exclusive(xass1, xnames[2]), False)
  27. def test_if(self):
  28. module = builder.parse('''
  29. if 1:
  30. a = 1
  31. a = 2
  32. elif 2:
  33. a = 12
  34. a = 13
  35. else:
  36. a = 3
  37. a = 4
  38. ''')
  39. a1 = module.locals['a'][0]
  40. a2 = module.locals['a'][1]
  41. a3 = module.locals['a'][2]
  42. a4 = module.locals['a'][3]
  43. a5 = module.locals['a'][4]
  44. a6 = module.locals['a'][5]
  45. self.assertEqual(node_classes.are_exclusive(a1, a2), False)
  46. self.assertEqual(node_classes.are_exclusive(a1, a3), True)
  47. self.assertEqual(node_classes.are_exclusive(a1, a5), True)
  48. self.assertEqual(node_classes.are_exclusive(a3, a5), True)
  49. self.assertEqual(node_classes.are_exclusive(a3, a4), False)
  50. self.assertEqual(node_classes.are_exclusive(a5, a6), False)
  51. def test_try_except(self):
  52. module = builder.parse('''
  53. try:
  54. def exclusive_func2():
  55. "docstring"
  56. except TypeError:
  57. def exclusive_func2():
  58. "docstring"
  59. except:
  60. def exclusive_func2():
  61. "docstring"
  62. else:
  63. def exclusive_func2():
  64. "this one redefine the one defined line 42"
  65. ''')
  66. f1 = module.locals['exclusive_func2'][0]
  67. f2 = module.locals['exclusive_func2'][1]
  68. f3 = module.locals['exclusive_func2'][2]
  69. f4 = module.locals['exclusive_func2'][3]
  70. self.assertEqual(node_classes.are_exclusive(f1, f2), True)
  71. self.assertEqual(node_classes.are_exclusive(f1, f3), True)
  72. self.assertEqual(node_classes.are_exclusive(f1, f4), False)
  73. self.assertEqual(node_classes.are_exclusive(f2, f4), True)
  74. self.assertEqual(node_classes.are_exclusive(f3, f4), True)
  75. self.assertEqual(node_classes.are_exclusive(f3, f2), True)
  76. self.assertEqual(node_classes.are_exclusive(f2, f1), True)
  77. self.assertEqual(node_classes.are_exclusive(f4, f1), False)
  78. self.assertEqual(node_classes.are_exclusive(f4, f2), True)
  79. def test_unpack_infer_uninferable_nodes(self):
  80. node = builder.extract_node('''
  81. x = [A] * 1
  82. f = [x, [A] * 2]
  83. f
  84. ''')
  85. inferred = next(node.infer())
  86. unpacked = list(node_classes.unpack_infer(inferred))
  87. self.assertEqual(len(unpacked), 3)
  88. self.assertTrue(all(elt is astroid_util.Uninferable
  89. for elt in unpacked))
  90. def test_unpack_infer_empty_tuple(self):
  91. node = builder.extract_node('''
  92. ()
  93. ''')
  94. inferred = next(node.infer())
  95. with self.assertRaises(InferenceError):
  96. list(node_classes.unpack_infer(inferred))
  97. if __name__ == '__main__':
  98. unittest.main()