diff options
author | Benjamin Peterson <benjamin@python.org> | 2016-06-11 13:18:56 -0700 |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2016-06-11 13:18:56 -0700 |
commit | 5a991226e84e935f2a50deec664eaf3860893354 (patch) | |
tree | e674175fd5bc642be83ceb674d57e303b26f4326 /Lib/test/test_builtin.py | |
parent | 9997d0207649b71b5862d3c036c1f7dcacf4f7b1 (diff) | |
parent | 1ccde8e1ad13ea6943f6ef5ea4329c9827ba493e (diff) | |
download | cpython-5a991226e84e935f2a50deec664eaf3860893354.tar.gz |
merge 3.4
Diffstat (limited to 'Lib/test/test_builtin.py')
-rw-r--r-- | Lib/test/test_builtin.py | 163 |
1 files changed, 159 insertions, 4 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index d00d0b77cb..8cc1b0074b 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -16,7 +16,7 @@ import unittest import warnings from operator import neg from test.support import TESTFN, unlink, run_unittest, check_warnings -from test.script_helper import assert_python_ok +from test.support.script_helper import assert_python_ok try: import pty, signal except ImportError: @@ -312,11 +312,11 @@ class BuiltinTest(unittest.TestCase): self.assertRaises(TypeError, compile) self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode') self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff) - self.assertRaises(TypeError, compile, chr(0), 'f', 'exec') + self.assertRaises(ValueError, compile, chr(0), 'f', 'exec') self.assertRaises(TypeError, compile, 'pass', '?', 'exec', mode='eval', source='0', filename='tmp') compile('print("\xe5")\n', '', 'exec') - self.assertRaises(TypeError, compile, chr(0), 'f', 'exec') + self.assertRaises(ValueError, compile, chr(0), 'f', 'exec') self.assertRaises(ValueError, compile, str('a = 1'), 'f', 'bad') # test the optimize argument @@ -1094,7 +1094,7 @@ class BuiltinTest(unittest.TestCase): self.assertAlmostEqual(pow(-1, 0.5), 1j) self.assertAlmostEqual(pow(-1, 1/3), 0.5 + 0.8660254037844386j) - self.assertRaises(TypeError, pow, -1, -2, 3) + self.assertRaises(ValueError, pow, -1, -2, 3) self.assertRaises(ValueError, pow, 1, 2, 0) self.assertRaises(TypeError, pow) @@ -1668,6 +1668,161 @@ class ShutdownTest(unittest.TestCase): self.assertEqual(["before", "after"], out.decode().splitlines()) +class TestType(unittest.TestCase): + def test_new_type(self): + A = type('A', (), {}) + self.assertEqual(A.__name__, 'A') + self.assertEqual(A.__qualname__, 'A') + self.assertEqual(A.__module__, __name__) + self.assertEqual(A.__bases__, (object,)) + self.assertIs(A.__base__, object) + x = A() + self.assertIs(type(x), A) + self.assertIs(x.__class__, A) + + class B: + def ham(self): + return 'ham%d' % self + C = type('C', (B, int), {'spam': lambda self: 'spam%s' % self}) + self.assertEqual(C.__name__, 'C') + self.assertEqual(C.__qualname__, 'C') + self.assertEqual(C.__module__, __name__) + self.assertEqual(C.__bases__, (B, int)) + self.assertIs(C.__base__, int) + self.assertIn('spam', C.__dict__) + self.assertNotIn('ham', C.__dict__) + x = C(42) + self.assertEqual(x, 42) + self.assertIs(type(x), C) + self.assertIs(x.__class__, C) + self.assertEqual(x.ham(), 'ham42') + self.assertEqual(x.spam(), 'spam42') + self.assertEqual(x.to_bytes(2, 'little'), b'\x2a\x00') + + def test_type_new_keywords(self): + class B: + def ham(self): + return 'ham%d' % self + C = type.__new__(type, + name='C', + bases=(B, int), + dict={'spam': lambda self: 'spam%s' % self}) + self.assertEqual(C.__name__, 'C') + self.assertEqual(C.__qualname__, 'C') + self.assertEqual(C.__module__, __name__) + self.assertEqual(C.__bases__, (B, int)) + self.assertIs(C.__base__, int) + self.assertIn('spam', C.__dict__) + self.assertNotIn('ham', C.__dict__) + + def test_type_name(self): + for name in 'A', '\xc4', '\U0001f40d', 'B.A', '42', '': + with self.subTest(name=name): + A = type(name, (), {}) + self.assertEqual(A.__name__, name) + self.assertEqual(A.__qualname__, name) + self.assertEqual(A.__module__, __name__) + with self.assertRaises(ValueError): + type('A\x00B', (), {}) + with self.assertRaises(ValueError): + type('A\udcdcB', (), {}) + with self.assertRaises(TypeError): + type(b'A', (), {}) + + C = type('C', (), {}) + for name in 'A', '\xc4', '\U0001f40d', 'B.A', '42', '': + with self.subTest(name=name): + C.__name__ = name + self.assertEqual(C.__name__, name) + self.assertEqual(C.__qualname__, 'C') + self.assertEqual(C.__module__, __name__) + + A = type('C', (), {}) + with self.assertRaises(ValueError): + A.__name__ = 'A\x00B' + self.assertEqual(A.__name__, 'C') + with self.assertRaises(ValueError): + A.__name__ = 'A\udcdcB' + self.assertEqual(A.__name__, 'C') + with self.assertRaises(TypeError): + A.__name__ = b'A' + self.assertEqual(A.__name__, 'C') + + def test_type_qualname(self): + A = type('A', (), {'__qualname__': 'B.C'}) + self.assertEqual(A.__name__, 'A') + self.assertEqual(A.__qualname__, 'B.C') + self.assertEqual(A.__module__, __name__) + with self.assertRaises(TypeError): + type('A', (), {'__qualname__': b'B'}) + self.assertEqual(A.__qualname__, 'B.C') + + A.__qualname__ = 'D.E' + self.assertEqual(A.__name__, 'A') + self.assertEqual(A.__qualname__, 'D.E') + with self.assertRaises(TypeError): + A.__qualname__ = b'B' + self.assertEqual(A.__qualname__, 'D.E') + + def test_type_doc(self): + for doc in 'x', '\xc4', '\U0001f40d', 'x\x00y', b'x', 42, None: + A = type('A', (), {'__doc__': doc}) + self.assertEqual(A.__doc__, doc) + with self.assertRaises(UnicodeEncodeError): + type('A', (), {'__doc__': 'x\udcdcy'}) + + A = type('A', (), {}) + self.assertEqual(A.__doc__, None) + for doc in 'x', '\xc4', '\U0001f40d', 'x\x00y', 'x\udcdcy', b'x', 42, None: + A.__doc__ = doc + self.assertEqual(A.__doc__, doc) + + def test_bad_args(self): + with self.assertRaises(TypeError): + type() + with self.assertRaises(TypeError): + type('A', ()) + with self.assertRaises(TypeError): + type('A', (), {}, ()) + with self.assertRaises(TypeError): + type('A', (), dict={}) + with self.assertRaises(TypeError): + type('A', [], {}) + with self.assertRaises(TypeError): + type('A', (), types.MappingProxyType({})) + with self.assertRaises(TypeError): + type('A', (None,), {}) + with self.assertRaises(TypeError): + type('A', (bool,), {}) + with self.assertRaises(TypeError): + type('A', (int, str), {}) + + def test_bad_slots(self): + with self.assertRaises(TypeError): + type('A', (), {'__slots__': b'x'}) + with self.assertRaises(TypeError): + type('A', (int,), {'__slots__': 'x'}) + with self.assertRaises(TypeError): + type('A', (), {'__slots__': ''}) + with self.assertRaises(TypeError): + type('A', (), {'__slots__': '42'}) + with self.assertRaises(TypeError): + type('A', (), {'__slots__': 'x\x00y'}) + with self.assertRaises(ValueError): + type('A', (), {'__slots__': 'x', 'x': 0}) + with self.assertRaises(TypeError): + type('A', (), {'__slots__': ('__dict__', '__dict__')}) + with self.assertRaises(TypeError): + type('A', (), {'__slots__': ('__weakref__', '__weakref__')}) + + class B: + pass + with self.assertRaises(TypeError): + type('A', (B,), {'__slots__': '__dict__'}) + with self.assertRaises(TypeError): + type('A', (B,), {'__slots__': '__weakref__'}) + + def load_tests(loader, tests, pattern): from doctest import DocTestSuite tests.addTest(DocTestSuite(builtins)) |