3 new revisions:
Revision: 0a66368859aa
Author: Robot Framework Developers <[email protected]>
Date: Mon Jan 30 01:35:55 2012
Log: hgignore: Added .DS_Store
http://code.google.com/p/robotframework/source/detail?r=0a66368859aa
Revision: 7e719851b96d
Author: Robot Framework Developers <[email protected]>
Date: Mon Jan 30 01:36:32 2012
Log: parsing: added len() to model tables
http://code.google.com/p/robotframework/source/detail?r=7e719851b96d
Revision: 123f04aeb11e
Author: Robot Framework Developers <[email protected]>
Date: Mon Jan 30 01:38:08 2012
Log: writers: clean-up based in cide review
http://code.google.com/p/robotframework/source/detail?r=123f04aeb11e
==============================================================================
Revision: 0a66368859aa
Author: Robot Framework Developers <[email protected]>
Date: Mon Jan 30 01:35:55 2012
Log: hgignore: Added .DS_Store
http://code.google.com/p/robotframework/source/detail?r=0a66368859aa
Modified:
/.hgignore
=======================================
--- /.hgignore Thu Jan 12 04:39:23 2012
+++ /.hgignore Mon Jan 30 01:35:55 2012
@@ -11,3 +11,4 @@
*$py.class
ext-lib
*.iml
+.DS_Store
==============================================================================
Revision: 7e719851b96d
Author: Robot Framework Developers <[email protected]>
Date: Mon Jan 30 01:36:32 2012
Log: parsing: added len() to model tables
http://code.google.com/p/robotframework/source/detail?r=7e719851b96d
Modified:
/src/robot/parsing/model.py
/utest/parsing/test_model.py
=======================================
--- /src/robot/parsing/model.py Wed Jan 25 02:06:20 2012
+++ /src/robot/parsing/model.py Mon Jan 30 01:36:32 2012
@@ -249,6 +249,9 @@
def report_invalid_syntax(self, message, level='ERROR'):
self.parent.report_invalid_syntax(self.name, message, level)
+ def __len__(self):
+ return len(list(self))
+
class _WithSettings(object):
@@ -309,8 +312,8 @@
self.imports.append(Variables(self, name, args, comment=comment))
return self.imports[-1]
- def __nonzero__(self):
- return any(setting.is_set() for setting in self)
+ def __len__(self):
+ return sum(1 for setting in self if setting.is_set())
class TestCaseFileSettingTable(_SettingTable):
@@ -398,9 +401,6 @@
def __iter__(self):
return iter(self.variables)
- def __nonzero__(self):
- return bool(self.variables)
-
class TestCaseTable(_Table):
type = 'test case'
@@ -420,9 +420,6 @@
def __iter__(self):
return iter(self.tests)
- def __nonzero__(self):
- return bool(self.tests)
-
def is_started(self):
return bool(self._header)
@@ -445,9 +442,6 @@
def __iter__(self):
return iter(self.keywords)
- def __nonzero__(self):
- return bool(self.keywords)
-
class Variable(object):
=======================================
--- /utest/parsing/test_model.py Tue Jan 17 00:34:57 2012
+++ /utest/parsing/test_model.py Mon Jan 30 01:36:32 2012
@@ -133,6 +133,14 @@
self.table.set_header(['Settings', 'Value', 'value', 'Value'])
assert_equals(self.table.header, ['Settings'])
+ def test_len(self):
+ assert_equals(len(self.table), 0)
+ self.table.add_library('SomeLib')
+ assert_equals(len(self.table), 1)
+ self.table.doc.value = 'Some doc'
+ self.table.add_metadata('meta name', 'content')
+ assert_equals(len(self.table), 3)
+
class TestVariableTable(unittest.TestCase):
@@ -169,6 +177,13 @@
self.table.set_header(['Variable', 'value', 'Value'])
assert_equals(self.table.header, ['Variable'])
+ def test_len(self):
+ self.table.set_header(['Variable', 'value', 'Value'])
+ assert_equals(len(self.table), 0)
+ self.table.add('${a var}', 'some')
+ self.table.add('@{b var}', 's', 'ome')
+ assert_equals(len(self.table), 2)
+
class TestTestCaseTable(unittest.TestCase):
@@ -212,6 +227,13 @@
self.table.set_header(['test case', 'Action', 'Arg', 'Argument'])
assert_equals(self.table.header, ['test case'])
+ def test_len(self):
+ self.table.set_header(['Test Case'])
+ assert_equals(len(self.table), 0)
+ self.table.add('A test')
+ self.table.add('B test')
+ assert_equals(len(self.table), 2)
+
class TestKeywordTable(unittest.TestCase):
@@ -255,6 +277,13 @@
self.table.set_header(['keywords', 'Action', 'Arg', 'Argument'])
assert_equals(self.table.header, ['keywords'])
+ def test_len(self):
+ self.table.set_header(['Keywords'])
+ assert_equals(len(self.table), 0)
+ self.table.add('A kw')
+ self.table.add('B keyword')
+ assert_equals(len(self.table), 2)
+
class TestStep(unittest.TestCase):
@@ -342,24 +371,24 @@
class TestSettings(unittest.TestCase):
- def test_timeout_patch(self):
+ def test_timeout(self):
timeout = Timeout('Timeout')
- assert_equals(timeout.as_list(),['Timeout'])
+ assert_equals(timeout.as_list(), ['Timeout'])
timeout.message='boo'
- assert_equals(timeout.as_list(),['Timeout', '', 'boo'])
+ assert_equals(timeout.as_list(), ['Timeout', '', 'boo'])
timeout.message=''
timeout.value='1 second'
- assert_equals(timeout.as_list(),['Timeout', '1 second'])
+ assert_equals(timeout.as_list(), ['Timeout', '1 second'])
timeout.message='boo'
- assert_equals(timeout.as_list(),['Timeout', '1 second', 'boo'])
-
- def test_settings_patch(self):
+ assert_equals(timeout.as_list(), ['Timeout', '1 second', 'boo'])
+
+ def test_tags(self):
tags = Tags('Tags')
- assert_equals(tags.as_list(),['Tags'])
+ assert_equals(tags.as_list(), ['Tags'])
tags.value = ['tag1','tag2']
- assert_equals(tags.as_list(),['Tags', 'tag1', 'tag2'])
-
- def test_fixture_patch(self):
+ assert_equals(tags.as_list(), ['Tags', 'tag1', 'tag2'])
+
+ def test_fixtures(self):
fixture = Fixture('Teardown')
assert_equals(fixture.as_list(), ['Teardown'])
fixture.name = 'Keyword'
@@ -369,11 +398,11 @@
fixture.name = ''
assert_equals(fixture.as_list(), ['Teardown', '', 'arg1', 'arg2'])
- def test_template_patch(self):
+ def test_template(self):
template = Template('Template')
- assert_equals(template.as_list(),['Template'])
+ assert_equals(template.as_list(), ['Template'])
template.value = 'value'
- assert_equals(template.as_list(),['Template', 'value'])
+ assert_equals(template.as_list(), ['Template', 'value'])
class TestCopy(unittest.TestCase):
==============================================================================
Revision: 123f04aeb11e
Author: Robot Framework Developers <[email protected]>
Date: Mon Jan 30 01:38:08 2012
Log: writers: clean-up based in cide review
http://code.google.com/p/robotframework/source/detail?r=123f04aeb11e
Added:
/utest/writer/test_rowsplitter.py
Modified:
/src/robot/writer/aligners.py
/src/robot/writer/dataextractor.py
/src/robot/writer/filewriters.py
/src/robot/writer/formatters.py
/src/robot/writer/htmlformatter.py
/utest/writer/test_extractor.py
/utest/writer/test_formatters.py
=======================================
--- /dev/null
+++ /utest/writer/test_rowsplitter.py Mon Jan 30 01:38:08 2012
@@ -0,0 +1,18 @@
+import unittest
+
+from robot.writer.rowsplitter import RowSplitter
+from robot.utils.asserts import assert_equals
+
+
+class TestRowSplitter(unittest.TestCase):
+
+ def test_escaping_empty_cells_at_eol(self):
+ formatter = RowSplitter(cols=3)
+ assert_equals(formatter.split(['Some', 'text', '', 'with empty'],
0),
+ [['Some', 'text', '${EMPTY}'],
+ ['...', 'with empty']])
+
+ def test_splitting_inside_comment(self):
+ formatter = RowSplitter(cols=3)
+ assert_equals(formatter.split(['Kw', 'Arg', '#Comment in', 'many
cells'], 0),
+ [['Kw', 'Arg', '#Comment in'], ['...', '#many cells']])
=======================================
--- /src/robot/writer/aligners.py Fri Jan 20 03:06:10 2012
+++ /src/robot/writer/aligners.py Mon Jan 30 01:38:08 2012
@@ -25,7 +25,7 @@
def align_row(self, row):
for index, col in enumerate(row[:self._last_aligned_column(row)]):
if len(self._widths) <= index:
- continue
+ break
row[index] = row[index].ljust(self._widths[index])
return row
@@ -35,7 +35,7 @@
class FirstColumnAligner(_Aligner):
- def __init__(self, cols, first_column_width):
+ def __init__(self, first_column_width):
_Aligner.__init__(self, [first_column_width])
@@ -48,11 +48,12 @@
def _count_justifications(self, table):
result = [self._first_column_width] + [len(h) for h in
table.header[1:]]
- for element in [list(kw) for kw in list(table)]:
+ for element in table:
for step in element:
for index, col in enumerate(step.as_list()):
index += 1
if len(result) <= index:
- result.append(0)
- result[index] = max(len(col), result[index])
+ result.append(len(col))
+ else:
+ result[index] = max(len(col), result[index])
return result
=======================================
--- /src/robot/writer/dataextractor.py Fri Jan 20 04:29:42 2012
+++ /src/robot/writer/dataextractor.py Mon Jan 30 01:38:08 2012
@@ -14,23 +14,17 @@
class DataExtractor(object):
- """The DataExtractor object. Transforms table of a parsed Robot
Framework
- test data file into list of rows."""
+ """Transforms table of a parsed test data file into a list of rows."""
def __init__(self, want_name_on_first_content_row=False):
self._want_names_on_first_content_row =
want_name_on_first_content_row
def rows_from_table(self, table):
if table.type in ['setting', 'variable']:
- return self.rows_from_simple_table(table)
- return self.rows_from_indented_table(table)
-
- def rows_from_simple_table(self, table):
- """Return list of rows from a setting or variable table"""
- return self._rows_from_item(table)
-
- def rows_from_indented_table(self, table):
- """Return list of rows from a test case or user keyword table"""
+ return self._rows_from_item(table)
+ return self._rows_from_indented_table(table)
+
+ def _rows_from_indented_table(self, table):
items = list(table)
for index, item in enumerate(items):
for row in self._rows_from_test_or_keyword(item):
@@ -39,20 +33,20 @@
yield []
def _rows_from_test_or_keyword(self, test_or_keyword):
- rows = list(self._rows_from_item(test_or_keyword, 1)) or ['']
- first_row, rest = self._first_row(test_or_keyword.name, rows)
- yield first_row
- for r in rest:
+ rows = list(self._rows_from_item(test_or_keyword, 1))
+ for r in self._add_name(test_or_keyword.name, rows):
yield r
- def _first_row(self, name, rows):
- if self._want_names_on_first_content_row:
- return [name] + rows[0][1:], rows[1:]
- return [name], rows
+ def _add_name(self, name, rows):
+ if rows and self._want_names_on_first_content_row:
+ rows[0][0] = name
+ return rows
+ return [[name]] + rows
def _rows_from_item(self, item, indent=0):
- for child in (c for c in item if c.is_set()):
- yield [''] * indent + child.as_list()
+ for child in item:
+ if child.is_set():
+ yield [''] * indent + child.as_list()
if child.is_for_loop():
for row in self._rows_from_item(child, indent+1):
yield row
=======================================
--- /src/robot/writer/filewriters.py Tue Jan 24 20:55:42 2012
+++ /src/robot/writer/filewriters.py Mon Jan 30 01:38:08 2012
@@ -43,7 +43,6 @@
class _DataFileWriter(object):
_formatter = None
- _write_row = NotImplemented
def __init__(self, configuration):
self._output = configuration.output
@@ -57,33 +56,29 @@
def _write_table(self, table):
self._write_header(table)
- self._write_rows(self._formatted_table(table))
+ self._write_rows(self._formatter.format_table(table))
self._write_empty_row()
def _write_header(self, table):
- self._write_row(self._formatter.header_row(table))
-
- def _formatted_table(self, table):
- formatter = {'setting': self._formatter.setting_table,
- 'variable': self._formatter.variable_table,
- 'test case': self._formatter.test_table,
- 'keyword': self._formatter.keyword_table}[table.type]
- return formatter(table)
-
- def _write_empty_row(self):
- self._write_row(self._formatter.empty_row())
+ self._write_row(self._formatter.format_header(table))
def _write_rows(self, rows):
for row in rows:
self._write_row(row)
+ def _write_empty_row(self):
+ self._write_row(self._formatter.empty_row())
+
def _encode(self, row):
return row.encode(self._encoding)
+ def _write_row(self):
+ raise NotImplementedError
+
class SpaceSeparatedTxtWriter(_DataFileWriter):
_separator = ' '*4
- _formatter = TxtFormatter(cols=8)
+ _formatter = TxtFormatter(column_count=8)
def _write_row(self, row):
line = self._separator.join(row) + self._line_separator
@@ -92,7 +87,7 @@
class PipeSeparatedTxtWriter(_DataFileWriter):
_separator = ' | '
- _formatter = PipeFormatter(cols=8)
+ _formatter = PipeFormatter(column_count=8)
def _write_row(self, row):
row = self._separator.join(row)
@@ -102,7 +97,7 @@
class TsvFileWriter(_DataFileWriter):
- _formatter = TsvFormatter(cols=8)
+ _formatter = TsvFormatter(column_count=8)
def __init__(self, configuration):
if not csv:
@@ -117,7 +112,7 @@
class HtmlFileWriter(_DataFileWriter):
- _formatter = HtmlFormatter(cols=5)
+ _formatter = HtmlFormatter(column_count=5)
def __init__(self, configuration):
_DataFileWriter.__init__(self, configuration)
=======================================
--- /src/robot/writer/formatters.py Fri Jan 20 04:29:42 2012
+++ /src/robot/writer/formatters.py Mon Jan 30 01:38:08 2012
@@ -22,30 +22,18 @@
class _DataFileFormatter(object):
_want_names_on_first_content_row = False
- def __init__(self, cols):
- self._splitter = RowSplitter(cols)
- self._cols = cols
+ def __init__(self, column_count):
+ self._splitter = RowSplitter(column_count)
+ self._column_count = column_count
self._extractor =
DataExtractor(self._want_names_on_first_content_row)
def empty_row(self):
return self._format_row([])
- def header_row(self, table):
+ def format_header(self, table):
return self._format_row(self._header_for(table))
- def setting_table(self, settings):
- return self._format_table(settings)
-
- def variable_table(self, variables):
- return self._format_table(variables)
-
- def test_table(self, tests):
- return self._format_table(tests)
-
- def keyword_table(self, keywords):
- return self._format_table(keywords)
-
- def _format_table(self, table):
+ def format_table(self, table):
rows = self._extractor.rows_from_table(table)
if self._should_split_rows(table):
return self._split_rows(rows, table)
@@ -65,11 +53,15 @@
def _is_indented_table(self, table):
return bool(table is not None and table.type in ['test
case', 'keyword'])
+ def _escape_consecutive_whitespace(self, row):
+ return [re.sub('\s\s+(?=[^\s])',
+ lambda match: '\\'.join(match.group(0)),
item.replace('\n', ' ')) for item in row]
+
def _format_row(self, row, table=None):
- return row
+ raise NotImplementedError
def _header_for(self, table):
- return table.header
+ raise NotImplementedError
class TsvFormatter(_DataFileFormatter):
@@ -78,11 +70,11 @@
return ['*%s*' % cell for cell in table.header]
def _format_row(self, row, table=None):
- return self._pad(row)
+ return self._pad(self._escape_consecutive_whitespace(row))
def _pad(self, row):
row = [cell.replace('\n', ' ') for cell in row]
- return row + [''] * (self._cols - len(row))
+ return row + [''] * (self._column_count - len(row))
class TxtFormatter(_DataFileFormatter):
@@ -99,7 +91,7 @@
def _aligner_for(self, table):
if table and table.type in ['setting', 'variable']:
- return FirstColumnAligner(self._cols,
self._setting_and_variable_name_width)
+ return
FirstColumnAligner(self._setting_and_variable_name_width)
if self._should_align_columns(table):
return ColumnAligner(self._test_or_keyword_name_width, table,
self._align_last_column)
@@ -118,14 +110,10 @@
self._escape_empty_cell_from_start(row))
def _escape_empty_cell_from_start(self, row):
- if len(row) >= 2 and row[0] == '' and row[1] == '':
+ if len(row) >= 2 and row[0] == row[1] == '':
row[1] = '\\'
return row
- def _escape_consecutive_whitespace(self, row):
- return [re.sub('\s\s+(?=[^\s])',
- lambda match: '\\'.join(match.group(0)),
item.replace('\n', ' ')) for item in row]
-
class PipeFormatter(TxtFormatter):
_align_last_column = True
=======================================
--- /src/robot/writer/htmlformatter.py Fri Jan 20 04:29:42 2012
+++ /src/robot/writer/htmlformatter.py Mon Jan 30 01:38:08 2012
@@ -23,7 +23,7 @@
_want_names_on_first_content_row = True
def _format_row(self, row, table=None):
- row = self._pad(row, table)
+ row = self._pad(self._escape_consecutive_whitespace(row), table)
if self._is_documentation_row(row):
return self._create_documentation_row(row)
first_cell = self._create_first_cell(row[0], table)
@@ -35,7 +35,7 @@
return row[0] == 'Documentation'
def _create_documentation_row(self, row):
- return [NameCell(row[0]), DocumentationCell(row[1],
span=self._cols-1)]
+ return [NameCell(row[0]), DocumentationCell(row[1],
span=self._column_count-1)]
def _is_indented_documentation_row(self, cells, table):
return self._is_indented_table(table) and cells and \
@@ -45,7 +45,7 @@
start = [first_cell, HtmlCell(cells[0])]
if any(c.startswith('#') for c in cells):
return start + [HtmlCell(c) for c in cells[1:]]
- return start + [DocumentationCell(cells[1], self._cols-2)]
+ return start + [DocumentationCell(cells[1], self._column_count-2)]
def _create_first_cell(self, cell, table):
if self._is_indented_table(table) and cell:
@@ -53,23 +53,23 @@
else 'test')
return NameCell(cell)
- def header_row(self, table):
+ def format_header(self, table):
if not self._should_align_columns(table) or len(table.header) == 1:
- return [HeaderCell(table.header[0], self._cols)]
+ return [HeaderCell(table.header[0], self._column_count)]
headers = self._pad_header(table)
return [HeaderCell(hdr) for hdr in headers]
def _pad_header(self, table):
header = table.header
- return header + [''] * (self._column_count(table) - len(header))
+ return header + [''] * (self._get_column_count(table) -
len(header))
def _pad(self, row, table):
- return row + [''] * (self._column_count(table) - len(row))
-
- def _column_count(self, table):
+ return row + [''] * (self._get_column_count(table) - len(row))
+
+ def _get_column_count(self, table):
if table is None or len(table.header) == 1 \
or not self._is_indented_table(table):
- return self._cols
+ return self._column_count
return max(self._max_column_count(table), len(table.header))
def _max_column_count(self, table):
=======================================
--- /utest/writer/test_extractor.py Fri Jan 20 03:07:02 2012
+++ /utest/writer/test_extractor.py Mon Jan 30 01:38:08 2012
@@ -33,11 +33,11 @@
class DataExtractorTest(unittest.TestCase):
def test_extracting_from_simple_table(self):
-
assert_equals(list(DataExtractor().rows_from_simple_table(var_table)),
+ assert_equals(list(DataExtractor().rows_from_table(var_table)),
var_table_rows)
def test_extracting_from_indented_table(self):
- for idx, row in
enumerate(DataExtractor().rows_from_indented_table(test_table)):
+ for idx, row in
enumerate(DataExtractor()._rows_from_indented_table(test_table)):
assert_equals(row, test_table_rows[idx])
def test_names_on_first_content_row(self):
@@ -45,5 +45,5 @@
t = table.add('Test')
t.add_step(['No op'])
extractor = DataExtractor(want_name_on_first_content_row=True)
- assert_equals(list(extractor.rows_from_indented_table(table)),
+ assert_equals(list(extractor._rows_from_indented_table(table)),
[['Test', 'No op']])
=======================================
--- /utest/writer/test_formatters.py Fri Jan 20 04:29:42 2012
+++ /utest/writer/test_formatters.py Mon Jan 30 01:38:08 2012
@@ -6,20 +6,6 @@
from robot.utils.asserts import assert_equals, assert_true
-class TestRowSplitter(unittest.TestCase):
-
- def test_escaping_empty_cells_at_eol(self):
- formatter = RowSplitter(cols=3)
- assert_equals(formatter.split(['Some', 'text', '', 'with empty'],
0),
- [['Some', 'text', '${EMPTY}'],
- ['...', 'with empty']])
-
- def test_splitting_inside_comment(self):
- formatter = RowSplitter(cols=3)
- assert_equals(formatter.split(['Kw', 'Arg', '#Comment in', 'many
cells'], 0),
- [['Kw', 'Arg', '#Comment in'], ['...', '#many
cells']])
-
-
class TestTxtFormatter(unittest.TestCase):
def setUp(self):
@@ -31,6 +17,13 @@
def test_replacing_newlines(self):
assert_equals(self._formatter._escape(['so\nme']), ['so me'])
+ def test_escaping_consecutive_spaces(self):
+ settings = TestCaseFileSettingTable(None)
+ settings.force_tags.value = ['f 1']
+ assert_equals(list(self._formatter.format_table(settings))[0],
+ ['Force Tags ', 'f \\ 1'])
+
+
class TestPipeFormatter(unittest.TestCase):
@@ -44,14 +37,19 @@
def test_empty_cell(self):
settings = TestCaseFileSettingTable(None)
settings.force_tags.value = ['f1', '', 'f3']
- assert_equals(list(PipeFormatter(4).setting_table(settings))[0],
+ assert_equals(list(PipeFormatter(4).format_table(settings))[0],
['Force Tags ', 'f1', ' ', 'f3'])
class TestTsvFormatter(unittest.TestCase):
+ def setUp(self):
+ self._formatter = TsvFormatter(6)
def test_replacing_newlines(self):
- assert_equals(TsvFormatter(6)._format_row(['so\nme'])[0], 'so me')
+ assert_equals(self._formatter._format_row(['so\nme'])[0], 'so me')
+
+ def test_escaping_consecutive_spaces(self):
+ assert_equals(self._formatter._format_row(['so me'])[0], 'so \
me')
class TestHtmlFormatter(unittest.TestCase):
@@ -63,7 +61,7 @@
table = TestCaseFileSettingTable(None)
table.set_header('Settings')
table.doc.value = 'Some documentation'
- formatted = list(self._formatter.setting_table(table))
+ formatted = list(self._formatter.format_table(table))
assert_equals(self._rows_to_text(formatted),
[['Documentation', 'Some documentation']])
assert_equals(formatted[0][1].attributes,
@@ -84,7 +82,7 @@
test.doc.value = 'Some doc'
assert_equals(self._rows(table)[0],
['<a name="test_Test">Test</a>', '[Documentation]', 'Some
doc'])
-
assert_equals(list(self._formatter.test_table(table))[0][2].attributes,
+
assert_equals(list(self._formatter.format_table(table))[0][2].attributes,
{'colspan': '3', 'class': 'colspan3'})
def test_test_documentation_with_comment(self):
@@ -94,7 +92,7 @@
test.doc._set_comment('a comment')
assert_equals(self._rows(table)[0],
['<a name="test_Test">Test</a>', '[Documentation]', 'Some
doc', '# a comment', ''])
-
assert_equals(list(self._formatter.test_table(table))[0][2].attributes, {})
+
assert_equals(list(self._formatter.format_table(table))[0][2].attributes,
{})
def test_testcase_table_custom_headers(self):
self._check_header_length([], 1)
@@ -106,11 +104,11 @@
table = self._create_test_table(['h', 'e'])
test = table.add('Some test')
test.add_step(['kw', 'arg1', 'arg2', 'arg3'])
- assert_equals(len(self._formatter.header_row(table)), 5)
+ assert_equals(len(self._formatter.format_header(table)), 5)
def _check_header_length(self, headers, expected_length):
table = self._create_test_table(headers)
- assert_equals(len(self._formatter.header_row(table)),
expected_length)
+ assert_equals(len(self._formatter.format_header(table)),
expected_length)
def test_testcase_table_header_colspan(self):
self._assert_header_colspan([], 5)
@@ -118,9 +116,12 @@
def _assert_header_colspan(self, header, expected_colspan):
table = self._create_test_table(header)
- row = self._formatter.header_row(table)
+ row = self._formatter.format_header(table)
assert_equals(row[0].attributes['colspan'], str(expected_colspan))
+ def test_escaping_consecutive_spaces(self):
+ assert_equals(self._formatter._format_row(['so
me'])[0].content, 'so \ me')
+
def test_number_of_columns_is_max_of_header_and_row_widths(self):
table = self._create_test_table(['a', 'b'])
test = table.add('Test')
@@ -132,20 +133,20 @@
self._check_row_lengths(table, 4)
def _check_row_lengths(self, table, expected_length):
- rows = list(self._formatter.test_table(table))
+ rows = list(self._formatter.format_table(table))
assert_true(len(rows) > 0)
for row in rows:
assert_equals(len(row), expected_length)
def _rows(self, table):
- return self._rows_to_text(self._formatter.test_table(table))
+ return self._rows_to_text(self._formatter.format_table(table))
def _rows_to_text(self, rows):
return [[cell.content for cell in row] for row in rows]
- def _create_test_table(self, additional_headers=[]):
+ def _create_test_table(self, additional_headers=()):
table = TestCaseTable(None)
- table.set_header(['Test Cases'] + additional_headers)
+ table.set_header(['Test Cases'] + list(additional_headers))
return table
def test_add_br_to_newlines(self):