summaryrefslogtreecommitdiff
path: root/test_tablib.py
diff options
context:
space:
mode:
Diffstat (limited to 'test_tablib.py')
-rwxr-xr-xtest_tablib.py164
1 files changed, 151 insertions, 13 deletions
diff --git a/test_tablib.py b/test_tablib.py
index a1f581c..3830dda 100755
--- a/test_tablib.py
+++ b/test_tablib.py
@@ -319,6 +319,67 @@ class TablibTestCase(unittest.TestCase):
self.assertEqual(html, d.html)
+ def test_latex_export(self):
+ """LaTeX export"""
+
+ expected = """\
+% Note: add \\usepackage{booktabs} to your preamble
+%
+\\begin{table}[!htbp]
+ \\centering
+ \\caption{Founders}
+ \\begin{tabular}{lrr}
+ \\toprule
+ first\\_name & last\\_name & gpa \\\\
+ \\cmidrule(r){1-1} \\cmidrule(lr){2-2} \\cmidrule(l){3-3}
+ John & Adams & 90 \\\\
+ George & Washington & 67 \\\\
+ Thomas & Jefferson & 50 \\\\
+ \\bottomrule
+ \\end{tabular}
+\\end{table}
+"""
+ output = self.founders.latex
+ self.assertEqual(output, expected)
+
+
+ def test_latex_export_empty_dataset(self):
+ self.assertTrue(tablib.Dataset().latex is not None)
+
+
+ def test_latex_export_no_headers(self):
+ d = tablib.Dataset()
+ d.append(('one', 'two', 'three'))
+ self.assertTrue('one' in d.latex)
+
+
+ def test_latex_export_caption(self):
+ d = tablib.Dataset()
+ d.append(('one', 'two', 'three'))
+ self.assertFalse('caption' in d.latex)
+
+ d.title = 'Title'
+ self.assertTrue('\\caption{Title}' in d.latex)
+
+
+ def test_latex_export_none_values(self):
+ headers = ['foo', None, 'bar']
+ d = tablib.Dataset(['foo', None, 'bar'], headers=headers)
+ output = d.latex
+ self.assertTrue('foo' in output)
+ self.assertFalse('None' in output)
+
+
+ def test_latex_escaping(self):
+ d = tablib.Dataset(['~', '^'])
+ output = d.latex
+
+ self.assertFalse('~' in output)
+ self.assertTrue('textasciitilde' in output)
+ self.assertFalse('^' in output)
+ self.assertTrue('textasciicircum' in output)
+
+
def test_unicode_append(self):
"""Passes in a single unicode character and exports."""
@@ -338,6 +399,7 @@ class TablibTestCase(unittest.TestCase):
data.xlsx
data.ods
data.html
+ data.latex
def test_book_export_no_exceptions(self):
@@ -419,6 +481,17 @@ class TablibTestCase(unittest.TestCase):
self.assertEqual(_csv, data.csv)
+ def test_csv_import_set_semicolons(self):
+ """Test for proper output with semicolon separated CSV."""
+ data.append(self.john)
+ data.append(self.george)
+ data.headers = self.headers
+
+ _csv = data.get_csv(delimiter=';')
+
+ data.set_csv(_csv, delimiter=';')
+
+ self.assertEqual(_csv, data.get_csv(delimiter=';'))
def test_csv_import_set_with_spaces(self):
"""Generate and import CSV set serialization when row values have
@@ -433,6 +506,19 @@ class TablibTestCase(unittest.TestCase):
self.assertEqual(_csv, data.csv)
+ def test_csv_import_set_semicolon_with_spaces(self):
+ """Generate and import semicolon separated CSV set serialization when row values have
+ spaces."""
+ data.append(('Bill Gates', 'Microsoft'))
+ data.append(('Steve Jobs', 'Apple'))
+ data.headers = ('Name', 'Company')
+
+ _csv = data.get_csv(delimiter=';')
+
+ data.set_csv(_csv, delimiter=';')
+
+ self.assertEqual(_csv, data.get_csv(delimiter=';'))
+
def test_csv_import_set_with_newlines(self):
"""Generate and import CSV set serialization when row values have
@@ -444,7 +530,6 @@ class TablibTestCase(unittest.TestCase):
data.headers = ('title', 'body')
_csv = data.csv
-
data.csv = _csv
self.assertEqual(_csv, data.csv)
@@ -709,6 +794,25 @@ class TablibTestCase(unittest.TestCase):
self.assertEqual(third_row, expected_third)
+ def test_remove_duplicates(self):
+ """Unique Rows."""
+
+ self.founders.append(self.john)
+ self.founders.append(self.george)
+ self.founders.append(self.tom)
+ self.assertEqual(self.founders[0], self.founders[3])
+ self.assertEqual(self.founders[1], self.founders[4])
+ self.assertEqual(self.founders[2], self.founders[5])
+ self.assertEqual(self.founders.height, 6)
+
+ self.founders.remove_duplicates()
+
+ self.assertEqual(self.founders[0], self.john)
+ self.assertEqual(self.founders[1], self.george)
+ self.assertEqual(self.founders[2], self.tom)
+ self.assertEqual(self.founders.height, 3)
+
+
def test_wipe(self):
"""Purge a dataset."""
@@ -726,6 +830,26 @@ class TablibTestCase(unittest.TestCase):
self.assertTrue(data[0] == new_row)
+ def test_subset(self):
+ """Create a subset of a dataset"""
+
+ rows = (0, 2)
+ columns = ('first_name','gpa')
+
+ data.headers = self.headers
+
+ data.append(self.john)
+ data.append(self.george)
+ data.append(self.tom)
+
+ #Verify data is truncated
+ subset = data.subset(rows=rows, cols=columns)
+ self.assertEqual(type(subset), tablib.Dataset)
+ self.assertEqual(subset.headers, list(columns))
+ self.assertEqual(subset._data[0].list, ['John', 90])
+ self.assertEqual(subset._data[1].list, ['Thomas', 50])
+
+
def test_formatters(self):
"""Confirm formatters are being triggered."""
@@ -795,18 +919,7 @@ class TablibTestCase(unittest.TestCase):
# add another entry to test right field width for
# integer
self.founders.append(('Old', 'Man', 100500))
-
- self.assertEqual(
- """
-first_name|last_name |gpa
-----------|----------|------
-John |Adams |90
-George |Washington|67
-Thomas |Jefferson |50
-Old |Man |100500
-""".strip(),
- unicode(self.founders)
- )
+ self.assertEqual('first_name|last_name |gpa ', unicode(self.founders).split('\n')[0])
def test_databook_add_sheet_accepts_only_dataset_instances(self):
@@ -834,5 +947,30 @@ Old |Man |100500
except tablib.InvalidDatasetType:
self.fail("Subclass of tablib.Dataset should be accepted by Databook.add_sheet")
+
+ def test_csv_formatter_support_kwargs(self):
+ """Test CSV import and export with formatter configuration."""
+ data.append(self.john)
+ data.append(self.george)
+ data.headers = self.headers
+
+ expected = 'first_name;last_name;gpa\nJohn;Adams;90\nGeorge;Washington;67\n'
+
+ kwargs = dict(delimiter=';', lineterminator='\n')
+ _csv = data.export('csv', **kwargs)
+ self.assertEqual(expected, _csv)
+
+ # the import works but consider default delimiter=','
+ d1 = tablib.import_set(_csv, format="csv")
+ self.assertEqual(1, len(d1.headers))
+
+ d2 = tablib.import_set(_csv, format="csv", **kwargs)
+ self.assertEqual(3, len(d2.headers))
+
+ def test_databook_formatter_support_kwargs(self):
+ """Test XLSX export with formatter configuration."""
+ self.founders.export('xlsx', freeze_panes=False)
+
+
if __name__ == '__main__':
unittest.main()