1
2from filelike.wrappers import Head
3
4import unittest
5from StringIO import StringIO
6
7class Test_Head(unittest.TestCase):
8    """Testcases for the Head wrapper class."""
9
10    def setUp(self):
11        self.intext = "Guido van Rossum\n is a space\n alien."
12        self.infile = StringIO(self.intext)
13        self.outfile = StringIO()
14
15    def tearDown(self):
16        pass
17
18    def test_ReadHeadBytes(self):
19        """Test reading bytes from head of a file."""
20        hf = Head(self.infile,"r",bytes=10)
21        txt = hf.read()
22        self.assertEquals(len(txt),10)
23        self.assertEquals(txt,self.intext[:10])
24
25    def test_ReadHeadLongBytes(self):
26        """Test reading entirety of head of file."""
27        hf = Head(self.infile,"r",bytes=1000)
28        txt = hf.read()
29        self.assertEquals(txt,self.intext)
30
31    def test_ReadHeadLines(self):
32        """Test reading lines from head of file."""
33        hf = Head(self.infile,"r",lines=2)
34        txt = hf.read()
35        self.assertEquals(txt.count("\n"),2)
36        self.assertEquals(txt,"\n".join(self.intext.split("\n")[:2])+"\n")
37
38    def test_ReadHeadLinesExact(self):
39        """Test reading exact number of lines from head of file."""
40        hf = Head(self.infile,"r",lines=3)
41        txt = hf.read()
42        self.assertEquals(txt.count("\n"),2)
43        self.assertEquals(txt,self.intext)
44
45    def test_ReadHeadLongLines(self):
46        """Test reading all lines from head of file."""
47        hf = Head(self.infile,"r",lines=200)
48        txt = hf.read()
49        self.assertEquals(txt,self.intext)
50
51    def test_ReadBytesOverLines(self):
52        """Test reading limited by bytes, not lines"""
53        hf = Head(self.infile,"r",bytes=5,lines=2)
54        txt = hf.read()
55        self.assertEquals(len(txt),5)
56        self.assertEquals(txt,self.intext[:5])
57
58    def test_ReadLinesOverBytes(self):
59        """Test reading limited by lines, not bytes"""
60        hf = Head(self.infile,"r",bytes=500,lines=1)
61        txt = hf.read()
62        self.assertEquals(txt.count("\n"),1)
63        self.assertEquals(txt,self.intext.split("\n")[0]+"\n")
64
65    def test_WriteHeadBytes(self):
66        """Test writing bytes to head of a file."""
67        hf = Head(self.outfile,"w",bytes=10)
68        hf.write(self.intext)
69        self.assertEquals(len(self.outfile.getvalue()),10)
70        self.assertEquals(self.outfile.getvalue(),self.intext[:10])
71
72    def test_WriteHeadLongBytes(self):
73        """Test writing entirety of head of file."""
74        hf = Head(self.outfile,"w",bytes=1000)
75        hf.write(self.intext)
76        self.assertEquals(self.outfile.getvalue(),self.intext)
77
78    def test_WriteHeadLines(self):
79        """Test writing lines to head of file."""
80        hf = Head(self.outfile,"w",lines=2)
81        hf.write(self.intext)
82        self.assertEquals(self.outfile.getvalue().count("\n"),2)
83        self.assertEquals(self.outfile.getvalue(),"\n".join(self.intext.split("\n")[:2])+"\n")
84
85    def test_WriteHeadLongLines(self):
86        """Test writing all lines to head of file."""
87        hf = Head(self.outfile,"w",lines=200)
88        hf.write(self.intext)
89        self.assertEquals(self.outfile.getvalue(),self.intext)
90
91    def test_WriteBytesOverLines(self):
92        """Test writing limited by bytes, not lines"""
93        hf = Head(self.outfile,"w",bytes=5,lines=2)
94        hf.write(self.intext)
95        txt = self.outfile.getvalue()
96        self.assertEquals(len(txt),5)
97        self.assertEquals(txt,self.intext[:5])
98
99    def test_writeLinesOverBytes(self):
100        """Test writing limited by lines, not bytes"""
101        hf = Head(self.outfile,"w",bytes=500,lines=1)
102        hf.write(self.intext)
103        txt = self.outfile.getvalue()
104        self.assertEquals(txt.count("\n"),1)
105        self.assertEquals(txt,self.intext.split("\n")[0]+"\n")
106
107
108def testsuite():
109    suite = unittest.TestSuite()
110    from filelike.wrappers import unix
111    suite.addTest(unittest.makeSuite(Test_Head))
112    return suite
113
114