python-future/tests/test_future/test_import_star.py

62 lines
1.8 KiB
Python

"""
This tests whether
from future.builtins import *
works as expected:
- This should NOT introduce namespace pollution on Py3.
- On Python 2, this should not introduce any symbols that aren't in
__builtin__.
"""
from __future__ import absolute_import, print_function, unicode_literals
import copy
from future import utils
from future.tests.base import unittest, skip26
original_locals = set(copy.copy(locals()))
original_globals = set(copy.copy(globals()))
new_names = set(['original_locals', 'original_globals', 'new_names'])
from future.builtins import *
new_locals = set(copy.copy(locals())) - new_names - original_locals
new_globals = set(copy.copy(globals())) - new_names - original_globals - \
set(['new_locals'])
class TestImportStar(unittest.TestCase):
def test_namespace_pollution_locals(self):
if utils.PY3:
self.assertEqual(len(new_locals), 0,
'namespace pollution: {0}'.format(new_locals))
else:
pass # maybe check that no new symbols are introduced
def test_namespace_pollution_globals(self):
if utils.PY3:
self.assertEqual(len(new_globals), 0,
'namespace pollution: {0}'.format(new_globals))
else:
pass # maybe check that no new symbols are introduced
def test_iterators(self):
self.assertNotEqual(type(range(10)), list)
def test_super(self):
pass
def test_str(self):
self.assertIsNot(str, bytes) # Py2: assertIsNot only in 2.7
self.assertEqual(str('blah'), u'blah') # Py3.3 and Py2 only
def test_python_2_unicode_compatible_decorator(self):
# This should not be in the namespace
assert 'python_2_unicode_compatible' not in locals()
if __name__ == '__main__':
unittest.main()