132 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from StringIO import StringIO
 | |
| from util.registry.filelike import FilelikeStreamConcat, LimitingStream, StreamSlice
 | |
| 
 | |
| def somegenerator():
 | |
|   yield 'some'
 | |
|   yield 'cool'
 | |
|   yield 'file-contents'
 | |
| 
 | |
| def test_parts():
 | |
|   gens = iter([StringIO(s) for s in somegenerator()])
 | |
|   fileobj = FilelikeStreamConcat(gens)
 | |
| 
 | |
|   assert fileobj.read(2) == 'so'
 | |
|   assert fileobj.read(3) == 'mec'
 | |
|   assert fileobj.read(7) == 'oolfile'
 | |
|   assert fileobj.read(-1) == '-contents'
 | |
| 
 | |
| def test_entire():
 | |
|   gens = iter([StringIO(s) for s in somegenerator()])
 | |
|   fileobj = FilelikeStreamConcat(gens)
 | |
|   assert fileobj.read(-1) == 'somecoolfile-contents'
 | |
| 
 | |
| def test_nolimit():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = LimitingStream(fileobj)
 | |
|   assert stream.read(-1) == 'this is a cool test'
 | |
|   assert len('this is a cool test') == stream.tell()
 | |
| 
 | |
| def test_simplelimit():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = LimitingStream(fileobj, 4)
 | |
|   assert stream.read(-1) == 'this'
 | |
|   assert 4 == stream.tell()
 | |
| 
 | |
| def test_simplelimit_readdefined():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = LimitingStream(fileobj, 4)
 | |
|   assert stream.read(2) == 'th'
 | |
|   assert 2 == stream.tell()
 | |
| 
 | |
| def test_nolimit_readdefined():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = LimitingStream(fileobj, -1)
 | |
|   assert stream.read(2) == 'th'
 | |
|   assert 2 == stream.tell()
 | |
| 
 | |
| def test_limit_multiread():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = LimitingStream(fileobj, 7)
 | |
|   assert stream.read(4) == 'this'
 | |
|   assert stream.read(3) == ' is'
 | |
|   assert stream.read(2) == ''
 | |
|   assert 7 == stream.tell()
 | |
| 
 | |
| def test_limit_multiread2():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = LimitingStream(fileobj, 7)
 | |
|   assert stream.read(4) == 'this'
 | |
|   assert stream.read(-1) == ' is'
 | |
|   assert 7 == stream.tell()
 | |
| 
 | |
| def test_seek():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = LimitingStream(fileobj)
 | |
|   stream.seek(2)
 | |
| 
 | |
|   assert stream.read(2) == 'is'
 | |
|   assert 4 == stream.tell()
 | |
| 
 | |
| def test_seek_withlimit():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = LimitingStream(fileobj, 3)
 | |
|   stream.seek(2)
 | |
| 
 | |
|   assert stream.read(2) == 'i'
 | |
|   assert 3 == stream.tell()
 | |
| 
 | |
| def test_seek_pastlimit():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = LimitingStream(fileobj, 3)
 | |
|   stream.seek(4)
 | |
| 
 | |
|   assert stream.read(1) == ''
 | |
|   assert 3 == stream.tell()
 | |
| 
 | |
| def test_seek_to_tell():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = LimitingStream(fileobj, 3)
 | |
|   stream.seek(stream.tell())
 | |
| 
 | |
|   assert stream.read(4) == 'thi'
 | |
|   assert 3 == stream.tell()
 | |
| 
 | |
| def test_none_read():
 | |
|   class NoneReader(object):
 | |
|     def read(self, size=None):
 | |
|       return None
 | |
| 
 | |
|   stream = StreamSlice(NoneReader(), 0)
 | |
|   assert stream.read(-1) == None
 | |
|   assert stream.tell() == 0
 | |
| 
 | |
| def test_noslice():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = StreamSlice(fileobj, 0)
 | |
|   assert stream.read(-1) == 'this is a cool test'
 | |
|   assert len('this is a cool test') == stream.tell()
 | |
| 
 | |
| def test_startindex():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = StreamSlice(fileobj, 5)
 | |
|   assert stream.read(-1) == 'is a cool test'
 | |
|   assert len('is a cool test') == stream.tell()
 | |
| 
 | |
| def test_startindex_limitedread():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = StreamSlice(fileobj, 5)
 | |
|   assert stream.read(4) == 'is a'
 | |
|   assert 4 == stream.tell()
 | |
| 
 | |
| def test_slice():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = StreamSlice(fileobj, 5, 9)
 | |
|   assert stream.read(-1) == 'is a'
 | |
|   assert len('is a') == stream.tell()
 | |
| 
 | |
| def test_slice_explictread():
 | |
|   fileobj = StringIO('this is a cool test')
 | |
|   stream = StreamSlice(fileobj, 5, 9)
 | |
|   assert stream.read(2) == 'is'
 | |
|   assert stream.read(5) == ' a'
 | |
|   assert len('is a') == stream.tell()
 |