subunit: Import new version.
[Samba/fernandojvsilva.git] / lib / subunit / python / subunit / tests / test_chunked.py
bloba24e31e0c2cf10c286afc6eaa16f55d7926bc8c2
2 # subunit: extensions to python unittest to get test results from subprocesses.
3 # Copyright (C) 2005 Robert Collins <robertc@robertcollins.net>
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.
17 from cStringIO import StringIO
18 import unittest
20 import subunit.chunked
23 def test_suite():
24 loader = subunit.tests.TestUtil.TestLoader()
25 result = loader.loadTestsFromName(__name__)
26 return result
29 class TestDecode(unittest.TestCase):
31 def setUp(self):
32 unittest.TestCase.setUp(self)
33 self.output = StringIO()
34 self.decoder = subunit.chunked.Decoder(self.output)
36 def test_close_read_length_short_errors(self):
37 self.assertRaises(ValueError, self.decoder.close)
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)
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)
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()
52 def test_decode_nothing(self):
53 self.assertEqual('', self.decoder.write('0\r\n'))
54 self.assertEqual('', self.output.getvalue())
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"))
61 def test_decode_short(self):
62 self.assertEqual('', self.decoder.write('3\r\nabc0\r\n'))
63 self.assertEqual('abc', self.output.getvalue())
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())
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())
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, '')
77 def test_decode_hex(self):
78 self.assertEqual('', self.decoder.write('A\r\n12345678900\r\n'))
79 self.assertEqual('1234567890', self.output.getvalue())
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())
90 class TestEncode(unittest.TestCase):
92 def setUp(self):
93 unittest.TestCase.setUp(self)
94 self.output = StringIO()
95 self.encoder = subunit.chunked.Encoder(self.output)
97 def test_encode_nothing(self):
98 self.encoder.close()
99 self.assertEqual('0\r\n', self.output.getvalue())
101 def test_encode_empty(self):
102 self.encoder.write('')
103 self.encoder.close()
104 self.assertEqual('0\r\n', self.output.getvalue())
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())
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())
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())
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())