summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_argparse.py
diff options
context:
space:
mode:
authorSteven Bethard <steven.bethard@gmail.com>2011-01-24 21:02:50 (GMT)
committerSteven Bethard <steven.bethard@gmail.com>2011-01-24 21:02:50 (GMT)
commitb02701101b94bda88179652b0133557baa801368 (patch)
tree4e39189e5645d3c9e8bf68472e89998dbf5e83a4 /Lib/test/test_argparse.py
parent2a6ac15f263c58842c5be9398da9cc78d3516988 (diff)
downloadcpython-b02701101b94bda88179652b0133557baa801368.zip
cpython-b02701101b94bda88179652b0133557baa801368.tar.gz
cpython-b02701101b94bda88179652b0133557baa801368.tar.bz2
Issue #9509: make argarse properly handle IOErrors raised by argparse.FileType. Approved by Georg in the tracker.
Diffstat (limited to 'Lib/test/test_argparse.py')
-rw-r--r--Lib/test/test_argparse.py24
1 files changed, 15 insertions, 9 deletions
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index d536be9..36415f4 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -4,6 +4,7 @@ import codecs
import inspect
import os
import shutil
+import stat
import sys
import textwrap
import tempfile
@@ -45,14 +46,13 @@ class TempDirMixin(object):
def tearDown(self):
os.chdir(self.old_dir)
- while True:
- try:
- shutil.rmtree(self.temp_dir)
- except WindowsError:
- continue
- else:
- break
+ shutil.rmtree(self.temp_dir, True)
+ def create_readonly_file(self, filename):
+ file_path = os.path.join(self.temp_dir, filename)
+ with open(file_path, 'w') as file:
+ file.write(filename)
+ os.chmod(file_path, stat.S_IREAD)
class Sig(object):
@@ -1446,17 +1446,19 @@ class TestFileTypeR(TempDirMixin, ParserTestCase):
file = open(os.path.join(self.temp_dir, file_name), 'w')
file.write(file_name)
file.close()
+ self.create_readonly_file('readonly')
argument_signatures = [
Sig('-x', type=argparse.FileType()),
Sig('spam', type=argparse.FileType('r')),
]
- failures = ['-x', '']
+ failures = ['-x', '', 'non-existent-file.txt']
successes = [
('foo', NS(x=None, spam=RFile('foo'))),
('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))),
('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))),
('-x - -', NS(x=sys.stdin, spam=sys.stdin)),
+ ('readonly', NS(x=None, spam=RFile('readonly'))),
]
@@ -1503,11 +1505,15 @@ class WFile(object):
class TestFileTypeW(TempDirMixin, ParserTestCase):
"""Test the FileType option/argument type for writing files"""
+ def setUp(self):
+ super(TestFileTypeW, self).setUp()
+ self.create_readonly_file('readonly')
+
argument_signatures = [
Sig('-x', type=argparse.FileType('w')),
Sig('spam', type=argparse.FileType('w')),
]
- failures = ['-x', '']
+ failures = ['-x', '', 'readonly']
successes = [
('foo', NS(x=None, spam=WFile('foo'))),
('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))),