summaryrefslogtreecommitdiff
path: root/distbuild/stringbuffer_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'distbuild/stringbuffer_tests.py')
-rw-r--r--distbuild/stringbuffer_tests.py140
1 files changed, 140 insertions, 0 deletions
diff --git a/distbuild/stringbuffer_tests.py b/distbuild/stringbuffer_tests.py
new file mode 100644
index 00000000..29530560
--- /dev/null
+++ b/distbuild/stringbuffer_tests.py
@@ -0,0 +1,140 @@
+# distbuild/stringbuffer_tests.py -- unit tests
+#
+# Copyright 2012 Codethink Limited
+# All rights reserved.
+
+
+import unittest
+
+import distbuild
+
+
+class StringBufferTests(unittest.TestCase):
+
+ def setUp(self):
+ self.buf = distbuild.StringBuffer()
+
+ def test_is_empty_initially(self):
+ self.assertEqual(self.buf.peek(), '')
+ self.assertEqual(len(self.buf), 0)
+
+ def test_adds_a_string(self):
+ s = 'foo'
+ self.buf.add(s)
+ self.assertEqual(self.buf.peek(), s)
+ self.assertEqual(len(self.buf), len(s))
+
+ def test_adds_a_second_string(self):
+ s = 'foo'
+ t = 'bar'
+ self.buf.add(s)
+ self.buf.add(t)
+ self.assertEqual(self.buf.peek(), s + t)
+ self.assertEqual(len(self.buf), len(s + t))
+
+
+class StringBufferRemoveTests(unittest.TestCase):
+
+ def setUp(self):
+ self.buf = distbuild.StringBuffer()
+ self.first = 'foo'
+ self.second = 'bar'
+ self.all = self.first + self.second
+ self.buf.add(self.first)
+ self.buf.add(self.second)
+
+ def test_removes_part_of_first_string(self):
+ self.assertTrue(len(self.first) > 1)
+ self.buf.remove(1)
+ self.assertEqual(self.buf.peek(), self.all[1:])
+ self.assertEqual(len(self.buf), len(self.all) - 1)
+
+ def test_removes_all_of_first_string(self):
+ self.buf.remove(len(self.first))
+ self.assertEqual(self.buf.peek(), self.second)
+ self.assertEqual(len(self.buf), len(self.second))
+
+ def test_removes_more_than_first_string(self):
+ self.assertTrue(len(self.first) > 1)
+ self.assertTrue(len(self.second) > 1)
+ self.buf.remove(len(self.first) + 1)
+ self.assertEqual(self.buf.peek(), self.second[1:])
+ self.assertEqual(len(self.buf), len(self.second) - 1)
+
+ def test_removes_all_strings(self):
+ self.buf.remove(len(self.all))
+ self.assertEqual(self.buf.peek(), '')
+ self.assertEqual(len(self.buf), 0)
+
+ def test_removes_more_than_all_strings(self):
+ self.buf.remove(len(self.all) + 1)
+ self.assertEqual(self.buf.peek(), '')
+ self.assertEqual(len(self.buf), 0)
+
+
+class StringBufferReadTests(unittest.TestCase):
+
+ def setUp(self):
+ self.buf = distbuild.StringBuffer()
+
+ def test_returns_empty_string_for_empty_buffer(self):
+ self.assertEqual(self.buf.read(100), '')
+ self.assertEqual(self.buf.peek(), '')
+
+ def test_returns_partial_string_for_short_buffer(self):
+ self.buf.add('foo')
+ self.assertEqual(self.buf.read(100), 'foo')
+ self.assertEqual(self.buf.peek(), 'foo')
+
+ def test_returns_catenated_strings(self):
+ self.buf.add('foo')
+ self.buf.add('bar')
+ self.assertEqual(self.buf.read(100), 'foobar')
+ self.assertEqual(self.buf.peek(), 'foobar')
+
+ def test_returns_requested_amount_when_available(self):
+ self.buf.add('foo')
+ self.buf.add('bar')
+ self.assertEqual(self.buf.read(4), 'foob')
+ self.assertEqual(self.buf.peek(), 'foobar')
+
+
+class StringBufferReadlineTests(unittest.TestCase):
+
+ def setUp(self):
+ self.buf = distbuild.StringBuffer()
+
+ def test_returns_None_on_empty_buffer(self):
+ self.assertEqual(self.buf.readline(), None)
+
+ def test_returns_None_on_incomplete_line_in_buffer(self):
+ self.buf.add('foo')
+ self.assertEqual(self.buf.readline(), None)
+
+ def test_extracts_complete_line(self):
+ self.buf.add('foo\n')
+ self.assertEqual(self.buf.readline(), 'foo\n')
+ self.assertEqual(self.buf.peek(), '')
+
+ def test_extracts_only_the_initial_line_and_leaves_rest_of_buffer(self):
+ self.buf.add('foo\nbar\n')
+ self.assertEqual(self.buf.readline(), 'foo\n')
+ self.assertEqual(self.buf.peek(), 'bar\n')
+
+ def test_extracts_only_the_initial_line_and_leaves_partial_line(self):
+ self.buf.add('foo\nbar')
+ self.assertEqual(self.buf.readline(), 'foo\n')
+ self.assertEqual(self.buf.peek(), 'bar')
+
+ def test_extracts_only_the_initial_line_from_multiple_pieces(self):
+ self.buf.add('foo\n')
+ self.buf.add('bar\n')
+ self.assertEqual(self.buf.readline(), 'foo\n')
+ self.assertEqual(self.buf.peek(), 'bar\n')
+
+ def test_extracts_only_the_initial_line_from_multiple_pieces_incomp(self):
+ self.buf.add('foo\n')
+ self.buf.add('bar')
+ self.assertEqual(self.buf.readline(), 'foo\n')
+ self.assertEqual(self.buf.peek(), 'bar')
+