summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2005-11-27 20:37:43 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2005-11-27 20:37:43 (GMT)
commitfcf4435ae02c3962a8ad71a9539877060c694468 (patch)
tree66b05ecac0df3d4105c15ee62f6ea8b520e87312
parent307021f40b227d2bf114b536c37cc41e03fc2aff (diff)
downloadcpython-fcf4435ae02c3962a8ad71a9539877060c694468.zip
cpython-fcf4435ae02c3962a8ad71a9539877060c694468.tar.gz
cpython-fcf4435ae02c3962a8ad71a9539877060c694468.tar.bz2
Improve test coverage. Hope the test_file changes work the same on windows.
-rw-r--r--Lib/test/test_builtin.py13
-rw-r--r--Lib/test/test_file.py33
-rw-r--r--Lib/test/test_generators.py5
-rw-r--r--Lib/test/test_set.py12
-rw-r--r--Lib/test/test_syntax.py12
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)