From fcf4435ae02c3962a8ad71a9539877060c694468 Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Sun, 27 Nov 2005 20:37:43 +0000 Subject: [PATCH] Improve test coverage. Hope the test_file changes work the same on windows. --- Lib/test/test_builtin.py | 13 +++++++++++++ Lib/test/test_file.py | 33 +++++++++++++++++++++++++++++++++ Lib/test/test_generators.py | 5 +++++ Lib/test/test_set.py | 12 ++++++++++++ Lib/test/test_syntax.py | 12 ++++++++++++ 5 files changed, 75 insertions(+) diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index d3eb2af00b9..dd008745c9b 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', '', 'badmode') self.assertRaises(ValueError, compile, 'print 42\n', '', '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 2d2d9c1c219..2869ce76c6d 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(">> 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 77df31b622d..e26065c51a0 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 48386083359..14f4c958bfa 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)