Implement stream_read_file for the Swift storage engine

Note that Swift doesn't seem to have a file-like interface, so we need to wrap the generator we get back from it.

Fixes #210
This commit is contained in:
Joseph Schorr 2015-07-02 17:52:43 +03:00
parent cb238f8764
commit 4333bb9e14
3 changed files with 127 additions and 1 deletions

View file

@ -3,6 +3,49 @@ import unittest
from itertools import islice
from util.validation import generate_valid_usernames
from util.generatorfile import GeneratorFile
class TestGeneratorFile(unittest.TestCase):
def sample_generator(self):
yield 'this'
yield 'is'
yield 'a'
yield 'test'
def test_basic_generator(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisisatest", f.read())
def test_same_lengths(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("this", f.read(4))
self.assertEquals("is", f.read(2))
self.assertEquals("a", f.read(1))
self.assertEquals("test", f.read(4))
def test_indexed_lengths(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisis", f.read(6))
self.assertEquals("atest", f.read(5))
def test_misindexed_lengths(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisis", f.read(6))
self.assertEquals("ate", f.read(3))
self.assertEquals("st", f.read(2))
self.assertEquals("", f.read(2))
def test_misindexed_lengths_2(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisisat", f.read(8))
self.assertEquals("e", f.read(1))
self.assertEquals("st", f.read(2))
self.assertEquals("", f.read(2))
def test_overly_long(self):
with GeneratorFile(self.sample_generator()) as f:
self.assertEquals("thisisatest", f.read(60))
class TestUsernameGenerator(unittest.TestCase):
def assert_generated_output(self, input_username, expected_output):
@ -48,3 +91,8 @@ class TestUsernameGenerator(unittest.TestCase):
self.assertEquals('a__0', generated_output[1])
self.assertEquals('a__1', generated_output[2])
self.assertEquals('a__2', generated_output[3])
if __name__ == '__main__':
unittest.main()