~bzr/ubuntu/hardy/subunit/bzr-ppa

« back to all changes in this revision

Viewing changes to python/subunit/tests/test_chunked.py

  • Committer: Robert Collins
  • Date: 2009-12-15 10:22:23 UTC
  • mfrom: (64.24.1 upstream)
  • Revision ID: robertc@robertcollins.net-20091215102223-n07u9q3s618b8gfm
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
#  subunit: extensions to python unittest to get test results from subprocesses.
 
3
#  Copyright (C) 2005  Robert Collins <robertc@robertcollins.net>
 
4
#
 
5
#  Licensed under either the Apache License, Version 2.0 or the BSD 3-clause
 
6
#  license at the users choice. A copy of both licenses are available in the
 
7
#  project source as Apache-2.0 and BSD. You may not use this file except in
 
8
#  compliance with one of these two licences.
 
9
#  
 
10
#  Unless required by applicable law or agreed to in writing, software
 
11
#  distributed under these licenses is distributed on an "AS IS" BASIS, WITHOUT
 
12
#  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 
13
#  license you chose for the specific language governing permissions and
 
14
#  limitations under that license.
 
15
#
 
16
 
 
17
from cStringIO import StringIO
 
18
import unittest
 
19
 
 
20
import subunit.chunked
 
21
 
 
22
 
 
23
def test_suite():
 
24
    loader = subunit.tests.TestUtil.TestLoader()
 
25
    result = loader.loadTestsFromName(__name__)
 
26
    return result
 
27
 
 
28
 
 
29
class TestDecode(unittest.TestCase):
 
30
 
 
31
    def setUp(self):
 
32
        unittest.TestCase.setUp(self)
 
33
        self.output = StringIO()
 
34
        self.decoder = subunit.chunked.Decoder(self.output)
 
35
 
 
36
    def test_close_read_length_short_errors(self):
 
37
        self.assertRaises(ValueError, self.decoder.close)
 
38
 
 
39
    def test_close_body_short_errors(self):
 
40
        self.assertEqual(None, self.decoder.write('2\r\na'))
 
41
        self.assertRaises(ValueError, self.decoder.close)
 
42
 
 
43
    def test_close_body_buffered_data_errors(self):
 
44
        self.assertEqual(None, self.decoder.write('2\r'))
 
45
        self.assertRaises(ValueError, self.decoder.close)
 
46
 
 
47
    def test_close_after_finished_stream_safe(self):
 
48
        self.assertEqual(None, self.decoder.write('2\r\nab'))
 
49
        self.assertEqual('', self.decoder.write('0\r\n'))
 
50
        self.decoder.close()
 
51
 
 
52
    def test_decode_nothing(self):
 
53
        self.assertEqual('', self.decoder.write('0\r\n'))
 
54
        self.assertEqual('', self.output.getvalue())
 
55
 
 
56
    def test_decode_serialised_form(self):
 
57
        self.assertEqual(None, self.decoder.write("F\r\n"))
 
58
        self.assertEqual(None, self.decoder.write("serialised\n"))
 
59
        self.assertEqual('', self.decoder.write("form0\r\n"))
 
60
 
 
61
    def test_decode_short(self):
 
62
        self.assertEqual('', self.decoder.write('3\r\nabc0\r\n'))
 
63
        self.assertEqual('abc', self.output.getvalue())
 
64
 
 
65
    def test_decode_combines_short(self):
 
66
        self.assertEqual('', self.decoder.write('6\r\nabcdef0\r\n'))
 
67
        self.assertEqual('abcdef', self.output.getvalue())
 
68
 
 
69
    def test_decode_excess_bytes_from_write(self):
 
70
        self.assertEqual('1234', self.decoder.write('3\r\nabc0\r\n1234'))
 
71
        self.assertEqual('abc', self.output.getvalue())
 
72
 
 
73
    def test_decode_write_after_finished_errors(self):
 
74
        self.assertEqual('1234', self.decoder.write('3\r\nabc0\r\n1234'))
 
75
        self.assertRaises(ValueError, self.decoder.write, '')
 
76
 
 
77
    def test_decode_hex(self):
 
78
        self.assertEqual('', self.decoder.write('A\r\n12345678900\r\n'))
 
79
        self.assertEqual('1234567890', self.output.getvalue())
 
80
 
 
81
    def test_decode_long_ranges(self):
 
82
        self.assertEqual(None, self.decoder.write('10000\r\n'))
 
83
        self.assertEqual(None, self.decoder.write('1' * 65536))
 
84
        self.assertEqual(None, self.decoder.write('10000\r\n'))
 
85
        self.assertEqual(None, self.decoder.write('2' * 65536))
 
86
        self.assertEqual('', self.decoder.write('0\r\n'))
 
87
        self.assertEqual('1' * 65536 + '2' * 65536, self.output.getvalue())
 
88
 
 
89
 
 
90
class TestEncode(unittest.TestCase):
 
91
 
 
92
    def setUp(self):
 
93
        unittest.TestCase.setUp(self)
 
94
        self.output = StringIO()
 
95
        self.encoder = subunit.chunked.Encoder(self.output)
 
96
 
 
97
    def test_encode_nothing(self):
 
98
        self.encoder.close()
 
99
        self.assertEqual('0\r\n', self.output.getvalue())
 
100
 
 
101
    def test_encode_empty(self):
 
102
        self.encoder.write('')
 
103
        self.encoder.close()
 
104
        self.assertEqual('0\r\n', self.output.getvalue())
 
105
 
 
106
    def test_encode_short(self):
 
107
        self.encoder.write('abc')
 
108
        self.encoder.close()
 
109
        self.assertEqual('3\r\nabc0\r\n', self.output.getvalue())
 
110
 
 
111
    def test_encode_combines_short(self):
 
112
        self.encoder.write('abc')
 
113
        self.encoder.write('def')
 
114
        self.encoder.close()
 
115
        self.assertEqual('6\r\nabcdef0\r\n', self.output.getvalue())
 
116
 
 
117
    def test_encode_over_9_is_in_hex(self):
 
118
        self.encoder.write('1234567890')
 
119
        self.encoder.close()
 
120
        self.assertEqual('A\r\n12345678900\r\n', self.output.getvalue())
 
121
 
 
122
    def test_encode_long_ranges_not_combined(self):
 
123
        self.encoder.write('1' * 65536)
 
124
        self.encoder.write('2' * 65536)
 
125
        self.encoder.close()
 
126
        self.assertEqual('10000\r\n' + '1' * 65536 + '10000\r\n' +
 
127
            '2' * 65536 + '0\r\n', self.output.getvalue())