diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_builtin.py | 13 | ||||
-rw-r--r-- | Lib/test/test_file.py | 33 | ||||
-rw-r--r-- | Lib/test/test_generators.py | 5 | ||||
-rw-r--r-- | Lib/test/test_set.py | 12 | ||||
-rw-r--r-- | Lib/test/test_syntax.py | 12 |
5 files changed, 75 insertions, 0 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index d3eb2af..dd00874 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -238,8 +238,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') if have_unicode: compile(unicode('print u"\xc3\xa5"\n', 'utf8'), '', 'exec') + self.assertRaises(TypeError, compile, unichr(0), 'f', 'exec') + self.assertRaises(ValueError, compile, unicode('a = 1'), 'f', 'bad') def test_delattr(self): import sys @@ -421,6 +424,7 @@ class BuiltinTest(unittest.TestCase): unlink(TESTFN) self.assertRaises(TypeError, execfile) + self.assertRaises(TypeError, execfile, TESTFN, {}, ()) import os self.assertRaises(IOError, execfile, os.curdir) self.assertRaises(IOError, execfile, "I_dont_exist") @@ -1008,6 +1012,9 @@ class BuiltinTest(unittest.TestCase): def __getitem__(self, index): raise ValueError self.assertRaises(ValueError, map, lambda x: x, BadSeq()) + def badfunc(x): + raise RuntimeError + self.assertRaises(RuntimeError, map, badfunc, range(5)) def test_max(self): self.assertEqual(max('123123'), '3') @@ -1239,6 +1246,12 @@ class BuiltinTest(unittest.TestCase): self.assertRaises(TypeError, range) self.assertRaises(TypeError, range, 1, 2, 3, 4) self.assertRaises(ValueError, range, 1, 2, 0) + self.assertRaises(ValueError, range, a, a + 1, long(0)) + + class badzero(int): + def __cmp__(self, other): + raise RuntimeError + self.assertRaises(RuntimeError, range, a, a + 1, badzero(1)) # Reject floats when it would require PyLongs to represent. # (smaller floats still accepted, but deprecated) diff --git a/Lib/test/test_file.py b/Lib/test/test_file.py index 2d2d9c1..2869ce7 100644 --- a/Lib/test/test_file.py +++ b/Lib/test/test_file.py @@ -100,6 +100,39 @@ else: print "writelines accepted sequence of non-string objects" f.close() +try: + sys.stdin.seek(0) +except IOError: + pass +else: + print "should not be able to seek on sys.stdin" + +try: + sys.stdin.tell() +except IOError: + pass +else: + print "should not be able to seek on sys.stdin" + +try: + sys.stdin.truncate() +except IOError: + pass +else: + print "should not be able to truncate on sys.stdin" + +# verify repr works +f = open(TESTFN) +if not repr(f).startswith("<open file '" + TESTFN): + print "repr(file) failed" +f.close() + +# verify repr works for unicode too +f = open(unicode(TESTFN)) +if not repr(f).startswith("<open file u'" + TESTFN): + print "repr(file with unicode name) failed" +f.close() + # verify that we get a sensible error message for bad mode argument bad_mode = "qwerty" try: diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py index cb7e992..48c9674 100644 --- a/Lib/test/test_generators.py +++ b/Lib/test/test_generators.py @@ -1589,6 +1589,11 @@ Traceback (most recent call last): ... ValueError: 7 +>>> f().throw("abc") # throw on just-opened generator +Traceback (most recent call last): + ... +TypeError: exceptions must be classes, or instances, not str + Now let's try closing a generator: diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py index 77df31b..e26065c 100644 --- a/Lib/test/test_set.py +++ b/Lib/test/test_set.py @@ -606,6 +606,8 @@ class TestBasicOps(unittest.TestCase): def test_iteration(self): for v in self.set: self.assert_(v in self.values) + setiter = iter(self.set) + self.assertEqual(setiter._length_cue(), len(self.set)) def test_pickling(self): p = pickle.dumps(self.set) @@ -693,6 +695,16 @@ class TestExceptionPropagation(unittest.TestCase): set('abc') set(gooditer()) + def test_changingSizeWhileIterating(self): + s = set([1,2,3]) + try: + for i in s: + s.update([4]) + except RuntimeError: + pass + else: + self.fail("no exception when changing size during iteration") + #============================================================================== class TestSetOfSets(unittest.TestCase): diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 4838608..14f4c95 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -42,6 +42,18 @@ class SyntaxTestCase(unittest.TestCase): self._check_error(source, "global") warnings.filters.pop(0) + def test_break_outside_loop(self): + self._check_error("break", "outside loop") + + def test_delete_deref(self): + source = re.sub('(?m)^ *:', '', """\ + :def foo(x): + : def bar(): + : print x + : del x + :""") + self._check_error(source, "nested scope") + def test_main(): test_support.run_unittest(SyntaxTestCase) |