annotate Lib/test/test_fileinput.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 694e2708b4a8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
1 '''
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2 Tests for fileinput module.
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
3 Nick Mathewson
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
4 '''
68496
937b1fbb402f import style nits
Benjamin Peterson <benjamin@python.org>
parents: 68495
diff changeset
5 import os
937b1fbb402f import style nits
Benjamin Peterson <benjamin@python.org>
parents: 68495
diff changeset
6 import sys
937b1fbb402f import style nits
Benjamin Peterson <benjamin@python.org>
parents: 68495
diff changeset
7 import re
937b1fbb402f import style nits
Benjamin Peterson <benjamin@python.org>
parents: 68495
diff changeset
8 import fileinput
937b1fbb402f import style nits
Benjamin Peterson <benjamin@python.org>
parents: 68495
diff changeset
9 import collections
73434
c2b3e8b437a4 fileinput: replace this last occurence of codecs.open with builtins.open.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 70096
diff changeset
10 import builtins
68496
937b1fbb402f import style nits
Benjamin Peterson <benjamin@python.org>
parents: 68495
diff changeset
11 import unittest
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
12
68669
bb645cc39e60 Fix #11596. When bz2 isn't available, skip test_bz2_ext_fake.
briancurtin <brian.curtin@gmail.com>
parents: 68530
diff changeset
13 try:
bb645cc39e60 Fix #11596. When bz2 isn't available, skip test_bz2_ext_fake.
briancurtin <brian.curtin@gmail.com>
parents: 68530
diff changeset
14 import bz2
bb645cc39e60 Fix #11596. When bz2 isn't available, skip test_bz2_ext_fake.
briancurtin <brian.curtin@gmail.com>
parents: 68530
diff changeset
15 except ImportError:
bb645cc39e60 Fix #11596. When bz2 isn't available, skip test_bz2_ext_fake.
briancurtin <brian.curtin@gmail.com>
parents: 68530
diff changeset
16 bz2 = None
70096
e0b4ed75b8e7 Skip test in test_fileinput when zlib is missing.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68669
diff changeset
17 try:
e0b4ed75b8e7 Skip test in test_fileinput when zlib is missing.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68669
diff changeset
18 import gzip
e0b4ed75b8e7 Skip test in test_fileinput when zlib is missing.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68669
diff changeset
19 except ImportError:
e0b4ed75b8e7 Skip test in test_fileinput when zlib is missing.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68669
diff changeset
20 gzip = None
68669
bb645cc39e60 Fix #11596. When bz2 isn't available, skip test_bz2_ext_fake.
briancurtin <brian.curtin@gmail.com>
parents: 68530
diff changeset
21
68496
937b1fbb402f import style nits
Benjamin Peterson <benjamin@python.org>
parents: 68495
diff changeset
22 from io import StringIO
937b1fbb402f import style nits
Benjamin Peterson <benjamin@python.org>
parents: 68495
diff changeset
23 from fileinput import FileInput, hook_encoded
937b1fbb402f import style nits
Benjamin Peterson <benjamin@python.org>
parents: 68495
diff changeset
24
87520
694e2708b4a8 Issue #15204: Silence and check the 'U' mode deprecation warnings in tests.
Serhiy Storchaka <storchaka@gmail.com>
parents: 84108
diff changeset
25 from test.support import verbose, TESTFN, run_unittest, check_warnings
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46047
diff changeset
26 from test.support import unlink as safe_unlink
68496
937b1fbb402f import style nits
Benjamin Peterson <benjamin@python.org>
parents: 68495
diff changeset
27
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
28
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
29 # The fileinput module has 2 interfaces: the FileInput class which does
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
30 # all the work, and a few functions (input, etc.) that use a global _state
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
31 # variable.
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
32
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
33 # Write lines (a list of lines) to temp file number i, and return the
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
34 # temp file's name.
36607
1a98798a4b1d Repair new test failures on Windows due to
Tim Peters <tim.peters@gmail.com>
parents: 36596
diff changeset
35 def writeTmp(i, lines, mode='w'): # opening in text mode is the default
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
36 name = TESTFN + str(i)
36607
1a98798a4b1d Repair new test failures on Windows due to
Tim Peters <tim.peters@gmail.com>
parents: 36596
diff changeset
37 f = open(name, mode)
42111
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
38 for line in lines:
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
39 f.write(line)
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
40 f.close()
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
41 return name
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
42
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
43 def remove_tempfiles(*names):
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
44 for name in names:
42918
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
45 if name:
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
46 safe_unlink(name)
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
47
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
48 class BufferSizesTests(unittest.TestCase):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
49 def test_buffer_sizes(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
50 # First, run the tests with default and teeny buffer size.
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
51 for round, bs in (0, 0), (1, 30):
46047
df90774f92b0 Ensure cleanup does not reference variables that don't yet exist.
Neal Norwitz <nnorwitz@gmail.com>
parents: 45471
diff changeset
52 t1 = t2 = t3 = t4 = None
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
53 try:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
54 t1 = writeTmp(1, ["Line %s of file 1\n" % (i+1) for i in range(15)])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
55 t2 = writeTmp(2, ["Line %s of file 2\n" % (i+1) for i in range(10)])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
56 t3 = writeTmp(3, ["Line %s of file 3\n" % (i+1) for i in range(5)])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
57 t4 = writeTmp(4, ["Line %s of file 4\n" % (i+1) for i in range(1)])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
58 self.buffer_size_test(t1, t2, t3, t4, bs, round)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
59 finally:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
60 remove_tempfiles(t1, t2, t3, t4)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
61
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
62 def buffer_size_test(self, t1, t2, t3, t4, bs=0, round=0):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
63 pat = re.compile(r'LINE (\d+) OF FILE (\d+)')
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
64
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
65 start = 1 + round*6
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
66 if verbose:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
67 print('%s. Simple iteration (bs=%s)' % (start+0, bs))
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
68 fi = FileInput(files=(t1, t2, t3, t4), bufsize=bs)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
69 lines = list(fi)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
70 fi.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
71 self.assertEqual(len(lines), 31)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
72 self.assertEqual(lines[4], 'Line 5 of file 1\n')
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
73 self.assertEqual(lines[30], 'Line 1 of file 4\n')
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
74 self.assertEqual(fi.lineno(), 31)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
75 self.assertEqual(fi.filename(), t4)
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
76
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
77 if verbose:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
78 print('%s. Status variables (bs=%s)' % (start+1, bs))
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
79 fi = FileInput(files=(t1, t2, t3, t4), bufsize=bs)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
80 s = "x"
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
81 while s and s != 'Line 6 of file 2\n':
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
82 s = fi.readline()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
83 self.assertEqual(fi.filename(), t2)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
84 self.assertEqual(fi.lineno(), 21)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
85 self.assertEqual(fi.filelineno(), 6)
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
86 self.assertFalse(fi.isfirstline())
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
87 self.assertFalse(fi.isstdin())
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
88
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
89 if verbose:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
90 print('%s. Nextfile (bs=%s)' % (start+2, bs))
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
91 fi.nextfile()
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
92 self.assertEqual(fi.readline(), 'Line 1 of file 3\n')
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
93 self.assertEqual(fi.lineno(), 22)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
94 fi.close()
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
95
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
96 if verbose:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
97 print('%s. Stdin (bs=%s)' % (start+3, bs))
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
98 fi = FileInput(files=(t1, t2, t3, t4, '-'), bufsize=bs)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
99 savestdin = sys.stdin
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
100 try:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
101 sys.stdin = StringIO("Line 1 of stdin\nLine 2 of stdin\n")
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
102 lines = list(fi)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
103 self.assertEqual(len(lines), 33)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
104 self.assertEqual(lines[32], 'Line 2 of stdin\n')
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
105 self.assertEqual(fi.filename(), '<stdin>')
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
106 fi.nextfile()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
107 finally:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
108 sys.stdin = savestdin
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
109
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
110 if verbose:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
111 print('%s. Boundary conditions (bs=%s)' % (start+4, bs))
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
112 fi = FileInput(files=(t1, t2, t3, t4), bufsize=bs)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
113 self.assertEqual(fi.lineno(), 0)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
114 self.assertEqual(fi.filename(), None)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
115 fi.nextfile()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
116 self.assertEqual(fi.lineno(), 0)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
117 self.assertEqual(fi.filename(), None)
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
118
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
119 if verbose:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
120 print('%s. Inplace (bs=%s)' % (start+5, bs))
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
121 savestdout = sys.stdout
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
122 try:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
123 fi = FileInput(files=(t1, t2, t3, t4), inplace=1, bufsize=bs)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
124 for line in fi:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
125 line = line[:-1].upper()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
126 print(line)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
127 fi.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
128 finally:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
129 sys.stdout = savestdout
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
130
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
131 fi = FileInput(files=(t1, t2, t3, t4), bufsize=bs)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
132 for line in fi:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
133 self.assertEqual(line[-1], '\n')
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
134 m = pat.match(line[:-1])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
135 self.assertNotEqual(m, None)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
136 self.assertEqual(int(m.group(1)), fi.filelineno())
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
137 fi.close()
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
138
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
139 class UnconditionallyRaise:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
140 def __init__(self, exception_type):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
141 self.exception_type = exception_type
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
142 self.invoked = False
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
143 def __call__(self, *args, **kwargs):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
144 self.invoked = True
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
145 raise self.exception_type()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
146
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
147 class FileInputTests(unittest.TestCase):
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
148
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
149 def test_zero_byte_files(self):
46047
df90774f92b0 Ensure cleanup does not reference variables that don't yet exist.
Neal Norwitz <nnorwitz@gmail.com>
parents: 45471
diff changeset
150 t1 = t2 = t3 = t4 = None
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
151 try:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
152 t1 = writeTmp(1, [""])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
153 t2 = writeTmp(2, [""])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
154 t3 = writeTmp(3, ["The only line there is.\n"])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
155 t4 = writeTmp(4, [""])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
156 fi = FileInput(files=(t1, t2, t3, t4))
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
157
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
158 line = fi.readline()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
159 self.assertEqual(line, 'The only line there is.\n')
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
160 self.assertEqual(fi.lineno(), 1)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
161 self.assertEqual(fi.filelineno(), 1)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
162 self.assertEqual(fi.filename(), t3)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
163
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
164 line = fi.readline()
55593
0bb232078b8c Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47201
diff changeset
165 self.assertFalse(line)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
166 self.assertEqual(fi.lineno(), 1)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
167 self.assertEqual(fi.filelineno(), 0)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
168 self.assertEqual(fi.filename(), t4)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
169 fi.close()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
170 finally:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
171 remove_tempfiles(t1, t2, t3, t4)
18484
e061155f99e8 SF patch #440170: Tests for fileinput module.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
172
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
173 def test_files_that_dont_end_with_newline(self):
46047
df90774f92b0 Ensure cleanup does not reference variables that don't yet exist.
Neal Norwitz <nnorwitz@gmail.com>
parents: 45471
diff changeset
174 t1 = t2 = None
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
175 try:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
176 t1 = writeTmp(1, ["A\nB\nC"])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
177 t2 = writeTmp(2, ["D\nE\nF"])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
178 fi = FileInput(files=(t1, t2))
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
179 lines = list(fi)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
180 self.assertEqual(lines, ["A\n", "B\n", "C", "D\n", "E\n", "F"])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
181 self.assertEqual(fi.filelineno(), 3)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
182 self.assertEqual(fi.lineno(), 6)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
183 finally:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
184 remove_tempfiles(t1, t2)
36590
0d5f8077bd24 Patch #1337756: fileinput now accepts Unicode filenames.
Georg Brandl <georg@python.org>
parents: 24364
diff changeset
185
42111
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
186 ## def test_unicode_filenames(self):
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
187 ## # XXX A unicode string is always returned by writeTmp.
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
188 ## # So is this needed?
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
189 ## try:
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
190 ## t1 = writeTmp(1, ["A\nB"])
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
191 ## encoding = sys.getfilesystemencoding()
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
192 ## if encoding is None:
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
193 ## encoding = 'ascii'
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
194 ## fi = FileInput(files=str(t1, encoding))
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
195 ## lines = list(fi)
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
196 ## self.assertEqual(lines, ["A\n", "B"])
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
197 ## finally:
32fe2b9e9f11 Fix a buch of shallow test failures.
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
198 ## remove_tempfiles(t1)
36594
781654be55ef Patch #1215184: fileinput now has a fileno() function for getting the
Georg Brandl <georg@python.org>
parents: 36590
diff changeset
199
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
200 def test_fileno(self):
46047
df90774f92b0 Ensure cleanup does not reference variables that don't yet exist.
Neal Norwitz <nnorwitz@gmail.com>
parents: 45471
diff changeset
201 t1 = t2 = None
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
202 try:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
203 t1 = writeTmp(1, ["A\nB"])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
204 t2 = writeTmp(2, ["C\nD"])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
205 fi = FileInput(files=(t1, t2))
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
206 self.assertEqual(fi.fileno(), -1)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
207 line =next( fi)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
208 self.assertNotEqual(fi.fileno(), -1)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
209 fi.nextfile()
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
210 self.assertEqual(fi.fileno(), -1)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
211 line = list(fi)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
212 self.assertEqual(fi.fileno(), -1)
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
213 finally:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
214 remove_tempfiles(t1, t2)
36595
c6fba456227b Patch #1212287: fileinput.input() now has a mode parameter for
Georg Brandl <georg@python.org>
parents: 36594
diff changeset
215
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
216 def test_opening_mode(self):
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
217 try:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
218 # invalid mode, should raise ValueError
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
219 fi = FileInput(mode="w")
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
220 self.fail("FileInput should reject invalid mode argument")
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
221 except ValueError:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
222 pass
42918
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
223 t1 = None
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
224 try:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
225 # try opening in universal newline mode
42918
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
226 t1 = writeTmp(1, [b"A\nB\r\nC\rD"], mode="wb")
87520
694e2708b4a8 Issue #15204: Silence and check the 'U' mode deprecation warnings in tests.
Serhiy Storchaka <storchaka@gmail.com>
parents: 84108
diff changeset
227 with check_warnings(('', DeprecationWarning)):
694e2708b4a8 Issue #15204: Silence and check the 'U' mode deprecation warnings in tests.
Serhiy Storchaka <storchaka@gmail.com>
parents: 84108
diff changeset
228 fi = FileInput(files=t1, mode="U")
694e2708b4a8 Issue #15204: Silence and check the 'U' mode deprecation warnings in tests.
Serhiy Storchaka <storchaka@gmail.com>
parents: 84108
diff changeset
229 with check_warnings(('', DeprecationWarning)):
694e2708b4a8 Issue #15204: Silence and check the 'U' mode deprecation warnings in tests.
Serhiy Storchaka <storchaka@gmail.com>
parents: 84108
diff changeset
230 lines = list(fi)
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
231 self.assertEqual(lines, ["A\n", "B\n", "C\n", "D"])
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
232 finally:
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
233 remove_tempfiles(t1)
36596
e57377f0a167 Patch #1215184: FileInput now can be given an opening hook which can
Georg Brandl <georg@python.org>
parents: 36595
diff changeset
234
42918
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
235 def test_file_opening_hook(self):
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
236 try:
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
237 # cannot use openhook and inplace mode
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
238 fi = FileInput(inplace=1, openhook=lambda f, m: None)
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
239 self.fail("FileInput should raise if both inplace "
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
240 "and openhook arguments are given")
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
241 except ValueError:
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
242 pass
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
243 try:
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
244 fi = FileInput(openhook=1)
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
245 self.fail("FileInput should check openhook for being callable")
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
246 except ValueError:
9220931e4741 More changes needed to make things work once bytes and str are truly divorced.
Guido van Rossum <guido@python.org>
parents: 42501
diff changeset
247 pass
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
248
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
249 class CustomOpenHook:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
250 def __init__(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
251 self.invoked = False
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
252 def __call__(self, *args):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
253 self.invoked = True
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
254 return open(*args)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
255
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
256 t = writeTmp(1, ["\n"])
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
257 self.addCleanup(remove_tempfiles, t)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
258 custom_open_hook = CustomOpenHook()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
259 with FileInput([t], openhook=custom_open_hook) as fi:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
260 fi.readline()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
261 self.assertTrue(custom_open_hook.invoked, "openhook not invoked")
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
262
63379
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
263 def test_context_manager(self):
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
264 try:
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
265 t1 = writeTmp(1, ["A\nB\nC"])
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
266 t2 = writeTmp(2, ["D\nE\nF"])
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
267 with FileInput(files=(t1, t2)) as fi:
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
268 lines = list(fi)
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
269 self.assertEqual(lines, ["A\n", "B\n", "C", "D\n", "E\n", "F"])
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
270 self.assertEqual(fi.filelineno(), 3)
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
271 self.assertEqual(fi.lineno(), 6)
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
272 self.assertEqual(fi._files, ())
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
273 finally:
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
274 remove_tempfiles(t1, t2)
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
275
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
276 def test_close_on_exception(self):
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
277 try:
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
278 t1 = writeTmp(1, [""])
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
279 with FileInput(files=t1) as fi:
81039
7d69d04522e3 Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 73434
diff changeset
280 raise OSError
7d69d04522e3 Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 73434
diff changeset
281 except OSError:
63379
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
282 self.assertEqual(fi._files, ())
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
283 finally:
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
284 remove_tempfiles(t1)
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
285
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
286 def test_empty_files_list_specified_to_constructor(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
287 with FileInput(files=[]) as fi:
68530
3e783a029869 Move off of assertEquals() and over to assertEqual().
Brett Cannon <brett@python.org>
parents: 68497
diff changeset
288 self.assertEqual(fi._files, ('-',))
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
289
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
290 def test__getitem__(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
291 """Tests invoking FileInput.__getitem__() with the current
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
292 line number"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
293 t = writeTmp(1, ["line1\n", "line2\n"])
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
294 self.addCleanup(remove_tempfiles, t)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
295 with FileInput(files=[t]) as fi:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
296 retval1 = fi[0]
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
297 self.assertEqual(retval1, "line1\n")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
298 retval2 = fi[1]
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
299 self.assertEqual(retval2, "line2\n")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
300
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
301 def test__getitem__invalid_key(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
302 """Tests invoking FileInput.__getitem__() with an index unequal to
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
303 the line number"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
304 t = writeTmp(1, ["line1\n", "line2\n"])
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
305 self.addCleanup(remove_tempfiles, t)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
306 with FileInput(files=[t]) as fi:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
307 with self.assertRaises(RuntimeError) as cm:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
308 fi[1]
68530
3e783a029869 Move off of assertEquals() and over to assertEqual().
Brett Cannon <brett@python.org>
parents: 68497
diff changeset
309 self.assertEqual(cm.exception.args, ("accessing lines out of order",))
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
310
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
311 def test__getitem__eof(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
312 """Tests invoking FileInput.__getitem__() with the line number but at
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
313 end-of-input"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
314 t = writeTmp(1, [])
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
315 self.addCleanup(remove_tempfiles, t)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
316 with FileInput(files=[t]) as fi:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
317 with self.assertRaises(IndexError) as cm:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
318 fi[0]
68530
3e783a029869 Move off of assertEquals() and over to assertEqual().
Brett Cannon <brett@python.org>
parents: 68497
diff changeset
319 self.assertEqual(cm.exception.args, ("end of input reached",))
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
320
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
321 def test_nextfile_oserror_deleting_backup(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
322 """Tests invoking FileInput.nextfile() when the attempt to delete
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
323 the backup file would raise OSError. This error is expected to be
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
324 silently ignored"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
325
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
326 os_unlink_orig = os.unlink
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
327 os_unlink_replacement = UnconditionallyRaise(OSError)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
328 try:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
329 t = writeTmp(1, ["\n"])
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
330 self.addCleanup(remove_tempfiles, t)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
331 with FileInput(files=[t], inplace=True) as fi:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
332 next(fi) # make sure the file is opened
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
333 os.unlink = os_unlink_replacement
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
334 fi.nextfile()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
335 finally:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
336 os.unlink = os_unlink_orig
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
337
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
338 # sanity check to make sure that our test scenario was actually hit
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
339 self.assertTrue(os_unlink_replacement.invoked,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
340 "os.unlink() was not invoked")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
341
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
342 def test_readline_os_fstat_raises_OSError(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
343 """Tests invoking FileInput.readline() when os.fstat() raises OSError.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
344 This exception should be silently discarded."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
345
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
346 os_fstat_orig = os.fstat
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
347 os_fstat_replacement = UnconditionallyRaise(OSError)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
348 try:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
349 t = writeTmp(1, ["\n"])
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
350 self.addCleanup(remove_tempfiles, t)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
351 with FileInput(files=[t], inplace=True) as fi:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
352 os.fstat = os_fstat_replacement
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
353 fi.readline()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
354 finally:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
355 os.fstat = os_fstat_orig
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
356
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
357 # sanity check to make sure that our test scenario was actually hit
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
358 self.assertTrue(os_fstat_replacement.invoked,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
359 "os.fstat() was not invoked")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
360
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
361 @unittest.skipIf(not hasattr(os, "chmod"), "os.chmod does not exist")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
362 def test_readline_os_chmod_raises_OSError(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
363 """Tests invoking FileInput.readline() when os.chmod() raises OSError.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
364 This exception should be silently discarded."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
365
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
366 os_chmod_orig = os.chmod
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
367 os_chmod_replacement = UnconditionallyRaise(OSError)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
368 try:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
369 t = writeTmp(1, ["\n"])
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
370 self.addCleanup(remove_tempfiles, t)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
371 with FileInput(files=[t], inplace=True) as fi:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
372 os.chmod = os_chmod_replacement
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
373 fi.readline()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
374 finally:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
375 os.chmod = os_chmod_orig
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
376
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
377 # sanity check to make sure that our test scenario was actually hit
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
378 self.assertTrue(os_chmod_replacement.invoked,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
379 "os.fstat() was not invoked")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
380
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
381 def test_fileno_when_ValueError_raised(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
382 class FilenoRaisesValueError(UnconditionallyRaise):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
383 def __init__(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
384 UnconditionallyRaise.__init__(self, ValueError)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
385 def fileno(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
386 self.__call__()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
387
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
388 unconditionally_raise_ValueError = FilenoRaisesValueError()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
389 t = writeTmp(1, ["\n"])
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
390 self.addCleanup(remove_tempfiles, t)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
391 with FileInput(files=[t]) as fi:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
392 file_backup = fi._file
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
393 try:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
394 fi._file = unconditionally_raise_ValueError
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
395 result = fi.fileno()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
396 finally:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
397 fi._file = file_backup # make sure the file gets cleaned up
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
398
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
399 # sanity check to make sure that our test scenario was actually hit
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
400 self.assertTrue(unconditionally_raise_ValueError.invoked,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
401 "_file.fileno() was not invoked")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
402
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
403 self.assertEqual(result, -1, "fileno() should return -1")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
404
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
405 class MockFileInput:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
406 """A class that mocks out fileinput.FileInput for use during unit tests"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
407
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
408 def __init__(self, files=None, inplace=False, backup="", bufsize=0,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
409 mode="r", openhook=None):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
410 self.files = files
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
411 self.inplace = inplace
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
412 self.backup = backup
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
413 self.bufsize = bufsize
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
414 self.mode = mode
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
415 self.openhook = openhook
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
416 self._file = None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
417 self.invocation_counts = collections.defaultdict(lambda: 0)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
418 self.return_values = {}
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
419
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
420 def close(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
421 self.invocation_counts["close"] += 1
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
422
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
423 def nextfile(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
424 self.invocation_counts["nextfile"] += 1
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
425 return self.return_values["nextfile"]
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
426
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
427 def filename(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
428 self.invocation_counts["filename"] += 1
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
429 return self.return_values["filename"]
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
430
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
431 def lineno(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
432 self.invocation_counts["lineno"] += 1
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
433 return self.return_values["lineno"]
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
434
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
435 def filelineno(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
436 self.invocation_counts["filelineno"] += 1
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
437 return self.return_values["filelineno"]
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
438
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
439 def fileno(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
440 self.invocation_counts["fileno"] += 1
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
441 return self.return_values["fileno"]
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
442
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
443 def isfirstline(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
444 self.invocation_counts["isfirstline"] += 1
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
445 return self.return_values["isfirstline"]
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
446
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
447 def isstdin(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
448 self.invocation_counts["isstdin"] += 1
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
449 return self.return_values["isstdin"]
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
450
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
451 class BaseFileInputGlobalMethodsTest(unittest.TestCase):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
452 """Base class for unit tests for the global function of
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
453 the fileinput module."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
454
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
455 def setUp(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
456 self._orig_state = fileinput._state
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
457 self._orig_FileInput = fileinput.FileInput
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
458 fileinput.FileInput = MockFileInput
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
459
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
460 def tearDown(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
461 fileinput.FileInput = self._orig_FileInput
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
462 fileinput._state = self._orig_state
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
463
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
464 def assertExactlyOneInvocation(self, mock_file_input, method_name):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
465 # assert that the method with the given name was invoked once
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
466 actual_count = mock_file_input.invocation_counts[method_name]
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
467 self.assertEqual(actual_count, 1, method_name)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
468 # assert that no other unexpected methods were invoked
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
469 actual_total_count = len(mock_file_input.invocation_counts)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
470 self.assertEqual(actual_total_count, 1)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
471
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
472 class Test_fileinput_input(BaseFileInputGlobalMethodsTest):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
473 """Unit tests for fileinput.input()"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
474
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
475 def test_state_is_not_None_and_state_file_is_not_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
476 """Tests invoking fileinput.input() when fileinput._state is not None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
477 and its _file attribute is also not None. Expect RuntimeError to
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
478 be raised with a meaningful error message and for fileinput._state
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
479 to *not* be modified."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
480 instance = MockFileInput()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
481 instance._file = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
482 fileinput._state = instance
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
483 with self.assertRaises(RuntimeError) as cm:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
484 fileinput.input()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
485 self.assertEqual(("input() already active",), cm.exception.args)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
486 self.assertIs(instance, fileinput._state, "fileinput._state")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
487
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
488 def test_state_is_not_None_and_state_file_is_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
489 """Tests invoking fileinput.input() when fileinput._state is not None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
490 but its _file attribute *is* None. Expect it to create and return
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
491 a new fileinput.FileInput object with all method parameters passed
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
492 explicitly to the __init__() method; also ensure that
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
493 fileinput._state is set to the returned instance."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
494 instance = MockFileInput()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
495 instance._file = None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
496 fileinput._state = instance
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
497 self.do_test_call_input()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
498
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
499 def test_state_is_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
500 """Tests invoking fileinput.input() when fileinput._state is None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
501 Expect it to create and return a new fileinput.FileInput object
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
502 with all method parameters passed explicitly to the __init__()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
503 method; also ensure that fileinput._state is set to the returned
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
504 instance."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
505 fileinput._state = None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
506 self.do_test_call_input()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
507
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
508 def do_test_call_input(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
509 """Tests that fileinput.input() creates a new fileinput.FileInput
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
510 object, passing the given parameters unmodified to
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
511 fileinput.FileInput.__init__(). Note that this test depends on the
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
512 monkey patching of fileinput.FileInput done by setUp()."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
513 files = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
514 inplace = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
515 backup = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
516 bufsize = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
517 mode = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
518 openhook = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
519
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
520 # call fileinput.input() with different values for each argument
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
521 result = fileinput.input(files=files, inplace=inplace, backup=backup,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
522 bufsize=bufsize,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
523 mode=mode, openhook=openhook)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
524
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
525 # ensure fileinput._state was set to the returned object
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
526 self.assertIs(result, fileinput._state, "fileinput._state")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
527
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
528 # ensure the parameters to fileinput.input() were passed directly
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
529 # to FileInput.__init__()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
530 self.assertIs(files, result.files, "files")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
531 self.assertIs(inplace, result.inplace, "inplace")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
532 self.assertIs(backup, result.backup, "backup")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
533 self.assertIs(bufsize, result.bufsize, "bufsize")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
534 self.assertIs(mode, result.mode, "mode")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
535 self.assertIs(openhook, result.openhook, "openhook")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
536
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
537 class Test_fileinput_close(BaseFileInputGlobalMethodsTest):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
538 """Unit tests for fileinput.close()"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
539
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
540 def test_state_is_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
541 """Tests that fileinput.close() does nothing if fileinput._state
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
542 is None"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
543 fileinput._state = None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
544 fileinput.close()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
545 self.assertIsNone(fileinput._state)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
546
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
547 def test_state_is_not_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
548 """Tests that fileinput.close() invokes close() on fileinput._state
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
549 and sets _state=None"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
550 instance = MockFileInput()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
551 fileinput._state = instance
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
552 fileinput.close()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
553 self.assertExactlyOneInvocation(instance, "close")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
554 self.assertIsNone(fileinput._state)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
555
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
556 class Test_fileinput_nextfile(BaseFileInputGlobalMethodsTest):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
557 """Unit tests for fileinput.nextfile()"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
558
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
559 def test_state_is_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
560 """Tests fileinput.nextfile() when fileinput._state is None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
561 Ensure that it raises RuntimeError with a meaningful error message
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
562 and does not modify fileinput._state"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
563 fileinput._state = None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
564 with self.assertRaises(RuntimeError) as cm:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
565 fileinput.nextfile()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
566 self.assertEqual(("no active input()",), cm.exception.args)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
567 self.assertIsNone(fileinput._state)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
568
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
569 def test_state_is_not_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
570 """Tests fileinput.nextfile() when fileinput._state is not None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
571 Ensure that it invokes fileinput._state.nextfile() exactly once,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
572 returns whatever it returns, and does not modify fileinput._state
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
573 to point to a different object."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
574 nextfile_retval = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
575 instance = MockFileInput()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
576 instance.return_values["nextfile"] = nextfile_retval
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
577 fileinput._state = instance
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
578 retval = fileinput.nextfile()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
579 self.assertExactlyOneInvocation(instance, "nextfile")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
580 self.assertIs(retval, nextfile_retval)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
581 self.assertIs(fileinput._state, instance)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
582
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
583 class Test_fileinput_filename(BaseFileInputGlobalMethodsTest):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
584 """Unit tests for fileinput.filename()"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
585
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
586 def test_state_is_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
587 """Tests fileinput.filename() when fileinput._state is None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
588 Ensure that it raises RuntimeError with a meaningful error message
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
589 and does not modify fileinput._state"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
590 fileinput._state = None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
591 with self.assertRaises(RuntimeError) as cm:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
592 fileinput.filename()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
593 self.assertEqual(("no active input()",), cm.exception.args)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
594 self.assertIsNone(fileinput._state)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
595
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
596 def test_state_is_not_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
597 """Tests fileinput.filename() when fileinput._state is not None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
598 Ensure that it invokes fileinput._state.filename() exactly once,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
599 returns whatever it returns, and does not modify fileinput._state
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
600 to point to a different object."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
601 filename_retval = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
602 instance = MockFileInput()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
603 instance.return_values["filename"] = filename_retval
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
604 fileinput._state = instance
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
605 retval = fileinput.filename()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
606 self.assertExactlyOneInvocation(instance, "filename")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
607 self.assertIs(retval, filename_retval)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
608 self.assertIs(fileinput._state, instance)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
609
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
610 class Test_fileinput_lineno(BaseFileInputGlobalMethodsTest):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
611 """Unit tests for fileinput.lineno()"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
612
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
613 def test_state_is_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
614 """Tests fileinput.lineno() when fileinput._state is None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
615 Ensure that it raises RuntimeError with a meaningful error message
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
616 and does not modify fileinput._state"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
617 fileinput._state = None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
618 with self.assertRaises(RuntimeError) as cm:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
619 fileinput.lineno()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
620 self.assertEqual(("no active input()",), cm.exception.args)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
621 self.assertIsNone(fileinput._state)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
622
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
623 def test_state_is_not_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
624 """Tests fileinput.lineno() when fileinput._state is not None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
625 Ensure that it invokes fileinput._state.lineno() exactly once,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
626 returns whatever it returns, and does not modify fileinput._state
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
627 to point to a different object."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
628 lineno_retval = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
629 instance = MockFileInput()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
630 instance.return_values["lineno"] = lineno_retval
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
631 fileinput._state = instance
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
632 retval = fileinput.lineno()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
633 self.assertExactlyOneInvocation(instance, "lineno")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
634 self.assertIs(retval, lineno_retval)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
635 self.assertIs(fileinput._state, instance)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
636
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
637 class Test_fileinput_filelineno(BaseFileInputGlobalMethodsTest):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
638 """Unit tests for fileinput.filelineno()"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
639
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
640 def test_state_is_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
641 """Tests fileinput.filelineno() when fileinput._state is None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
642 Ensure that it raises RuntimeError with a meaningful error message
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
643 and does not modify fileinput._state"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
644 fileinput._state = None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
645 with self.assertRaises(RuntimeError) as cm:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
646 fileinput.filelineno()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
647 self.assertEqual(("no active input()",), cm.exception.args)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
648 self.assertIsNone(fileinput._state)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
649
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
650 def test_state_is_not_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
651 """Tests fileinput.filelineno() when fileinput._state is not None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
652 Ensure that it invokes fileinput._state.filelineno() exactly once,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
653 returns whatever it returns, and does not modify fileinput._state
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
654 to point to a different object."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
655 filelineno_retval = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
656 instance = MockFileInput()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
657 instance.return_values["filelineno"] = filelineno_retval
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
658 fileinput._state = instance
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
659 retval = fileinput.filelineno()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
660 self.assertExactlyOneInvocation(instance, "filelineno")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
661 self.assertIs(retval, filelineno_retval)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
662 self.assertIs(fileinput._state, instance)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
663
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
664 class Test_fileinput_fileno(BaseFileInputGlobalMethodsTest):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
665 """Unit tests for fileinput.fileno()"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
666
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
667 def test_state_is_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
668 """Tests fileinput.fileno() when fileinput._state is None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
669 Ensure that it raises RuntimeError with a meaningful error message
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
670 and does not modify fileinput._state"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
671 fileinput._state = None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
672 with self.assertRaises(RuntimeError) as cm:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
673 fileinput.fileno()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
674 self.assertEqual(("no active input()",), cm.exception.args)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
675 self.assertIsNone(fileinput._state)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
676
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
677 def test_state_is_not_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
678 """Tests fileinput.fileno() when fileinput._state is not None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
679 Ensure that it invokes fileinput._state.fileno() exactly once,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
680 returns whatever it returns, and does not modify fileinput._state
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
681 to point to a different object."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
682 fileno_retval = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
683 instance = MockFileInput()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
684 instance.return_values["fileno"] = fileno_retval
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
685 instance.fileno_retval = fileno_retval
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
686 fileinput._state = instance
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
687 retval = fileinput.fileno()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
688 self.assertExactlyOneInvocation(instance, "fileno")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
689 self.assertIs(retval, fileno_retval)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
690 self.assertIs(fileinput._state, instance)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
691
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
692 class Test_fileinput_isfirstline(BaseFileInputGlobalMethodsTest):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
693 """Unit tests for fileinput.isfirstline()"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
694
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
695 def test_state_is_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
696 """Tests fileinput.isfirstline() when fileinput._state is None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
697 Ensure that it raises RuntimeError with a meaningful error message
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
698 and does not modify fileinput._state"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
699 fileinput._state = None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
700 with self.assertRaises(RuntimeError) as cm:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
701 fileinput.isfirstline()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
702 self.assertEqual(("no active input()",), cm.exception.args)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
703 self.assertIsNone(fileinput._state)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
704
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
705 def test_state_is_not_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
706 """Tests fileinput.isfirstline() when fileinput._state is not None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
707 Ensure that it invokes fileinput._state.isfirstline() exactly once,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
708 returns whatever it returns, and does not modify fileinput._state
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
709 to point to a different object."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
710 isfirstline_retval = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
711 instance = MockFileInput()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
712 instance.return_values["isfirstline"] = isfirstline_retval
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
713 fileinput._state = instance
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
714 retval = fileinput.isfirstline()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
715 self.assertExactlyOneInvocation(instance, "isfirstline")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
716 self.assertIs(retval, isfirstline_retval)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
717 self.assertIs(fileinput._state, instance)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
718
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
719 class Test_fileinput_isstdin(BaseFileInputGlobalMethodsTest):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
720 """Unit tests for fileinput.isstdin()"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
721
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
722 def test_state_is_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
723 """Tests fileinput.isstdin() when fileinput._state is None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
724 Ensure that it raises RuntimeError with a meaningful error message
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
725 and does not modify fileinput._state"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
726 fileinput._state = None
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
727 with self.assertRaises(RuntimeError) as cm:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
728 fileinput.isstdin()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
729 self.assertEqual(("no active input()",), cm.exception.args)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
730 self.assertIsNone(fileinput._state)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
731
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
732 def test_state_is_not_None(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
733 """Tests fileinput.isstdin() when fileinput._state is not None.
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
734 Ensure that it invokes fileinput._state.isstdin() exactly once,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
735 returns whatever it returns, and does not modify fileinput._state
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
736 to point to a different object."""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
737 isstdin_retval = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
738 instance = MockFileInput()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
739 instance.return_values["isstdin"] = isstdin_retval
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
740 fileinput._state = instance
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
741 retval = fileinput.isstdin()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
742 self.assertExactlyOneInvocation(instance, "isstdin")
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
743 self.assertIs(retval, isstdin_retval)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
744 self.assertIs(fileinput._state, instance)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
745
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
746 class InvocationRecorder:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
747 def __init__(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
748 self.invocation_count = 0
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
749 def __call__(self, *args, **kwargs):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
750 self.invocation_count += 1
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
751 self.last_invocation = (args, kwargs)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
752
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
753 class Test_hook_compressed(unittest.TestCase):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
754 """Unit tests for fileinput.hook_compressed()"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
755
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
756 def setUp(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
757 self.fake_open = InvocationRecorder()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
758
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
759 def test_empty_string(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
760 self.do_test_use_builtin_open("", 1)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
761
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
762 def test_no_ext(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
763 self.do_test_use_builtin_open("abcd", 2)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
764
70096
e0b4ed75b8e7 Skip test in test_fileinput when zlib is missing.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68669
diff changeset
765 @unittest.skipUnless(gzip, "Requires gzip and zlib")
68497
d1acf761a911 Adjust test names to be more descriptive instead of depending on capitalization.
briancurtin <brian.curtin@gmail.com>
parents: 68496
diff changeset
766 def test_gz_ext_fake(self):
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
767 original_open = gzip.open
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
768 gzip.open = self.fake_open
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
769 try:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
770 result = fileinput.hook_compressed("test.gz", 3)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
771 finally:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
772 gzip.open = original_open
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
773
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
774 self.assertEqual(self.fake_open.invocation_count, 1)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
775 self.assertEqual(self.fake_open.last_invocation, (("test.gz", 3), {}))
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
776
68669
bb645cc39e60 Fix #11596. When bz2 isn't available, skip test_bz2_ext_fake.
briancurtin <brian.curtin@gmail.com>
parents: 68530
diff changeset
777 @unittest.skipUnless(bz2, "Requires bz2")
68497
d1acf761a911 Adjust test names to be more descriptive instead of depending on capitalization.
briancurtin <brian.curtin@gmail.com>
parents: 68496
diff changeset
778 def test_bz2_ext_fake(self):
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
779 original_open = bz2.BZ2File
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
780 bz2.BZ2File = self.fake_open
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
781 try:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
782 result = fileinput.hook_compressed("test.bz2", 4)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
783 finally:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
784 bz2.BZ2File = original_open
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
785
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
786 self.assertEqual(self.fake_open.invocation_count, 1)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
787 self.assertEqual(self.fake_open.last_invocation, (("test.bz2", 4), {}))
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
788
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
789 def test_blah_ext(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
790 self.do_test_use_builtin_open("abcd.blah", 5)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
791
68497
d1acf761a911 Adjust test names to be more descriptive instead of depending on capitalization.
briancurtin <brian.curtin@gmail.com>
parents: 68496
diff changeset
792 def test_gz_ext_builtin(self):
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
793 self.do_test_use_builtin_open("abcd.Gz", 6)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
794
68497
d1acf761a911 Adjust test names to be more descriptive instead of depending on capitalization.
briancurtin <brian.curtin@gmail.com>
parents: 68496
diff changeset
795 def test_bz2_ext_builtin(self):
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
796 self.do_test_use_builtin_open("abcd.Bz2", 7)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
797
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
798 def do_test_use_builtin_open(self, filename, mode):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
799 original_open = self.replace_builtin_open(self.fake_open)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
800 try:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
801 result = fileinput.hook_compressed(filename, mode)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
802 finally:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
803 self.replace_builtin_open(original_open)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
804
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
805 self.assertEqual(self.fake_open.invocation_count, 1)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
806 self.assertEqual(self.fake_open.last_invocation,
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
807 ((filename, mode), {}))
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
808
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
809 @staticmethod
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
810 def replace_builtin_open(new_open_func):
73434
c2b3e8b437a4 fileinput: replace this last occurence of codecs.open with builtins.open.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 70096
diff changeset
811 original_open = builtins.open
c2b3e8b437a4 fileinput: replace this last occurence of codecs.open with builtins.open.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 70096
diff changeset
812 builtins.open = new_open_func
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
813 return original_open
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
814
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
815 class Test_hook_encoded(unittest.TestCase):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
816 """Unit tests for fileinput.hook_encoded()"""
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
817
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
818 def test(self):
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
819 encoding = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
820 result = fileinput.hook_encoded(encoding)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
821
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
822 fake_open = InvocationRecorder()
73434
c2b3e8b437a4 fileinput: replace this last occurence of codecs.open with builtins.open.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 70096
diff changeset
823 original_open = builtins.open
c2b3e8b437a4 fileinput: replace this last occurence of codecs.open with builtins.open.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 70096
diff changeset
824 builtins.open = fake_open
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
825 try:
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
826 filename = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
827 mode = object()
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
828 open_result = result(filename, mode)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
829 finally:
73434
c2b3e8b437a4 fileinput: replace this last occurence of codecs.open with builtins.open.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 70096
diff changeset
830 builtins.open = original_open
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
831
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
832 self.assertEqual(fake_open.invocation_count, 1)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
833
73434
c2b3e8b437a4 fileinput: replace this last occurence of codecs.open with builtins.open.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 70096
diff changeset
834 args, kwargs = fake_open.last_invocation
68495
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
835 self.assertIs(args[0], filename)
f2e04ce75f0b Fix #11509. Significantly increase test coverage for fileinput.
briancurtin <brian.curtin@gmail.com>
parents: 63379
diff changeset
836 self.assertIs(args[1], mode)
73434
c2b3e8b437a4 fileinput: replace this last occurence of codecs.open with builtins.open.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 70096
diff changeset
837 self.assertIs(kwargs.pop('encoding'), encoding)
c2b3e8b437a4 fileinput: replace this last occurence of codecs.open with builtins.open.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 70096
diff changeset
838 self.assertFalse(kwargs)
63379
ab89d0f52a7f #1286: allow using fileinput.FileInput as context manager.
Georg Brandl <georg@python.org>
parents: 55593
diff changeset
839
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
840
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41501
diff changeset
841 if __name__ == "__main__":
84108
05f7883ee92d Update various test modules to use unittest.main() for test discovery
Brett Cannon <brett@python.org>
parents: 81039
diff changeset
842 unittest.main()