|
|
#! /usr/bin/env python |
|
|
# coding: utf-8 |
|
|
|
|
|
# $Id: test_TableParser.py 7668 2013-06-04 12:46:30Z milde $ |
|
|
# Author: David Goodger <goodger@python.org> |
|
|
# Copyright: This module has been placed in the public domain. |
|
|
|
|
|
""" |
|
|
Tests for states.py. |
|
|
""" |
|
|
|
|
|
from __init__ import DocutilsTestSupport |
|
|
|
|
|
def suite(): |
|
|
s = DocutilsTestSupport.GridTableParserTestSuite() |
|
|
s.generateTests(totest) |
|
|
return s |
|
|
|
|
|
totest = {} |
|
|
|
|
|
totest['grid_tables'] = [ |
|
|
["""\ |
|
|
+-------------------------------------+ |
|
|
| A table with one cell and one line. | |
|
|
+-------------------------------------+ |
|
|
""", |
|
|
[(0, 0, 2, 38, ['A table with one cell and one line.'])], |
|
|
([37], |
|
|
[], |
|
|
[[(0, 0, 1, ['A table with one cell and one line.'])]])], |
|
|
["""\ |
|
|
+--------------+--------------+ |
|
|
| A table with | two columns. | |
|
|
+--------------+--------------+ |
|
|
""", |
|
|
[(0, 0, 2, 15, ['A table with']), |
|
|
(0, 15, 2, 30, ['two columns.'])], |
|
|
([14, 14], |
|
|
[], |
|
|
[[(0, 0, 1, ['A table with']), |
|
|
(0, 0, 1, ['two columns.'])]])], |
|
|
# Combining chars in grid tables still fail |
|
|
# [u"""\ |
|
|
# +--------------+------------------+ |
|
|
# | A tāble w̅ith | comb̲ining chars. | |
|
|
# +--------------+------------------+ |
|
|
# """, |
|
|
# [(0, 0, 2, 15, [u'A table with']), |
|
|
# (0, 15, 2, 30, [u'combining chars.'])], |
|
|
# ([14, 14], |
|
|
# [], |
|
|
# [[(0, 0, 1, [u'A table with']), |
|
|
# (0, 0, 1, [u'combining chars.'])]])], |
|
|
["""\ |
|
|
+--------------+-------------+ |
|
|
| A table with | two columns | |
|
|
+--------------+-------------+ |
|
|
| and | two rows. | |
|
|
+--------------+-------------+ |
|
|
""", |
|
|
[(0, 0, 2, 15, ['A table with']), |
|
|
(0, 15, 2, 29, ['two columns']), |
|
|
(2, 0, 4, 15, ['and']), |
|
|
(2, 15, 4, 29, ['two rows.'])], |
|
|
([14, 13], |
|
|
[], |
|
|
[[(0, 0, 1, ['A table with']), |
|
|
(0, 0, 1, ['two columns'])], |
|
|
[(0, 0, 3, ['and']), |
|
|
(0, 0, 3, ['two rows.'])]])], |
|
|
["""\ |
|
|
+--------------------------+ |
|
|
| A table with three rows, | |
|
|
+------------+-------------+ |
|
|
| and two | columns. | |
|
|
+------------+-------------+ |
|
|
| First and last rows | |
|
|
| contain column spans. | |
|
|
+--------------------------+ |
|
|
""", |
|
|
[(0, 0, 2, 27, ['A table with three rows,']), |
|
|
(2, 0, 4, 13, ['and two']), |
|
|
(2, 13, 4, 27, ['columns.']), |
|
|
(4, 0, 7, 27, ['First and last rows', 'contain column spans.'])], |
|
|
([12, 13], |
|
|
[], |
|
|
[[(0, 1, 1, ['A table with three rows,']), |
|
|
None], |
|
|
[(0, 0, 3, ['and two']), |
|
|
(0, 0, 3, ['columns.'])], |
|
|
[(0, 1, 5, ['First and last rows', 'contain column spans.']), |
|
|
None]])], |
|
|
["""\ |
|
|
+------------+-------------+---------------+ |
|
|
| A table | two rows in | and row spans | |
|
|
| with three +-------------+ to left and | |
|
|
| columns, | the middle, | right. | |
|
|
+------------+-------------+---------------+ |
|
|
""", |
|
|
[(0, 0, 4, 13, ['A table', 'with three', 'columns,']), |
|
|
(0, 13, 2, 27, ['two rows in']), |
|
|
(0, 27, 4, 43, ['and row spans', 'to left and', 'right.']), |
|
|
(2, 13, 4, 27, ['the middle,'])], |
|
|
([12, 13, 15], |
|
|
[], |
|
|
[[(1, 0, 1, ['A table', 'with three', 'columns,']), |
|
|
(0, 0, 1, ['two rows in']), |
|
|
(1, 0, 1, ['and row spans', 'to left and', 'right.'])], |
|
|
[None, |
|
|
(0, 0, 3, ['the middle,']), |
|
|
None]])], |
|
|
["""\ |
|
|
+------------+-------------+---------------+ |
|
|
| A table | | two rows in | and funny | |
|
|
| with 3 +--+-------------+-+ stuff. | |
|
|
| columns, | the middle, | | | |
|
|
+------------+-------------+---------------+ |
|
|
""", |
|
|
[(0, 0, 4, 13, ['A table |', 'with 3 +--', 'columns,']), |
|
|
(0, 13, 2, 27, ['two rows in']), |
|
|
(0, 27, 4, 43, [' and funny', '-+ stuff.', ' |']), |
|
|
(2, 13, 4, 27, ['the middle,'])], |
|
|
([12, 13, 15], |
|
|
[], |
|
|
[[(1, 0, 1, ['A table |', 'with 3 +--', 'columns,']), |
|
|
(0, 0, 1, ['two rows in']), |
|
|
(1, 0, 1, [' and funny', '-+ stuff.', ' |'])], |
|
|
[None, |
|
|
(0, 0, 3, ['the middle,']), |
|
|
None]])], |
|
|
["""\ |
|
|
+-----------+-------------------------+ |
|
|
| W/NW cell | N/NE cell | |
|
|
| +-------------+-----------+ |
|
|
| | Middle cell | E/SE cell | |
|
|
+-----------+-------------+ | |
|
|
| S/SE cell | | |
|
|
+-------------------------+-----------+ |
|
|
""", |
|
|
[(0, 0, 4, 12, ['W/NW cell', '', '']), |
|
|
(0, 12, 2, 38, ['N/NE cell']), |
|
|
(2, 12, 4, 26, ['Middle cell']), |
|
|
(2, 26, 6, 38, ['E/SE cell', '', '']), |
|
|
(4, 0, 6, 26, ['S/SE cell'])], |
|
|
([11, 13, 11], |
|
|
[], |
|
|
[[(1, 0, 1, ['W/NW cell', '', '']), |
|
|
(0, 1, 1, ['N/NE cell']), |
|
|
None], |
|
|
[None, |
|
|
(0, 0, 3, ['Middle cell']), |
|
|
(1, 0, 3, ['E/SE cell', '', ''])], |
|
|
[(0, 1, 5, ['S/SE cell']), |
|
|
None, |
|
|
None]])], |
|
|
["""\ |
|
|
+--------------+-------------+ |
|
|
| A bad table. | | |
|
|
+--------------+ | |
|
|
| Cells must be rectangles. | |
|
|
+----------------------------+ |
|
|
""", |
|
|
'TableMarkupError: Malformed table; parse incomplete.', |
|
|
'TableMarkupError: Malformed table; parse incomplete.'], |
|
|
["""\ |
|
|
+-------------------------------+ |
|
|
| A table with two header rows, | |
|
|
+------------+------------------+ |
|
|
| the first | with a span. | |
|
|
+============+==================+ |
|
|
| Two body | rows, | |
|
|
+------------+------------------+ |
|
|
| the second with a span. | |
|
|
+-------------------------------+ |
|
|
""", |
|
|
[(0, 0, 2, 32, ['A table with two header rows,']), |
|
|
(2, 0, 4, 13, ['the first']), |
|
|
(2, 13, 4, 32, ['with a span.']), |
|
|
(4, 0, 6, 13, ['Two body']), |
|
|
(4, 13, 6, 32, ['rows,']), |
|
|
(6, 0, 8, 32, ['the second with a span.'])], |
|
|
([12, 18], |
|
|
[[(0, 1, 1, ['A table with two header rows,']), |
|
|
None], |
|
|
[(0, 0, 3, ['the first']), |
|
|
(0, 0, 3, ['with a span.'])]], |
|
|
[[(0, 0, 5, ['Two body']), |
|
|
(0, 0, 5, ['rows,'])], |
|
|
[(0, 1, 7, ['the second with a span.']), |
|
|
None]])], |
|
|
["""\ |
|
|
+-------------------------------+ |
|
|
| A table with two head/body | |
|
|
+=============+=================+ |
|
|
| row | separators. | |
|
|
+=============+=================+ |
|
|
| That's bad. | | |
|
|
+-------------+-----------------+ |
|
|
""", |
|
|
'TableMarkupError: Multiple head/body row separators ' |
|
|
'(table lines 3 and 5); only one allowed.', |
|
|
'TableMarkupError: Multiple head/body row separators ' |
|
|
'(table lines 3 and 5); only one allowed.'], |
|
|
["""\ |
|
|
+-------------------------------------+ |
|
|
| | |
|
|
+-------------------------------------+ |
|
|
""", |
|
|
[(0, 0, 2, 38, [''])], |
|
|
([37], |
|
|
[], |
|
|
[[(0, 0, 1, [''])]])], |
|
|
] |
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
import unittest |
|
|
unittest.main(defaultTest='suite')
|
|
|
|