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_raw_building.py 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. # Copyright (c) 2014 Google, Inc.
  2. # Copyright (c) 2014-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 inspect
  6. import os
  7. import unittest
  8. from six.moves import builtins
  9. from astroid.builder import AstroidBuilder, extract_node
  10. from astroid.raw_building import (
  11. attach_dummy_node, build_module,
  12. build_class, build_function, build_from_import
  13. )
  14. from astroid import test_utils
  15. from astroid import nodes
  16. from astroid.bases import BUILTINS
  17. class RawBuildingTC(unittest.TestCase):
  18. def test_attach_dummy_node(self):
  19. node = build_module('MyModule')
  20. attach_dummy_node(node, 'DummyNode')
  21. self.assertEqual(1, len(list(node.get_children())))
  22. def test_build_module(self):
  23. node = build_module('MyModule')
  24. self.assertEqual(node.name, 'MyModule')
  25. self.assertEqual(node.pure_python, False)
  26. self.assertEqual(node.package, False)
  27. self.assertEqual(node.parent, None)
  28. def test_build_class(self):
  29. node = build_class('MyClass')
  30. self.assertEqual(node.name, 'MyClass')
  31. self.assertEqual(node.doc, None)
  32. def test_build_function(self):
  33. node = build_function('MyFunction')
  34. self.assertEqual(node.name, 'MyFunction')
  35. self.assertEqual(node.doc, None)
  36. def test_build_function_args(self):
  37. args = ['myArgs1', 'myArgs2']
  38. # pylint: disable=no-member; not aware of postinit
  39. node = build_function('MyFunction', args)
  40. self.assertEqual('myArgs1', node.args.args[0].name)
  41. self.assertEqual('myArgs2', node.args.args[1].name)
  42. self.assertEqual(2, len(node.args.args))
  43. def test_build_function_defaults(self):
  44. # pylint: disable=no-member; not aware of postinit
  45. defaults = ['defaults1', 'defaults2']
  46. node = build_function('MyFunction', None, defaults)
  47. self.assertEqual(2, len(node.args.defaults))
  48. def test_build_from_import(self):
  49. names = ['exceptions, inference, inspector']
  50. node = build_from_import('astroid', names)
  51. self.assertEqual(len(names), len(node.names))
  52. @test_utils.require_version(minver='3.0')
  53. def test_io_is__io(self):
  54. # _io module calls itself io. This leads
  55. # to cyclic dependencies when astroid tries to resolve
  56. # what io.BufferedReader is. The code that handles this
  57. # is in astroid.raw_building.imported_member, which verifies
  58. # the true name of the module.
  59. import _io
  60. builder = AstroidBuilder()
  61. module = builder.inspect_build(_io)
  62. buffered_reader = module.getattr('BufferedReader')[0]
  63. self.assertEqual(buffered_reader.root().name, 'io')
  64. @unittest.skipUnless(os.name == 'java', 'Requires Jython')
  65. def test_open_is_inferred_correctly(self):
  66. # Lot of Jython builtins don't have a __module__ attribute.
  67. for name, _ in inspect.getmembers(builtins, predicate=inspect.isbuiltin):
  68. if name == 'print':
  69. continue
  70. node = extract_node('{0} #@'.format(name))
  71. inferred = next(node.infer())
  72. self.assertIsInstance(inferred, nodes.FunctionDef, name)
  73. self.assertEqual(inferred.root().name, BUILTINS, name)
  74. if __name__ == '__main__':
  75. unittest.main()