diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/mocks/__init__.py | 0 | ||||
-rw-r--r-- | tests/mocks/vim.py | 4 | ||||
-rw-r--r-- | tests/test_rst_tables.py | 143 |
3 files changed, 142 insertions, 5 deletions
diff --git a/tests/mocks/__init__.py b/tests/mocks/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/mocks/__init__.py diff --git a/tests/mocks/vim.py b/tests/mocks/vim.py new file mode 100644 index 0000000..a8cf591 --- /dev/null +++ b/tests/mocks/vim.py @@ -0,0 +1,4 @@ +from mock import Mock + +eval = Mock() +command = Mock() diff --git a/tests/test_rst_tables.py b/tests/test_rst_tables.py index 55aaffc..e31cab9 100644 --- a/tests/test_rst_tables.py +++ b/tests/test_rst_tables.py @@ -1,14 +1,147 @@ +# Mock out the vim library +import sys +sys.path = ['tests/mocks'] + sys.path +import vim +import mock + +vimvar = {} + + +def fake_eval(x): + global vimvar + return vimvar[x] + +vim.eval = fake_eval +vim.current = mock.Mock() +vimvar['foo'] = 'bar' + import unittest -import rst_tables +from rst_tables import get_table_bounds, create_table, parse_table, \ + draw_table, table_line, get_column_widths, \ + pad_fields class TestRSTTableFormatter(unittest.TestCase): def setUp(self): - pass + self.plain = """\ +This is paragraph text *before* the table. + +Column 1 Column 2 +Foo Put two (or more) spaces as a field separator. +Bar Even very very long lines like these are fine, as long as you do not put in line endings here. +Qux This is the last line. + +This is paragraph text *after* the table, with +a line ending. +""" def tearDown(self): pass - def testSomeThing(self): - input = "foo" - self.assertEquals("foo", input) + def testGetBounds(self): + input = self.plain + vim.buffer = input.split('\n') + vim.current.window.cursor = (4, 0) + self.assertEquals((3, 6), get_table_bounds()) + + def testGetBoundsOnBeginOfFile(self): + input = self.plain + vim.buffer = input.split('\n') + vim.current.window.cursor = (1, 0) + self.assertEquals((1, 1), get_table_bounds()) + + def testGetBoundsOnEndOfFile(self): + input = self.plain + vim.buffer = input.split('\n') + vim.current.window.cursor = (8, 0) + self.assertEquals((8, 9), get_table_bounds()) + + def testParseSimpleTable(self): + self.assertEquals([['x y z']], parse_table(['x y z'])) + self.assertEquals([['x', 'y z']], parse_table(['x y z'])) + self.assertEquals([['x', 'y', 'z']], parse_table(['x y z'])) + + def testParseTable(self): + input = self.plain + vim.buffer = input.split('\n') + expected = [ + ['Column 1', 'Column 2'], + ['Foo', 'Put two (or more) spaces as a field separator.'], + ['Bar', 'Even very very long lines like these are fine, as long as you do not put in line endings here.'], + ['Qux', 'This is the last line.'], + ] + self.assertEquals(expected, parse_table(vim.buffer[2:6])) + + def testParseTableUnifiesColumns(self): + input = ['x y', 'a b c', 'only one'] + expected = [['x', 'y', ''], ['a', 'b', 'c'], ['only one', '', '']] + self.assertEquals(expected, parse_table(input)) + + def testTableLine(self): + self.assertEquals('', table_line([], True)) + self.assertEquals('++', table_line([0], True)) + self.assertEquals('+++', table_line([0,0], True)) + self.assertEquals('++-+', table_line([0,1])) + self.assertEquals('+===+', table_line([3], True)) + self.assertEquals('+===+====+', table_line([3,4], True)) + self.assertEquals('+------------------+---+--------------------+', + table_line([18,3,20])) + + def testGetColumnWidths(self): + self.assertEquals([], get_column_widths([[]])) + self.assertEquals([0], get_column_widths([['']])) + self.assertEquals([1,2,3], get_column_widths([['x','yy','zzz']])) + self.assertEquals([3,3,3], + get_column_widths( + [ + ['x','y','zzz'], + ['xxx','yy','z'], + ['xx','yyy','zz'], + ])) + + def testPadFields(self): + table = [['Name', 'Type', 'Description'], + ['Lollypop', 'Candy', 'Yummy'], + ['Crisps', 'Snacks', 'Even more yummy, I tell you!']] + expected_padding = [ + [' Name ', ' Type ', ' Description '], + [' Lollypop ', ' Candy ', ' Yummy '], + [' Crisps ', ' Snacks ', ' Even more yummy, I tell you! ']] + self.assertEquals(expected_padding, pad_fields(table)) + + + def testDrawTable(self): + self.assertEquals([], draw_table([])) + self.assertEquals(['+==+', '| |', '+==+'], draw_table([['']])) + self.assertEquals(['+=====+', '| Foo |', '+=====+'], + draw_table([['Foo']])) + self.assertEquals( + ['+=====+====+', + '| Foo | Mu |', + '+=====+====+', + '| x | y |', + '+-----+----+'], + draw_table([['Foo', 'Mu'], ['x', 'y']])) + + def testCreateTable(self): + input = self.plain + expect = """\ +This is paragraph text *before* the table. + ++==========+================================================================================================+ +| Column 1 | Column 2 | ++==========+================================================================================================+ +| Foo | Put two (or more) spaces as a field separator. | ++----------+------------------------------------------------------------------------------------------------+ +| Bar | Even very very long lines like these are fine, as long as you do not put in line endings here. | ++----------+------------------------------------------------------------------------------------------------+ +| Qux | This is the last line. | ++----------+------------------------------------------------------------------------------------------------+ + +This is paragraph text *after* the table, with +a line ending. +""".split('\n') + vim.buffer = input.split('\n') + vim.current.window.cursor = (4, 10) + create_table() + self.assertEquals(expect, vim.buffer) |