]> granicus.if.org Git - python/commitdiff
Improve test coverage. Hope the test_file changes work the same on windows.
authorNeal Norwitz <nnorwitz@gmail.com>
Sun, 27 Nov 2005 20:37:43 +0000 (20:37 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Sun, 27 Nov 2005 20:37:43 +0000 (20:37 +0000)
Lib/test/test_builtin.py
Lib/test/test_file.py
Lib/test/test_generators.py
Lib/test/test_set.py
Lib/test/test_syntax.py

index d3eb2af00b9bfcf5c0f9acc75f50545d698527e7..dd008745c9ba763a3ef967493441a59474161cb1 100644 (file)
@@ -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)
index 2d2d9c1c219ab11bac954ca9f6afa8057896a666..2869ce76c6d81e534300bdba9d14f3ec142d693f 100644 (file)
@@ -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:
index cb7e99209049dd831408ac2db4230c75fb9a89cc..48c9674a3d052091bf3781bd1d68b3a87b11fb02 100644 (file)
@@ -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:
 
index 77df31b622d310e7f9f16118a8983a42e43a2b25..e26065c51a0a97d1fade2e38503dbe482a47e08c 100644 (file)
@@ -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):
index 48386083359e8f07c4582b5da10736eab4323891..14f4c958bfa8b73c2600e0efb2c4c44d77df07ca 100644 (file)
@@ -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)