1
# @author Stefano Borini
2
from wavemol.core import io
10
return os.path.dirname(__file__)
13
class TestFileReader(unittest.TestCase):
14
def testFileReaderOpen(self): # fold>>
15
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
17
self.assertEqual(f.__class__, io.FileReader)
20
def testFileReadLine(self): # fold>>
21
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
24
self.assertEqual(l,"1st line\n")
26
self.assertEqual(l,"2nd line\n")
28
self.assertEqual(l,"3rd line\n")
30
# now the pointer is at end of file
31
self.assertEqual(f.readline(), '')
35
def testLen(self): # fold>>
36
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
37
self.assertEqual(len(f),3)
40
def testGetItem(self): # fold>>
42
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
44
self.assertEqual(f[0],"1st line\n")
45
self.assertEqual(f[1],"2nd line\n")
46
self.assertEqual(f[2],"3rd line\n")
51
def testGetItemOutOfBounds(self): # fold>>
52
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
54
# move at BOF with big negative num
55
self.assertEqual(f[-999999],'')
56
self.assertEqual(f.isAtBOF(), True)
57
# move at EOF with big positive num
58
self.assertEqual(f[9999999], '')
59
self.assertEqual(f.isAtEOF(), True)
61
self.assertEqual(f[-1], '')
62
self.assertEqual(f.isAtBOF(), True)
63
# move at EOF with len
64
self.assertEqual(f[len(f)], '')
65
self.assertEqual(f.isAtEOF(), True)
68
def testGetItemCurrentPos(self): # fold>>
69
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
72
self.assertEqual(f.currentPos(), 2)
75
def testFileReadlineBackward(self): # fold>>
76
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
80
self.assertEqual(l,"3rd line\n")
82
self.assertEqual(l,"2nd line\n")
84
self.assertEqual(l,"1st line\n")
86
# now the pointer is at begin of file
87
self.assertEqual(f.readbackline(), '')
90
def testCurrentLine(self): # fold>>
91
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
92
self.assertEqual(f.currentLine(), '')
95
self.assertEqual(f.currentLine(),"2nd line\n")
97
def testCurrentPos(self): # fold>>
99
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
100
self.assertEqual(f.currentPos(),-1)
102
self.assertEqual(f.currentPos(),1)
105
def testFileSeeks(self): # fold>>
106
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
107
self.assertEqual(f.currentPos(),-1)
108
self.assertEqual(f.isAtBOF(), True)
110
self.assertEqual( f.currentPos(), 3)
111
self.assertEqual( f.isAtEOF(), True)
113
self.assertEqual( f.currentPos(), -1)
114
self.assertEqual( f.isAtBOF(), True)
116
self.assertEqual( f.currentPos(), 2)
117
self.assertEqual( f.isAtPos(2), True)
119
def testSkipLines(self): # fold>>
120
"Seeking with relative jumps"
121
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
122
self.assertEqual( f.currentPos(), -1)
124
self.assertEqual( f.currentPos(), 2)
126
self.assertEqual( f.currentPos(), 1)
128
self.assertEqual( f.isAtEOF(), True)
130
self.assertEqual( f.isAtBOF(), True)
132
def testOccurrences(self): # fold>>
133
"Seeking with relative jumps"
134
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
136
self.assertEqual(f.isAtPos(0), True)
137
self.assertEqual(f.occurrences('line'), [1, 2])
138
self.assertEqual(f.isAtPos(0), True)
140
self.assertEqual(f.isAtPos(2), True)
141
self.assertEqual(f.occurrences('line', backward=True),[1, 0])
142
self.assertEqual(f.isAtPos(2), True)
144
self.assertEqual(f.occurrences('not found'), [])
146
def testFindStringBasic(self): # fold>>
147
"Findstring functionality/basic search"
148
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
149
self.assertEqual( f.findString("3rd"),"3rd line\n")
150
self.assertEqual( f.currentLine(), "3rd line\n")
152
self.assertEqual( f.findString("1st", backward=True),"1st line\n")
153
self.assertEqual( f.currentLine(),"1st line\n")
155
def testFindStringCounted(self): # fold>>
156
"Findstring functionality/counted search"
157
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
158
self.assertEqual(f.findString("line", 2), "2nd line\n")
159
self.assertEqual(f.currentLine(), "2nd line\n")
161
self.assertEqual(f.findString("line", 2, backward=True), "2nd line\n")
162
self.assertEqual(f.currentLine(), "2nd line\n")
164
def testFindStringNotFound(self): # fold>>
165
"Findstring functionality/not found case"
166
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
167
self.assertEqual(f.findString('notfound'),'')
168
self.assertEqual(f.isAtEOF(), True)
169
self.assertEqual(f.findString('notfound', backward=True), '')
170
self.assertEqual(f.isAtBOF(), True)
172
def testFindStringCurlineNeverEvaluated(self): # fold>>
173
"Findstring functionality/curline never evaluated"
174
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
176
self.assertEqual( f.findString('line'),"2nd line\n")
177
self.assertEqual( f.currentLine(), "2nd line\n")
179
self.assertEqual( f.findString('line', backward=True), "2nd line\n")
180
self.assertEqual( f.currentLine(), "2nd line\n")
182
def testRegexpBasic(self): # fold>>
183
"Findregexp functionality/basic search"
184
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
185
self.assertEqual( f.findRegexp("3rd"), ("3rd line\n",))
186
self.assertEqual( f.currentLine(), "3rd line\n")
188
self.assertEqual( f.findRegexp("1st", backward=True), ("1st line\n",))
189
self.assertEqual( f.currentLine(), "1st line\n")
191
def testRegexpCounted(self): # fold>>
192
"Findregexp functionality/counted search"
193
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
194
self.assertEqual(f.findRegexp("line", 2), ("2nd line\n",))
195
self.assertEqual(f.currentLine(), "2nd line\n")
197
self.assertEqual(f.findRegexp("line", 2, backward=True), ("2nd line\n",))
198
self.assertEqual(f.currentLine(),"2nd line\n")
200
def testRegexpNotFound(self): # fold>>
201
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
202
self.assertEqual( f.findRegexp('notfound'), None)
203
self.assertEqual( f.isAtEOF(), True)
204
self.assertEqual( f.findRegexp('notfound', backward=True), None)
205
self.assertEqual( f.isAtBOF(), True)
207
def testRegexpCurlineNeverEvaluated(self): # fold>>
208
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
210
self.assertEqual(f.findRegexp('line'), ("2nd line\n",))
211
self.assertEqual(f.currentLine(), "2nd line\n")
213
self.assertEqual(f.findRegexp('line', backward=True), ("2nd line\n",))
214
self.assertEqual(f.currentLine(),"2nd line\n")
216
def testRegexp(self): # fold>>
217
f = io.FileReader(os.path.join(moduleDir(),"testfile.txt"))
218
(line, match) = f.findRegexp('1(.*) line')
219
self.assertEqual( line, "1st line\n")
220
self.assertEqual( match, 'st')
223
def testEmptyFileGetItemLen(self): # fold>>
224
f = io.FileReader(os.path.join(moduleDir(),"emptytestfile.txt"))
225
# has the same length
226
self.assertEqual(len(f), 0)
228
def testEmptyFileGetItemOutOfBounds(self): # fold>>
229
f = io.FileReader(os.path.join(moduleDir(),"emptytestfile.txt"))
230
# move at BOF with big negative num
231
self.assertEqual(f[-999999], '')
232
self.assertEqual(f.isAtBOF(),True)
233
# move at EOF with big positive num
234
self.assertEqual(f[9999999], '')
235
self.assertEqual(f.isAtEOF(),True)
236
# move at BOF with -1
237
self.assertEqual(f[-1], '')
238
self.assertEqual(f.isAtBOF(),True)
239
# move at EOF with len
240
self.assertEqual(f[len(f)], '')
241
self.assertEqual(f.isAtEOF(),True)
243
def testEmptyFileReadLine(self): # fold>>
244
f = io.FileReader(os.path.join(moduleDir(),"emptytestfile.txt"))
245
self.assertEqual(f.readline(),'')
247
def testEmptyFileReadlineBackward(self): # fold>>
248
f = io.FileReader(os.path.join(moduleDir(),"emptytestfile.txt"))
250
self.assertEqual(f.readbackline(), '')
252
def testEmptyFileCurrentLine(self): # fold>>
253
f = io.FileReader(os.path.join(moduleDir(),"emptytestfile.txt"))
254
self.assertEqual(f.currentLine(), '')
256
def testEmptyFileCurrentPos(self): # fold>>
257
f = io.FileReader(os.path.join(moduleDir(),"emptytestfile.txt"))
258
self.assertEqual(f.currentPos(), -1)
260
def testEmptyFileSeeks(self): # fold>>
261
f = io.FileReader(os.path.join(moduleDir(),"emptytestfile.txt"))
262
self.assertEqual(f.currentPos(), -1)
263
self.assertEqual(f.isAtBOF(), True)
265
self.assertEqual(f.currentPos(), 0)
266
self.assertEqual(f.isAtEOF(), True)
268
self.assertEqual(f.currentPos(), -1)
269
self.assertEqual(f.isAtBOF(), True)
271
def testEmptyFileSkipLines(self): # fold>>
272
f = io.FileReader(os.path.join(moduleDir(),"emptytestfile.txt"))
273
self.assertEqual(f.currentPos(), -1)
275
self.assertEqual(f.isAtEOF(), True)
277
self.assertEqual(f.isAtBOF(), True)
279
def testEmptyFileOccurrences(self): # fold>>
280
f = io.FileReader(os.path.join(moduleDir(),"emptytestfile.txt"))
281
self.assertEqual(f.occurrences('not found'), [])
283
def testEmptyFileFindStringNotFound(self): # fold>>
284
f = io.FileReader(os.path.join(moduleDir(),"emptytestfile.txt"))
285
self.assertEqual( f.findString('notfound'), '')
286
self.assertEqual( f.isAtEOF(), True)
287
self.assertEqual( f.findString('notfound', backward=True), '')
288
self.assertEqual( f.isAtBOF(), True)
290
def testEmptyFileRegexpNotFound(self): # fold>>
291
f = io.FileReader(os.path.join(moduleDir(),"emptytestfile.txt"))
292
self.assertEqual(f.findRegexp('notfound'),None)
293
self.assertEqual(f.isAtEOF(), True)
294
self.assertEqual(f.findRegexp('notfound', backward=True), None)
295
self.assertEqual(f.isAtBOF(), True)
298
if __name__ == '__main__':