From 9399bf2fe7cdb32b593dfa0012b6fc16f877a9ec Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Fri, 13 May 2011 00:32:02 -0400 Subject: [PATCH] no vendored tests --- tablib/packages/openpyxl/tests/__init__.py | 24 - tablib/packages/openpyxl/tests/helper.py | 94 ---- tablib/packages/openpyxl/tests/test_cell.py | 200 ------- tablib/packages/openpyxl/tests/test_chart.py | 131 ----- tablib/packages/openpyxl/tests/test_dump.py | 109 ---- tablib/packages/openpyxl/tests/test_iter.py | 112 ---- tablib/packages/openpyxl/tests/test_meta.py | 50 -- .../openpyxl/tests/test_named_range.py | 102 ---- .../openpyxl/tests/test_number_format.py | 142 ----- .../openpyxl/tests/test_password_hash.py | 41 -- tablib/packages/openpyxl/tests/test_props.py | 124 ----- tablib/packages/openpyxl/tests/test_read.py | 134 ----- .../packages/openpyxl/tests/test_strings.py | 68 --- tablib/packages/openpyxl/tests/test_style.py | 181 ------ tablib/packages/openpyxl/tests/test_theme.py | 37 -- .../packages/openpyxl/tests/test_workbook.py | 148 ----- .../packages/openpyxl/tests/test_worksheet.py | 258 --------- tablib/packages/openpyxl/tests/test_write.py | 203 ------- tablib/packages/openpyxl3/tests/__init__.py | 24 - tablib/packages/openpyxl3/tests/helper.py | 94 ---- tablib/packages/openpyxl3/tests/test_cell.py | 200 ------- tablib/packages/openpyxl3/tests/test_chart.py | 131 ----- .../test_data/genuine/empty-no-string.xlsx | Bin 7842 -> 0 bytes .../test_data/genuine/empty-with-styles.xlsx | Bin 7511 -> 0 bytes .../tests/test_data/genuine/empty.xlsx | Bin 11005 -> 0 bytes .../tests/test_data/genuine/merge_range.xlsx | Bin 8742 -> 0 bytes .../test_data/reader/app-multi-titles.xml | 43 -- .../reader/empty-workbook-styles.xml | 53 -- .../tests/test_data/reader/merged-ranges.xml | 2 - .../tests/test_data/reader/null_archive.xlsx | Bin 126 -> 0 bytes .../tests/test_data/reader/null_file.xlsx | 0 .../test_data/reader/shared-strings-rich.xml | 33 -- .../reader/sharedStrings-emptystring.xml | 3 - .../tests/test_data/reader/sharedStrings.xml | 2 - .../tests/test_data/reader/sheet2.xml | 2 - .../tests/test_data/reader/simple-styles.xml | 46 -- .../tests/test_data/reader/workbook.xml | 2 - .../tests/test_data/writer/expected/.rels | 2 - .../writer/expected/[Content_Types].xml | 31 -- .../tests/test_data/writer/expected/app.xml | 2 - .../tests/test_data/writer/expected/core.xml | 2 - .../tests/test_data/writer/expected/font.xml | 10 - .../writer/expected/sharedStrings.xml | 2 - .../test_data/writer/expected/sheet1.xml | 23 - .../writer/expected/sheet1_auto_filter.xml | 1 - .../writer/expected/sheet1_formula.xml | 33 -- .../expected/sheet1_freeze_panes_both.xml | 26 - .../expected/sheet1_freeze_panes_horiz.xml | 24 - .../expected/sheet1_freeze_panes_vert.xml | 24 - .../writer/expected/sheet1_height.xml | 23 - .../writer/expected/sheet1_hyperlink.xml | 27 - .../writer/expected/sheet1_hyperlink.xml.rels | 6 - .../writer/expected/sheet1_style.xml | 1 - .../writer/expected/simple-styles.xml | 46 -- .../test_data/writer/expected/styles.xml | 2 - .../test_data/writer/expected/theme1.xml | 2 - .../test_data/writer/expected/workbook.xml | 2 - .../writer/expected/workbook.xml.rels | 2 - tablib/packages/openpyxl3/tests/test_dump.py | 109 ---- tablib/packages/openpyxl3/tests/test_iter.py | 112 ---- tablib/packages/openpyxl3/tests/test_meta.py | 50 -- .../openpyxl3/tests/test_named_range.py | 102 ---- .../openpyxl3/tests/test_number_format.py | 142 ----- .../openpyxl3/tests/test_password_hash.py | 41 -- tablib/packages/openpyxl3/tests/test_props.py | 124 ----- tablib/packages/openpyxl3/tests/test_read.py | 134 ----- .../packages/openpyxl3/tests/test_strings.py | 68 --- tablib/packages/openpyxl3/tests/test_style.py | 181 ------ tablib/packages/openpyxl3/tests/test_theme.py | 37 -- .../packages/openpyxl3/tests/test_workbook.py | 148 ----- .../openpyxl3/tests/test_worksheet.py | 258 --------- tablib/packages/openpyxl3/tests/test_write.py | 203 ------- test.xlsx | Bin 0 -> 5377 bytes test_tablib.py.orig | 522 ++++++++++++++++++ toy.py | 9 + 75 files changed, 531 insertions(+), 4793 deletions(-) delete mode 100644 tablib/packages/openpyxl/tests/__init__.py delete mode 100644 tablib/packages/openpyxl/tests/helper.py delete mode 100644 tablib/packages/openpyxl/tests/test_cell.py delete mode 100644 tablib/packages/openpyxl/tests/test_chart.py delete mode 100644 tablib/packages/openpyxl/tests/test_dump.py delete mode 100644 tablib/packages/openpyxl/tests/test_iter.py delete mode 100644 tablib/packages/openpyxl/tests/test_meta.py delete mode 100644 tablib/packages/openpyxl/tests/test_named_range.py delete mode 100644 tablib/packages/openpyxl/tests/test_number_format.py delete mode 100644 tablib/packages/openpyxl/tests/test_password_hash.py delete mode 100644 tablib/packages/openpyxl/tests/test_props.py delete mode 100644 tablib/packages/openpyxl/tests/test_read.py delete mode 100644 tablib/packages/openpyxl/tests/test_strings.py delete mode 100644 tablib/packages/openpyxl/tests/test_style.py delete mode 100644 tablib/packages/openpyxl/tests/test_theme.py delete mode 100644 tablib/packages/openpyxl/tests/test_workbook.py delete mode 100644 tablib/packages/openpyxl/tests/test_worksheet.py delete mode 100644 tablib/packages/openpyxl/tests/test_write.py delete mode 100644 tablib/packages/openpyxl3/tests/__init__.py delete mode 100644 tablib/packages/openpyxl3/tests/helper.py delete mode 100644 tablib/packages/openpyxl3/tests/test_cell.py delete mode 100644 tablib/packages/openpyxl3/tests/test_chart.py delete mode 100644 tablib/packages/openpyxl3/tests/test_data/genuine/empty-no-string.xlsx delete mode 100644 tablib/packages/openpyxl3/tests/test_data/genuine/empty-with-styles.xlsx delete mode 100644 tablib/packages/openpyxl3/tests/test_data/genuine/empty.xlsx delete mode 100644 tablib/packages/openpyxl3/tests/test_data/genuine/merge_range.xlsx delete mode 100644 tablib/packages/openpyxl3/tests/test_data/reader/app-multi-titles.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/reader/empty-workbook-styles.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/reader/merged-ranges.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/reader/null_archive.xlsx delete mode 100644 tablib/packages/openpyxl3/tests/test_data/reader/null_file.xlsx delete mode 100644 tablib/packages/openpyxl3/tests/test_data/reader/shared-strings-rich.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/reader/sharedStrings-emptystring.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/reader/sharedStrings.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/reader/sheet2.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/reader/simple-styles.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/reader/workbook.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/.rels delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/[Content_Types].xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/app.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/core.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/font.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/sharedStrings.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_auto_filter.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_formula.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_freeze_panes_both.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_freeze_panes_horiz.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_freeze_panes_vert.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_height.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_hyperlink.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_hyperlink.xml.rels delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_style.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/simple-styles.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/styles.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/theme1.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/workbook.xml delete mode 100644 tablib/packages/openpyxl3/tests/test_data/writer/expected/workbook.xml.rels delete mode 100644 tablib/packages/openpyxl3/tests/test_dump.py delete mode 100644 tablib/packages/openpyxl3/tests/test_iter.py delete mode 100644 tablib/packages/openpyxl3/tests/test_meta.py delete mode 100644 tablib/packages/openpyxl3/tests/test_named_range.py delete mode 100644 tablib/packages/openpyxl3/tests/test_number_format.py delete mode 100644 tablib/packages/openpyxl3/tests/test_password_hash.py delete mode 100644 tablib/packages/openpyxl3/tests/test_props.py delete mode 100644 tablib/packages/openpyxl3/tests/test_read.py delete mode 100644 tablib/packages/openpyxl3/tests/test_strings.py delete mode 100644 tablib/packages/openpyxl3/tests/test_style.py delete mode 100644 tablib/packages/openpyxl3/tests/test_theme.py delete mode 100644 tablib/packages/openpyxl3/tests/test_workbook.py delete mode 100644 tablib/packages/openpyxl3/tests/test_worksheet.py delete mode 100644 tablib/packages/openpyxl3/tests/test_write.py create mode 100644 test.xlsx create mode 100755 test_tablib.py.orig create mode 100644 toy.py diff --git a/tablib/packages/openpyxl/tests/__init__.py b/tablib/packages/openpyxl/tests/__init__.py deleted file mode 100644 index de89032..0000000 --- a/tablib/packages/openpyxl/tests/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -# file openpyxl/tests/__init__.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni diff --git a/tablib/packages/openpyxl/tests/helper.py b/tablib/packages/openpyxl/tests/helper.py deleted file mode 100644 index ae9c8b4..0000000 --- a/tablib/packages/openpyxl/tests/helper.py +++ /dev/null @@ -1,94 +0,0 @@ -# file openpyxl/tests/helper.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from __future__ import with_statement -import os -import os.path -import shutil -import difflib -from StringIO import StringIO -from pprint import pprint -from tempfile import gettempdir - -# package imports -from openpyxl.shared.xmltools import fromstring, ElementTree -from openpyxl.shared.xmltools import pretty_indent - -# constants -DATADIR = os.path.abspath(os.path.join(os.path.dirname(__file__), 'test_data')) -TMPDIR = os.path.join(gettempdir(), 'openpyxl_test_temp') - - -def make_tmpdir(): - try: - os.makedirs(TMPDIR) - except OSError: - pass - - -def clean_tmpdir(): - if os.path.isdir(TMPDIR): - shutil.rmtree(TMPDIR, ignore_errors = True) - - -def assert_equals_file_content(reference_file, fixture, filetype = 'xml'): - if os.path.isfile(fixture): - with open(fixture) as fixture_file: - fixture_content = fixture_file.read() - else: - fixture_content = fixture - - with open(reference_file) as expected_file: - expected_content = expected_file.read() - - if filetype == 'xml': - fixture_content = fromstring(fixture_content) - pretty_indent(fixture_content) - temp = StringIO() - ElementTree(fixture_content).write(temp) - fixture_content = temp.getvalue() - - expected_content = fromstring(expected_content) - pretty_indent(expected_content) - temp = StringIO() - ElementTree(expected_content).write(temp) - expected_content = temp.getvalue() - - fixture_lines = fixture_content.split('\n') - expected_lines = expected_content.split('\n') - differences = list(difflib.unified_diff(expected_lines, fixture_lines)) - if differences: - temp = StringIO() - pprint(differences, stream = temp) - assert False, 'Differences found : %s' % temp.getvalue() - -def get_xml(xml_node): - - io = StringIO() - ElementTree(xml_node).write(io, encoding = 'UTF-8') - ret = io.getvalue() - io.close() - return ret.replace('\n', '') diff --git a/tablib/packages/openpyxl/tests/test_cell.py b/tablib/packages/openpyxl/tests/test_cell.py deleted file mode 100644 index edc35c0..0000000 --- a/tablib/packages/openpyxl/tests/test_cell.py +++ /dev/null @@ -1,200 +0,0 @@ -# file openpyxl/tests/test_cell.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from datetime import time, datetime - -# 3rd party imports -from nose.tools import eq_, raises, assert_raises - -# package imports -from openpyxl.worksheet import Worksheet -from openpyxl.workbook import Workbook -from openpyxl.shared.exc import ColumnStringIndexException, \ - CellCoordinatesException, DataTypeException -from openpyxl.cell import column_index_from_string, \ - coordinate_from_string, get_column_letter, Cell, absolute_coordinate - - -def test_coordinates(): - column, row = coordinate_from_string('ZF46') - eq_("ZF", column) - eq_(46, row) - - -@raises(CellCoordinatesException) -def test_invalid_coordinate(): - coordinate_from_string('AAA') - - -def test_absolute(): - eq_('$ZF$51', absolute_coordinate('ZF51')) - -def test_absolute_multiple(): - - eq_('$ZF$51:$ZF$53', absolute_coordinate('ZF51:ZF$53')) - - -def test_column_index(): - eq_(10, column_index_from_string('J')) - eq_(270, column_index_from_string('jJ')) - eq_(7030, column_index_from_string('jjj')) - - -def test_bad_column_index(): - - @raises(ColumnStringIndexException) - def _check(bad_string): - column_index_from_string(bad_string) - - bad_strings = ('JJJJ', '', '$', '1',) - for bad_string in bad_strings: - yield _check, bad_string - - -def test_column_letter_boundries(): - assert_raises(ColumnStringIndexException, get_column_letter, 0) - assert_raises(ColumnStringIndexException, get_column_letter, 18279) - - -def test_column_letter(): - eq_('ZZZ', get_column_letter(18278)) - eq_('JJJ', get_column_letter(7030)) - eq_('AB', get_column_letter(28)) - eq_('AA', get_column_letter(27)) - eq_('Z', get_column_letter(26)) - - -def test_initial_value(): - cell = Cell(None, 'A', 1, value = '17.5') - eq_(cell.TYPE_NUMERIC, cell.data_type) - - -class TestCellValueTypes(): - - @classmethod - def setup_class(cls): - cls.cell = Cell(None, 'A', 1) - - def test_1st(self): - eq_(self.cell.TYPE_NULL, self.cell.data_type) - - def test_null(self): - self.cell.value = None - eq_(self.cell.TYPE_NULL, self.cell.data_type) - - def test_numeric(self): - - def check_numeric(value): - self.cell.value = value - eq_(self.cell.TYPE_NUMERIC, self.cell.data_type) - - values = (42, '4.2', '-42.000', '0', 0, 0.0001, '0.9999', '99E-02') - for value in values: - yield check_numeric, value - - def test_string(self): - self.cell.value = 'hello' - eq_(self.cell.TYPE_STRING, self.cell.data_type) - - def test_formula(self): - self.cell.value = '=42' - eq_(self.cell.TYPE_FORMULA, self.cell.data_type) - - def test_boolean(self): - self.cell.value = True - eq_(self.cell.TYPE_BOOL, self.cell.data_type) - self.cell.value = False - eq_(self.cell.TYPE_BOOL, self.cell.data_type) - - def test_error_codes(self): - - def check_error(): - eq_(self.cell.TYPE_ERROR, self.cell.data_type) - - for error_string in self.cell.ERROR_CODES.keys(): - self.cell.value = error_string - yield check_error - - -def test_data_type_check(): - cell = Cell(None, 'A', 1) - cell.bind_value(None) - eq_(Cell.TYPE_NULL, cell._data_type) - - cell.bind_value('.0e000') - eq_(Cell.TYPE_NUMERIC, cell._data_type) - - cell.bind_value('-0.e-0') - eq_(Cell.TYPE_NUMERIC, cell._data_type) - - cell.bind_value('1E') - eq_(Cell.TYPE_STRING, cell._data_type) - -@raises(DataTypeException) -def test_set_bad_type(): - cell = Cell(None, 'A', 1) - cell.set_value_explicit(1, 'q') - - -def test_time(): - - def check_time(raw_value, coerced_value): - cell.value = raw_value - eq_(cell.value, coerced_value) - eq_(cell.TYPE_NUMERIC, cell.data_type) - - wb = Workbook() - ws = Worksheet(wb) - cell = Cell(ws, 'A', 1) - values = (('03:40:16', time(3, 40, 16)), ('03:40', time(3, 40)),) - for raw_value, coerced_value in values: - yield check_time, raw_value, coerced_value - - -def test_date_format_on_non_date(): - wb = Workbook() - ws = Worksheet(wb) - cell = Cell(ws, 'A', 1) - cell.value = datetime.now() - cell.value = 'testme' - eq_('testme', cell.value) - - -def test_repr(): - wb = Workbook() - ws = Worksheet(wb) - cell = Cell(ws, 'A', 1) - eq_(repr(cell), '', 'Got bad repr: %s' % repr(cell)) - -def test_is_date(): - wb = Workbook() - ws = Worksheet(wb) - cell = Cell(ws, 'A', 1) - cell.value = datetime.now() - eq_(cell.is_date(), True) - cell.value = 'testme' - eq_('testme', cell.value) - eq_(cell.is_date(), False) diff --git a/tablib/packages/openpyxl/tests/test_chart.py b/tablib/packages/openpyxl/tests/test_chart.py deleted file mode 100644 index 2605a2b..0000000 --- a/tablib/packages/openpyxl/tests/test_chart.py +++ /dev/null @@ -1,131 +0,0 @@ -# file openpyxl/tests/test_chart.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -from nose.tools import eq_ - -from openpyxl.tests.helper import get_xml -from openpyxl.shared.xmltools import Element -from openpyxl.writer.charts import ChartWriter -from openpyxl.workbook import Workbook -from openpyxl.chart import BarChart, ScatterChart, Serie, Reference -from openpyxl.style import Color - -class TestChartWriter(object): - - def setUp(self): - - wb = Workbook() - ws = wb.get_active_sheet() - ws.title = u'data' - for i in range(10): - ws.cell(row = i, column = 0).value = i - self.chart = BarChart() - self.chart.title = 'TITLE' - self.chart.add_serie(Serie(Reference(ws, (0, 0), (10, 0)))) - self.chart._series[-1].color = Color.GREEN - self.cw = ChartWriter(self.chart) - self.root = Element('test') - - def test_write_title(self): - self.cw._write_title(self.root) - eq_(get_xml(self.root), 'TITLE') - - def test_write_xaxis(self): - - self.cw._write_axis(self.root, self.chart.x_axis, 'c:catAx') - eq_(get_xml(self.root), '') - - def test_write_yaxis(self): - - self.cw._write_axis(self.root, self.chart.y_axis, 'c:valAx') - eq_(get_xml(self.root), '') - - def test_write_series(self): - - self.cw._write_series(self.root) - eq_(get_xml(self.root), 'data!$A$1:$A$11General0123456789None') - - def test_write_legend(self): - - self.cw._write_legend(self.root) - eq_(get_xml(self.root), '') - - def test_write_print_settings(self): - - self.cw._write_print_settings(self.root) - eq_(get_xml(self.root), '') - - def test_write_chart(self): - - self.cw._write_chart(self.root) - eq_(get_xml(self.root), 'TITLEdata!$A$1:$A$11General0123456789None') - - -class TestScatterChartWriter(object): - - def setUp(self): - - wb = Workbook() - ws = wb.get_active_sheet() - ws.title = u'data' - for i in range(10): - ws.cell(row = i, column = 0).value = i - ws.cell(row = i, column = 1).value = i - self.scatterchart = ScatterChart() - self.scatterchart.add_serie(Serie(Reference(ws, (0, 0), (10, 0)), - xvalues = Reference(ws, (0, 1), (10, 1)))) - self.cw = ChartWriter(self.scatterchart) - self.root = Element('test') - - def test_write_xaxis(self): - - self.cw._write_axis(self.root, self.scatterchart.x_axis, 'c:valAx') - eq_(get_xml(self.root), '') - - - def test_write_yaxis(self): - - self.cw._write_axis(self.root, self.scatterchart.y_axis, 'c:valAx') - eq_(get_xml(self.root), '') - - def test_write_series(self): - - self.cw._write_series(self.root) - eq_(get_xml(self.root), 'data!$B$1:$B$11General0123456789Nonedata!$A$1:$A$11General0123456789None') - - def test_write_legend(self): - - self.cw._write_legend(self.root) - eq_(get_xml(self.root), '') - - def test_write_print_settings(self): - - self.cw._write_print_settings(self.root) - eq_(get_xml(self.root), '') - - def test_write_chart(self): - - self.cw._write_chart(self.root) - eq_(get_xml(self.root), 'data!$B$1:$B$11General0123456789Nonedata!$A$1:$A$11General0123456789None') diff --git a/tablib/packages/openpyxl/tests/test_dump.py b/tablib/packages/openpyxl/tests/test_dump.py deleted file mode 100644 index 1e18ace..0000000 --- a/tablib/packages/openpyxl/tests/test_dump.py +++ /dev/null @@ -1,109 +0,0 @@ - -# file openpyxl/tests/test_dump.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from datetime import time, datetime - -# 3rd party imports -from nose.tools import eq_, raises, assert_raises - -from openpyxl.workbook import Workbook -from openpyxl.cell import get_column_letter - -from openpyxl.reader.excel import load_workbook - -from openpyxl.writer.strings import StringTableBuilder - -from tempfile import NamedTemporaryFile -import os -import shutil - -def test_dump_sheet(): - - test_file = NamedTemporaryFile(prefix='openpyxl.', suffix='.xlsx', delete=False) - test_file.close() - test_filename = test_file.name - - wb = Workbook(optimized_write = True) - - ws = wb.create_sheet() - - letters = [get_column_letter(x+1) for x in xrange(20)] - - expected_rows = [] - - for row in xrange(20): - - expected_rows.append(['%s%d' % (letter, row+1) for letter in letters]) - - for row in xrange(20): - - expected_rows.append([(row+1) for letter in letters]) - - for row in xrange(10): - - expected_rows.append([datetime(2010, ((x % 12)+1), row+1) for x in range(len(letters))]) - - for row in xrange(20): - - expected_rows.append(['=%s%d' % (letter, row+1) for letter in letters]) - - for row in expected_rows: - - ws.append(row) - - wb.save(test_filename) - - wb2 = load_workbook(test_filename, True) - - ws = wb2.worksheets[0] - - - for ex_row, ws_row in zip(expected_rows[:-20], ws.iter_rows()): - - for ex_cell, ws_cell in zip(ex_row, ws_row): - - eq_(ex_cell, ws_cell.internal_value) - - os.remove(test_filename) - - -def test_table_builder(): - - sb = StringTableBuilder() - - result = {'a':0, 'b':1, 'c':2, 'd':3} - - for letter in sorted(result.keys()): - - for x in range(5): - - sb.add(letter) - - table = dict(sb.get_table()) - - for key,idx in result.items(): - eq_(idx, table[key]) diff --git a/tablib/packages/openpyxl/tests/test_iter.py b/tablib/packages/openpyxl/tests/test_iter.py deleted file mode 100644 index a68237d..0000000 --- a/tablib/packages/openpyxl/tests/test_iter.py +++ /dev/null @@ -1,112 +0,0 @@ -# file openpyxl/tests/test_iter.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -from nose.tools import eq_, raises, assert_raises -import os.path as osp -from openpyxl.tests.helper import DATADIR -from openpyxl.reader.iter_worksheet import get_range_boundaries -from openpyxl.reader.excel import load_workbook -import datetime - -class TestWorksheet(object): - - workbook_name = osp.join(DATADIR, 'genuine', 'empty.xlsx') - -class TestText(TestWorksheet): - sheet_name = 'Sheet1 - Text' - - expected = [['This is cell A1 in Sheet 1', None, None, None, None, None, None], - [None, None, None, None, None, None, None], - [None, None, None, None, None, None, None], - [None, None, None, None, None, None, None], - [None, None, None, None, None, None, 'This is cell G5'], ] - - def test_read_fast_integrated(self): - - wb = load_workbook(filename = self.workbook_name, use_iterators = True) - ws = wb.get_sheet_by_name(name = self.sheet_name) - - for row, expected_row in zip(ws.iter_rows(), self.expected): - - row_values = [x.internal_value for x in row] - - eq_(row_values, expected_row) - - - def test_get_boundaries_range(self): - - eq_(get_range_boundaries('C1:C4'), (3, 1, 3, 4)) - - def test_get_boundaries_one(self): - - - eq_(get_range_boundaries('C1'), (3, 1, 4, 1)) - - def test_read_single_cell_range(self): - - wb = load_workbook(filename = self.workbook_name, use_iterators = True) - ws = wb.get_sheet_by_name(name = self.sheet_name) - - eq_('This is cell A1 in Sheet 1', list(ws.iter_rows('A1'))[0][0].internal_value) - -class TestIntegers(TestWorksheet): - - sheet_name = 'Sheet2 - Numbers' - - expected = [[x + 1] for x in xrange(30)] - - query_range = 'D1:E30' - - def test_read_fast_integrated(self): - - wb = load_workbook(filename = self.workbook_name, use_iterators = True) - ws = wb.get_sheet_by_name(name = self.sheet_name) - - for row, expected_row in zip(ws.iter_rows(self.query_range), self.expected): - - row_values = [x.internal_value for x in row] - - eq_(row_values, expected_row) - -class TestFloats(TestWorksheet): - - sheet_name = 'Sheet2 - Numbers' - query_range = 'K1:L30' - expected = expected = [[(x + 1) / 100.0] for x in xrange(30)] - -class TestDates(TestWorksheet): - - sheet_name = 'Sheet4 - Dates' - - def test_read_single_cell_date(self): - - wb = load_workbook(filename = self.workbook_name, use_iterators = True) - ws = wb.get_sheet_by_name(name = self.sheet_name) - - eq_(datetime.datetime(1973, 5, 20), list(ws.iter_rows('A1'))[0][0].internal_value) - eq_(datetime.datetime(1973, 5, 20, 9, 15, 2), list(ws.iter_rows('C1'))[0][0].internal_value) - - - diff --git a/tablib/packages/openpyxl/tests/test_meta.py b/tablib/packages/openpyxl/tests/test_meta.py deleted file mode 100644 index 3aefdcf..0000000 --- a/tablib/packages/openpyxl/tests/test_meta.py +++ /dev/null @@ -1,50 +0,0 @@ -# file openpyxl/tests/test_meta.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from __future__ import with_statement -import os.path - -# package imports -from openpyxl.tests.helper import DATADIR, assert_equals_file_content -from openpyxl.writer.workbook import write_content_types, write_root_rels -from openpyxl.workbook import Workbook - - -def test_write_content_types(): - wb = Workbook() - wb.create_sheet() - wb.create_sheet() - content = write_content_types(wb) - reference_file = os.path.join(DATADIR, 'writer', 'expected', - '[Content_Types].xml') - assert_equals_file_content(reference_file, content) - - -def test_write_root_rels(): - wb = Workbook() - content = write_root_rels(wb) - reference_file = os.path.join(DATADIR, 'writer', 'expected', '.rels') - assert_equals_file_content(reference_file, content) diff --git a/tablib/packages/openpyxl/tests/test_named_range.py b/tablib/packages/openpyxl/tests/test_named_range.py deleted file mode 100644 index a56ed86..0000000 --- a/tablib/packages/openpyxl/tests/test_named_range.py +++ /dev/null @@ -1,102 +0,0 @@ -# file openpyxl/tests/test_named_range.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from __future__ import with_statement -import os.path - -# 3rd-party imports -from nose.tools import eq_, assert_raises - -# package imports -from openpyxl.tests.helper import DATADIR -from openpyxl.namedrange import split_named_range -from openpyxl.reader.workbook import read_named_ranges -from openpyxl.shared.exc import NamedRangeException -from openpyxl.reader.excel import load_workbook - - -def test_split(): - eq_([('My Sheet', '$D$8'), ], split_named_range("'My Sheet'!$D$8")) - - -def test_split_no_quotes(): - eq_([('HYPOTHESES', '$B$3:$L$3'), ], split_named_range('HYPOTHESES!$B$3:$L$3')) - - -def test_bad_range_name(): - assert_raises(NamedRangeException, split_named_range, 'HYPOTHESES$B$3') - - -def test_read_named_ranges(): - - class DummyWs(object): - title = 'My Sheeet' - - def __str__(self): - return self.title - - class DummyWB(object): - - def get_sheet_by_name(self, name): - return DummyWs() - - with open(os.path.join(DATADIR, 'reader', 'workbook.xml')) as handle: - content = handle.read() - named_ranges = read_named_ranges(content, DummyWB()) - eq_(["My Sheeet!$D$8"], [str(range) for range in named_ranges]) - -def test_oddly_shaped_named_ranges(): - - ranges_counts = ((4, 'TEST_RANGE'), - (3, 'TRAP_1'), - (13, 'TRAP_2')) - - def check_ranges(ws, count, range_name): - - eq_(count, len(ws.range(range_name))) - - wb = load_workbook(os.path.join(DATADIR, 'genuine', 'merge_range.xlsx'), - use_iterators = False) - - ws = wb.worksheets[0] - - for count, range_name in ranges_counts: - - yield check_ranges, ws, count, range_name - - -def test_merged_cells_named_range(): - - wb = load_workbook(os.path.join(DATADIR, 'genuine', 'merge_range.xlsx'), - use_iterators = False) - - ws = wb.worksheets[0] - - cell = ws.range('TRAP_3') - - eq_('B15', cell.get_coordinate()) - - eq_(10, cell.value) diff --git a/tablib/packages/openpyxl/tests/test_number_format.py b/tablib/packages/openpyxl/tests/test_number_format.py deleted file mode 100644 index 2f5c9da..0000000 --- a/tablib/packages/openpyxl/tests/test_number_format.py +++ /dev/null @@ -1,142 +0,0 @@ -# file openpyxl/tests/test_number_format.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from __future__ import with_statement -from datetime import datetime, date - -# 3rd party imports -from nose.tools import eq_, assert_almost_equal, assert_raises - -# package imports -from openpyxl.workbook import Workbook -from openpyxl.worksheet import Worksheet -from openpyxl.cell import Cell -from openpyxl.style import NumberFormat -from openpyxl.shared.date_time import SharedDate - - -class TestNumberFormat(object): - - @classmethod - def setup_class(cls): - cls.workbook = Workbook() - cls.worksheet = Worksheet(cls.workbook, 'Test') - cls.sd = SharedDate() - - def test_convert_date_to_julian(self): - eq_(40167, self.sd.to_julian(2009, 12, 20)) - - def test_convert_date_from_julian(self): - - def test_date_equal(julian, datetime): - - eq_(self.sd.from_julian(julian), datetime) - - date_pairs= ( - (40167, datetime(2009, 12, 20)), - (21980, datetime(1960, 03, 05)), - ) - - for count, dt in date_pairs: - yield test_date_equal, count, dt - - def test_convert_datetime_to_julian(self): - eq_(40167, self.sd.datetime_to_julian(datetime(2009, 12, 20))) - - def test_insert_float(self): - self.worksheet.cell('A1').value = 3.14 - eq_(Cell.TYPE_NUMERIC, self.worksheet.cell('A1')._data_type) - - def test_insert_percentage(self): - self.worksheet.cell('A1').value = '3.14%' - eq_(Cell.TYPE_NUMERIC, self.worksheet.cell('A1')._data_type) - assert_almost_equal(0.0314, self.worksheet.cell('A1').value) - - def test_insert_datetime(self): - self.worksheet.cell('A1').value = date.today() - eq_(Cell.TYPE_NUMERIC, self.worksheet.cell('A1')._data_type) - - def test_insert_date(self): - self.worksheet.cell('A1').value = datetime.now() - eq_(Cell.TYPE_NUMERIC, self.worksheet.cell('A1')._data_type) - - def test_internal_date(self): - dt = datetime(2010, 7, 13, 6, 37, 41) - self.worksheet.cell('A3').value = dt - eq_(40372.27616898148, self.worksheet.cell('A3')._value) - - def test_datetime_interpretation(self): - dt = datetime(2010, 7, 13, 6, 37, 41) - self.worksheet.cell('A3').value = dt - eq_(dt, self.worksheet.cell('A3').value) - - def test_date_interpretation(self): - dt = date(2010, 7, 13) - self.worksheet.cell('A3').value = dt - eq_(datetime(2010, 7, 13, 0, 0), self.worksheet.cell('A3').value) - - def test_number_format_style(self): - self.worksheet.cell('A1').value = '12.6%' - eq_(NumberFormat.FORMAT_PERCENTAGE, \ - self.worksheet.cell('A1').style.number_format.format_code) - - def test_date_format_on_non_date(self): - cell = self.worksheet.cell('A1') - - def check_date_pair(count, date_string): - cell.value = datetime.strptime(date_string, '%Y-%m-%d') - eq_(count, cell._value) - - date_pairs = ( - (15, '1900-01-15'), - (59, '1900-02-28'), - (61, '1900-03-01'), - (367, '1901-01-01'), - (2958465, '9999-12-31'), ) - for count, date_string in date_pairs: - yield check_date_pair, count, date_string - - def test_1900_leap_year(self): - assert_raises(ValueError, self.sd.from_julian, 60) - assert_raises(ValueError, self.sd.to_julian, 1900, 2, 29) - - def test_bad_date(self): - - def check_bad_date(year, month, day): - assert_raises(ValueError, self.sd.to_julian, year, month, day) - - bad_dates = ((1776, 07, 04), (1899, 12, 31), ) - for year, month, day in bad_dates: - yield check_bad_date, year, month, day - - def test_bad_julian_date(self): - assert_raises(ValueError, self.sd.from_julian, -1) - - def test_mac_date(self): - self.sd.excel_base_date = self.sd.CALENDAR_MAC_1904 - assert_raises(NotImplementedError, self.sd.to_julian, 2000, 1, 1) - assert_raises(NotImplementedError, self.sd.from_julian, 1) - self.sd.excel_base_date = self.sd.CALENDAR_WINDOWS_1900 diff --git a/tablib/packages/openpyxl/tests/test_password_hash.py b/tablib/packages/openpyxl/tests/test_password_hash.py deleted file mode 100644 index fd2fddf..0000000 --- a/tablib/packages/openpyxl/tests/test_password_hash.py +++ /dev/null @@ -1,41 +0,0 @@ -# file openpyxl/tests/test_password_hash.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# 3rd party imports -from nose.tools import eq_ - -# package imports -from openpyxl.shared.password_hasher import hash_password -from openpyxl.worksheet import SheetProtection - - -def test_hasher(): - eq_('CBEB', hash_password('test')) - - -def test_sheet_protection(): - protection = SheetProtection() - protection.password = 'test' - eq_('CBEB', protection.password) diff --git a/tablib/packages/openpyxl/tests/test_props.py b/tablib/packages/openpyxl/tests/test_props.py deleted file mode 100644 index fb9c5d0..0000000 --- a/tablib/packages/openpyxl/tests/test_props.py +++ /dev/null @@ -1,124 +0,0 @@ -# coding=utf-8 -# file openpyxl/tests/test_props.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from __future__ import with_statement -from zipfile import ZipFile, ZIP_DEFLATED -from datetime import datetime -import os.path - -# 3rd party imports -from nose.tools import eq_ - -# package imports -from openpyxl.tests.helper import DATADIR, TMPDIR, make_tmpdir, clean_tmpdir, \ - assert_equals_file_content -from openpyxl.reader.workbook import read_properties_core, \ - read_sheets_titles, get_number_of_parts -from openpyxl.writer.workbook import write_properties_core, \ - write_properties_app -from openpyxl.shared.ooxml import ARC_APP, ARC_CORE -from openpyxl.workbook import DocumentProperties, Workbook - - -class TestReaderProps(object): - - @classmethod - def setup_class(cls): - cls.genuine_filename = os.path.join(DATADIR, 'genuine', 'empty.xlsx') - cls.archive = ZipFile(cls.genuine_filename, 'r', ZIP_DEFLATED) - - @classmethod - def teardown_class(cls): - cls.archive.close() - - def test_read_properties_core(self): - content = self.archive.read(ARC_CORE) - prop = read_properties_core(content) - eq_(prop.creator, '*.*') - eq_(prop.last_modified_by, u'Aurélien Campéas') - eq_(prop.created, datetime(2010, 4, 9, 20, 43, 12)) - eq_(prop.modified, datetime(2011, 2, 9, 13, 49, 32)) - - def test_read_sheets_titles(self): - content = self.archive.read(ARC_APP) - sheet_titles = read_sheets_titles(content) - eq_(sheet_titles, \ - ['Sheet1 - Text', 'Sheet2 - Numbers', 'Sheet3 - Formulas', 'Sheet4 - Dates']) - - -class TestReaderPropsMixed(object): - - @classmethod - def setup_class(cls): - reference_filename = \ - os.path.join(DATADIR, 'reader', 'app-multi-titles.xml') - with open(reference_filename) as handle: - cls.content = handle.read() - - def test_read_sheet_titles_mixed(self): - sheet_titles = read_sheets_titles(self.content) - eq_(sheet_titles, - ['ToC', 'ContractYear', 'ContractTier', 'Demand', - 'LinearizedFunction', 'Market', 'Transmission']) - - def test_number_of_parts(self): - parts_number = get_number_of_parts(self.content) - eq_(parts_number, - ({'Worksheets': 7, 'Named Ranges': 7}, - ['Worksheets', 'Named Ranges'])) - - -class TestWriteProps(object): - - @classmethod - def setup_class(cls): - make_tmpdir() - cls.tmp_filename = os.path.join(TMPDIR, 'test.xlsx') - cls.prop = DocumentProperties() - - @classmethod - def teardown_class(cls): - clean_tmpdir() - - def test_write_properties_core(self): - self.prop.creator = 'TEST_USER' - self.prop.last_modified_by = 'SOMEBODY' - self.prop.created = datetime(2010, 4, 1, 20, 30, 00) - self.prop.modified = datetime(2010, 4, 5, 14, 5, 30) - content = write_properties_core(self.prop) - assert_equals_file_content( - os.path.join(DATADIR, 'writer', 'expected', 'core.xml'), - content) - - def test_write_properties_app(self): - wb = Workbook() - wb.create_sheet() - wb.create_sheet() - content = write_properties_app(wb) - assert_equals_file_content( - os.path.join(DATADIR, 'writer', 'expected', 'app.xml'), - content) diff --git a/tablib/packages/openpyxl/tests/test_read.py b/tablib/packages/openpyxl/tests/test_read.py deleted file mode 100644 index eb6ab07..0000000 --- a/tablib/packages/openpyxl/tests/test_read.py +++ /dev/null @@ -1,134 +0,0 @@ -# file openpyxl/tests/test_read.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from __future__ import with_statement -import os.path - -# 3rd party imports -from nose.tools import eq_, raises - -# package imports -from openpyxl.tests.helper import DATADIR -from openpyxl.worksheet import Worksheet -from openpyxl.workbook import Workbook -from openpyxl.style import NumberFormat, Style -from openpyxl.reader.worksheet import read_worksheet, read_dimension -from openpyxl.reader.excel import load_workbook -from openpyxl.shared.exc import InvalidFileException - - -def test_read_standalone_worksheet(): - - class DummyWb(object): - - def get_sheet_by_name(self, value): - return None - - path = os.path.join(DATADIR, 'reader', 'sheet2.xml') - with open(path) as handle: - ws = read_worksheet(handle.read(), DummyWb(), - 'Sheet 2', {1: 'hello'}, {1: Style()}) - assert isinstance(ws, Worksheet) - eq_(ws.cell('G5').value, 'hello') - eq_(ws.cell('D30').value, 30) - eq_(ws.cell('K9').value, 0.09) - - -def test_read_standard_workbook(): - path = os.path.join(DATADIR, 'genuine', 'empty.xlsx') - wb = load_workbook(path) - assert isinstance(wb, Workbook) - -def test_read_standard_workbook_from_fileobj(): - path = os.path.join(DATADIR, 'genuine', 'empty.xlsx') - fo = open(path, mode = 'rb') - wb = load_workbook(fo) - assert isinstance(wb, Workbook) - -def test_read_worksheet(): - path = os.path.join(DATADIR, 'genuine', 'empty.xlsx') - wb = load_workbook(path) - sheet2 = wb.get_sheet_by_name('Sheet2 - Numbers') - assert isinstance(sheet2, Worksheet) - eq_('This is cell G5', sheet2.cell('G5').value) - eq_(18, sheet2.cell('D18').value) - - -def test_read_nostring_workbook(): - genuine_wb = os.path.join(DATADIR, 'genuine', 'empty-no-string.xlsx') - wb = load_workbook(genuine_wb) - assert isinstance(wb, Workbook) - -@raises(InvalidFileException) -def test_read_empty_file(): - - null_file = os.path.join(DATADIR, 'reader', 'null_file.xlsx') - wb = load_workbook(null_file) - -@raises(InvalidFileException) -def test_read_empty_archive(): - - null_file = os.path.join(DATADIR, 'reader', 'null_archive.xlsx') - wb = load_workbook(null_file) - -def test_read_dimension(): - - path = os.path.join(DATADIR, 'reader', 'sheet2.xml') - - with open(path) as handle: - - dimension = read_dimension(xml_source = handle.read()) - - eq_(('D', 1, 'K', 30), dimension) - -class TestReadWorkbookWithStyles(object): - - @classmethod - def setup_class(cls): - cls.genuine_wb = os.path.join(DATADIR, 'genuine', \ - 'empty-with-styles.xlsx') - wb = load_workbook(cls.genuine_wb) - cls.ws = wb.get_sheet_by_name('Sheet1') - - def test_read_general_style(self): - eq_(self.ws.cell('A1').style.number_format.format_code, - NumberFormat.FORMAT_GENERAL) - - def test_read_date_style(self): - eq_(self.ws.cell('A2').style.number_format.format_code, - NumberFormat.FORMAT_DATE_XLSX14) - - def test_read_number_style(self): - eq_(self.ws.cell('A3').style.number_format.format_code, - NumberFormat.FORMAT_NUMBER_00) - - def test_read_time_style(self): - eq_(self.ws.cell('A4').style.number_format.format_code, - NumberFormat.FORMAT_DATE_TIME3) - - def test_read_percentage_style(self): - eq_(self.ws.cell('A5').style.number_format.format_code, - NumberFormat.FORMAT_PERCENTAGE_00) diff --git a/tablib/packages/openpyxl/tests/test_strings.py b/tablib/packages/openpyxl/tests/test_strings.py deleted file mode 100644 index bf3cc57..0000000 --- a/tablib/packages/openpyxl/tests/test_strings.py +++ /dev/null @@ -1,68 +0,0 @@ -# file openpyxl/tests/test_strings.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from __future__ import with_statement -import os.path - -# 3rd party imports -from nose.tools import eq_ - -# package imports -from openpyxl.tests.helper import DATADIR -from openpyxl.workbook import Workbook -from openpyxl.writer.strings import create_string_table -from openpyxl.reader.strings import read_string_table - - -def test_create_string_table(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('B12').value = 'hello' - ws.cell('B13').value = 'world' - ws.cell('D28').value = 'hello' - table = create_string_table(wb) - eq_({'hello': 1, 'world': 0}, table) - - -def test_read_string_table(): - with open(os.path.join(DATADIR, 'reader', 'sharedStrings.xml')) as handle: - content = handle.read() - string_table = read_string_table(content) - eq_({0: 'This is cell A1 in Sheet 1', 1: 'This is cell G5'}, string_table) - -def test_empty_string(): - with open(os.path.join(DATADIR, 'reader', 'sharedStrings-emptystring.xml')) as handle: - content = handle.read() - string_table = read_string_table(content) - eq_({0: 'Testing empty cell', 1:''}, string_table) - -def test_formatted_string_table(): - with open(os.path.join(DATADIR, 'reader', 'shared-strings-rich.xml')) \ - as handle: - content = handle.read() - string_table = read_string_table(content) - eq_({0: 'Welcome', 1: 'to the best shop in town', - 2: " let's play "}, string_table) diff --git a/tablib/packages/openpyxl/tests/test_style.py b/tablib/packages/openpyxl/tests/test_style.py deleted file mode 100644 index ee51123..0000000 --- a/tablib/packages/openpyxl/tests/test_style.py +++ /dev/null @@ -1,181 +0,0 @@ -# file openpyxl/tests/test_style.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from __future__ import with_statement -import os.path -import datetime - -# 3rd party imports -from nose.tools import eq_, assert_false, ok_ - -# package imports -from openpyxl.tests.helper import DATADIR, assert_equals_file_content, get_xml -from openpyxl.reader.style import read_style_table -from openpyxl.workbook import Workbook -from openpyxl.style import NumberFormat -from openpyxl.writer.styles import StyleWriter -from openpyxl.style import NumberFormat, Border, Color - - -class TestCreateStyle(object): - - @classmethod - def setup_class(cls): - now = datetime.datetime.now() - cls.workbook = Workbook() - cls.worksheet = cls.workbook.create_sheet() - cls.worksheet.cell(coordinate = 'A1').value = '12.34%' - cls.worksheet.cell(coordinate = 'B4').value = now - cls.worksheet.cell(coordinate = 'B5').value = now - cls.worksheet.cell(coordinate = 'C14').value = u'This is a test' - cls.worksheet.cell(coordinate = 'D9').value = '31.31415' - cls.worksheet.cell(coordinate = 'D9').style.number_format.format_code = \ - NumberFormat.FORMAT_NUMBER_00 - cls.writer = StyleWriter(cls.workbook) - - def test_create_style_table(self): - eq_(3, len(self.writer.style_table)) - - def test_write_style_table(self): - reference_file = os.path.join(DATADIR, 'writer', 'expected', 'simple-styles.xml') - assert_equals_file_content(reference_file, self.writer.write_table()) - -class TestStyleWriter(object): - - def setUp(self): - - self.workbook = Workbook() - self.worksheet = self.workbook.create_sheet() - - def test_no_style(self): - - w = StyleWriter(self.workbook) - eq_(0, len(w.style_table)) - - def test_nb_style(self): - - for i in range(1, 6): - self.worksheet.cell(row=1, column=i).style.font.size += i - w = StyleWriter(self.workbook) - eq_(5, len(w.style_table)) - - self.worksheet.cell('A10').style.borders.top = Border.BORDER_THIN - w = StyleWriter(self.workbook) - eq_(6, len(w.style_table)) - - def test_style_unicity(self): - - for i in range(1, 6): - self.worksheet.cell(row=1, column=i).style.font.bold = True - w = StyleWriter(self.workbook) - eq_(1, len(w.style_table)) - - def test_fonts(self): - - self.worksheet.cell('A1').style.font.size = 12 - self.worksheet.cell('A1').style.font.bold = True - w = StyleWriter(self.workbook) - w._write_fonts() - eq_(get_xml(w._root), '') - - def test_fills(self): - - self.worksheet.cell('A1').style.fill.fill_type = 'solid' - self.worksheet.cell('A1').style.fill.start_color.index = Color.DARKYELLOW - w = StyleWriter(self.workbook) - w._write_fills() - eq_(get_xml(w._root), '') - - def test_borders(self): - - self.worksheet.cell('A1').style.borders.top.border_style = Border.BORDER_THIN - self.worksheet.cell('A1').style.borders.top.color.index = Color.DARKYELLOW - w = StyleWriter(self.workbook) - w._write_borders() - eq_(get_xml(w._root), '') - - def test_write_cell_xfs_1(self): - - self.worksheet.cell('A1').style.font.size = 12 - w = StyleWriter(self.workbook) - ft = w._write_fonts() - nft = w._write_number_formats() - w._write_cell_xfs(nft, ft, {}, {}) - xml = get_xml(w._root) - ok_('applyFont="1"' in xml) - ok_('applyFillId="1"' not in xml) - ok_('applyBorder="1"' not in xml) - ok_('applyAlignment="1"' not in xml) - - def test_alignment(self): - self.worksheet.cell('A1').style.alignment.horizontal = 'center' - self.worksheet.cell('A1').style.alignment.vertical = 'center' - w = StyleWriter(self.workbook) - nft = w._write_number_formats() - w._write_cell_xfs(nft,{},{},{}) - xml = get_xml(w._root) - ok_('applyAlignment="1"' in xml) - ok_('horizontal="center"' in xml) - ok_('vertical="center"' in xml) - - -#def test_format_comparisions(): -# format1 = NumberFormat() -# format2 = NumberFormat() -# format3 = NumberFormat() -# format1.format_code = 'm/d/yyyy' -# format2.format_code = 'm/d/yyyy' -# format3.format_code = 'mm/dd/yyyy' -# assert not format1 < format2 -# assert format1 < format3 -# assert format1 == format2 -# assert format1 != format3 - - -def test_builtin_format(): - format = NumberFormat() - format.format_code = '0.00' - eq_(format.builtin_format_code(2), format._format_code) - - -def test_read_style(): - reference_file = os.path.join(DATADIR, 'reader', 'simple-styles.xml') - with open(reference_file, 'r') as handle: - content = handle.read() - style_table = read_style_table(content) - eq_(4, len(style_table)) - eq_(NumberFormat._BUILTIN_FORMATS[9], - style_table[1].number_format.format_code) - eq_('yyyy-mm-dd', style_table[2].number_format.format_code) - - -def test_read_cell_style(): - reference_file = os.path.join( - DATADIR, 'reader', 'empty-workbook-styles.xml') - with open(reference_file, 'r') as handle: - content = handle.read() - style_table = read_style_table(content) - eq_(2, len(style_table)) diff --git a/tablib/packages/openpyxl/tests/test_theme.py b/tablib/packages/openpyxl/tests/test_theme.py deleted file mode 100644 index b0f6f00..0000000 --- a/tablib/packages/openpyxl/tests/test_theme.py +++ /dev/null @@ -1,37 +0,0 @@ -# file openpyxl/tests/test_theme.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -import os.path - -# package imports -from openpyxl.tests.helper import DATADIR, assert_equals_file_content -from openpyxl.writer.theme import write_theme - - -def test_write_theme(): - content = write_theme() - assert_equals_file_content( - os.path.join(DATADIR, 'writer', 'expected', 'theme1.xml'), content) diff --git a/tablib/packages/openpyxl/tests/test_workbook.py b/tablib/packages/openpyxl/tests/test_workbook.py deleted file mode 100644 index 20191d2..0000000 --- a/tablib/packages/openpyxl/tests/test_workbook.py +++ /dev/null @@ -1,148 +0,0 @@ -# file openpyxl/tests/test_workbook.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# 3rd party imports -from nose.tools import eq_, with_setup, raises -import os.path as osp - -# package imports -from openpyxl.workbook import Workbook -from openpyxl.reader.excel import load_workbook -from openpyxl.namedrange import NamedRange -from openpyxl.shared.exc import ReadOnlyWorkbookException -from openpyxl.tests.helper import TMPDIR, clean_tmpdir, make_tmpdir - -import datetime - -def test_get_active_sheet(): - wb = Workbook() - active_sheet = wb.get_active_sheet() - eq_(active_sheet, wb.worksheets[0]) - - -def test_create_sheet(): - wb = Workbook() - new_sheet = wb.create_sheet(0) - eq_(new_sheet, wb.worksheets[0]) - - -@raises(ReadOnlyWorkbookException) -def test_create_sheet_readonly(): - wb = Workbook() - wb._set_optimized_read() - wb.create_sheet() - - -def test_remove_sheet(): - wb = Workbook() - new_sheet = wb.create_sheet(0) - wb.remove_sheet(new_sheet) - assert new_sheet not in wb.worksheets - - -def test_get_sheet_by_name(): - wb = Workbook() - new_sheet = wb.create_sheet() - title = 'my sheet' - new_sheet.title = title - found_sheet = wb.get_sheet_by_name(title) - eq_(new_sheet, found_sheet) - - -def test_get_index(): - wb = Workbook() - new_sheet = wb.create_sheet(0) - sheet_index = wb.get_index(new_sheet) - eq_(sheet_index, 0) - - -def test_get_sheet_names(): - wb = Workbook() - names = ['Sheet', 'Sheet1', 'Sheet2', 'Sheet3', 'Sheet4', 'Sheet5'] - for count in range(5): - wb.create_sheet(0) - actual_names = wb.get_sheet_names() - eq_(sorted(actual_names), sorted(names)) - - -def test_get_named_ranges(): - wb = Workbook() - eq_(wb.get_named_ranges(), wb._named_ranges) - - -def test_add_named_range(): - wb = Workbook() - new_sheet = wb.create_sheet() - named_range = NamedRange('test_nr', [(new_sheet, 'A1')]) - wb.add_named_range(named_range) - named_ranges_list = wb.get_named_ranges() - assert named_range in named_ranges_list - - -def test_get_named_range(): - wb = Workbook() - new_sheet = wb.create_sheet() - named_range = NamedRange('test_nr', [(new_sheet, 'A1')]) - wb.add_named_range(named_range) - found_named_range = wb.get_named_range('test_nr') - eq_(named_range, found_named_range) - - -def test_remove_named_range(): - wb = Workbook() - new_sheet = wb.create_sheet() - named_range = NamedRange('test_nr', [(new_sheet, 'A1')]) - wb.add_named_range(named_range) - wb.remove_named_range(named_range) - named_ranges_list = wb.get_named_ranges() - assert named_range not in named_ranges_list - -@with_setup(setup = make_tmpdir, teardown = clean_tmpdir) -def test_add_local_named_range(): - wb = Workbook() - new_sheet = wb.create_sheet() - named_range = NamedRange('test_nr', [(new_sheet, 'A1')]) - named_range.local_only = True - wb.add_named_range(named_range) - dest_filename = osp.join(TMPDIR, 'local_named_range_book.xlsx') - wb.save(dest_filename) - - -@with_setup(setup = make_tmpdir, teardown = clean_tmpdir) -def test_write_regular_date(): - - today = datetime.datetime(2010, 1, 18, 14, 15, 20, 1600) - - book = Workbook() - sheet = book.get_active_sheet() - sheet.cell("A1").value = today - dest_filename = osp.join(TMPDIR, 'date_read_write_issue.xlsx') - book.save(dest_filename) - - test_book = load_workbook(dest_filename) - test_sheet = test_book.get_active_sheet() - - eq_(test_sheet.cell("A1").value, today) - diff --git a/tablib/packages/openpyxl/tests/test_worksheet.py b/tablib/packages/openpyxl/tests/test_worksheet.py deleted file mode 100644 index 1894f1d..0000000 --- a/tablib/packages/openpyxl/tests/test_worksheet.py +++ /dev/null @@ -1,258 +0,0 @@ -# file openpyxl/tests/test_worksheet.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# 3rd party imports -from nose.tools import eq_, raises, assert_raises - -# package imports -from openpyxl.workbook import Workbook -from openpyxl.worksheet import Worksheet, Relationship, flatten -from openpyxl.cell import Cell -from openpyxl.shared.exc import CellCoordinatesException, \ - SheetTitleException, InsufficientCoordinatesException, \ - NamedRangeException - - -class TestWorksheet(): - - @classmethod - def setup_class(cls): - cls.wb = Workbook() - - def test_new_worksheet(self): - ws = Worksheet(self.wb) - eq_(self.wb, ws._parent) - - def test_new_sheet_name(self): - self.wb.worksheets = [] - ws = Worksheet(self.wb, title = '') - eq_(repr(ws), '') - - def test_get_cell(self): - ws = Worksheet(self.wb) - cell = ws.cell('A1') - eq_(cell.get_coordinate(), 'A1') - - @raises(SheetTitleException) - def test_set_bad_title(self): - Worksheet(self.wb, 'X' * 50) - - def test_set_bad_title_character(self): - assert_raises(SheetTitleException, Worksheet, self.wb, '[') - assert_raises(SheetTitleException, Worksheet, self.wb, ']') - assert_raises(SheetTitleException, Worksheet, self.wb, '*') - assert_raises(SheetTitleException, Worksheet, self.wb, ':') - assert_raises(SheetTitleException, Worksheet, self.wb, '?') - assert_raises(SheetTitleException, Worksheet, self.wb, '/') - assert_raises(SheetTitleException, Worksheet, self.wb, '\\') - - def test_worksheet_dimension(self): - ws = Worksheet(self.wb) - eq_('A1:A1', ws.calculate_dimension()) - ws.cell('B12').value = 'AAA' - eq_('A1:B12', ws.calculate_dimension()) - - def test_worksheet_range(self): - ws = Worksheet(self.wb) - xlrange = ws.range('A1:C4') - assert isinstance(xlrange, tuple) - eq_(4, len(xlrange)) - eq_(3, len(xlrange[0])) - - def test_worksheet_named_range(self): - ws = Worksheet(self.wb) - self.wb.create_named_range('test_range', ws, 'C5') - xlrange = ws.range('test_range') - assert isinstance(xlrange, Cell) - eq_(5, xlrange.row) - - @raises(NamedRangeException) - def test_bad_named_range(self): - ws = Worksheet(self.wb) - ws.range('bad_range') - - @raises(NamedRangeException) - def test_named_range_wrong_sheet(self): - ws1 = Worksheet(self.wb) - ws2 = Worksheet(self.wb) - self.wb.create_named_range('wrong_sheet_range', ws1, 'C5') - ws2.range('wrong_sheet_range') - - def test_cell_offset(self): - ws = Worksheet(self.wb) - eq_('C17', ws.cell('B15').offset(2, 1).get_coordinate()) - - def test_range_offset(self): - ws = Worksheet(self.wb) - xlrange = ws.range('A1:C4', 1, 3) - assert isinstance(xlrange, tuple) - eq_(4, len(xlrange)) - eq_(3, len(xlrange[0])) - eq_('D2', xlrange[0][0].get_coordinate()) - - def test_cell_alternate_coordinates(self): - ws = Worksheet(self.wb) - cell = ws.cell(row = 8, column = 4) - eq_('E9', cell.get_coordinate()) - - @raises(InsufficientCoordinatesException) - def test_cell_insufficient_coordinates(self): - ws = Worksheet(self.wb) - cell = ws.cell(row = 8) - - def test_cell_range_name(self): - ws = Worksheet(self.wb) - self.wb.create_named_range('test_range_single', ws, 'B12') - assert_raises(CellCoordinatesException, ws.cell, 'test_range_single') - c_range_name = ws.range('test_range_single') - c_range_coord = ws.range('B12') - c_cell = ws.cell('B12') - eq_(c_range_coord, c_range_name) - eq_(c_range_coord, c_cell) - - def test_garbage_collect(self): - ws = Worksheet(self.wb) - ws.cell('A1').value = '' - ws.cell('B2').value = '0' - ws.cell('C4').value = 0 - ws.garbage_collect() - eq_(ws.get_cell_collection(), [ws.cell('B2'), ws.cell('C4')]) - - def test_hyperlink_relationships(self): - ws = Worksheet(self.wb) - eq_(len(ws.relationships), 0) - - ws.cell('A1').hyperlink = "http://test.com" - eq_(len(ws.relationships), 1) - eq_("rId1", ws.cell('A1').hyperlink_rel_id) - eq_("rId1", ws.relationships[0].id) - eq_("http://test.com", ws.relationships[0].target) - eq_("External", ws.relationships[0].target_mode) - - ws.cell('A2').hyperlink = "http://test2.com" - eq_(len(ws.relationships), 2) - eq_("rId2", ws.cell('A2').hyperlink_rel_id) - eq_("rId2", ws.relationships[1].id) - eq_("http://test2.com", ws.relationships[1].target) - eq_("External", ws.relationships[1].target_mode) - - @raises(ValueError) - def test_bad_relationship_type(self): - rel = Relationship('bad_type') - - def test_append_list(self): - ws = Worksheet(self.wb) - - ws.append(['This is A1', 'This is B1']) - - eq_('This is A1', ws.cell('A1').value) - eq_('This is B1', ws.cell('B1').value) - - def test_append_dict_letter(self): - ws = Worksheet(self.wb) - - ws.append({'A' : 'This is A1', 'C' : 'This is C1'}) - - eq_('This is A1', ws.cell('A1').value) - eq_('This is C1', ws.cell('C1').value) - - def test_append_dict_index(self): - ws = Worksheet(self.wb) - - ws.append({0 : 'This is A1', 2 : 'This is C1'}) - - eq_('This is A1', ws.cell('A1').value) - eq_('This is C1', ws.cell('C1').value) - - @raises(TypeError) - def test_bad_append(self): - ws = Worksheet(self.wb) - ws.append("test") - - def test_append_2d_list(self): - - ws = Worksheet(self.wb) - - ws.append(['This is A1', 'This is B1']) - ws.append(['This is A2', 'This is B2']) - - vals = ws.range('A1:B2') - - eq_((('This is A1', 'This is B1'), - ('This is A2', 'This is B2'),), flatten(vals)) - - def test_rows(self): - - ws = Worksheet(self.wb) - - ws.cell('A1').value = 'first' - ws.cell('C9').value = 'last' - - rows = ws.rows - - eq_(len(rows), 9) - - eq_(rows[0][0].value, 'first') - eq_(rows[-1][-1].value, 'last') - - def test_cols(self): - - ws = Worksheet(self.wb) - - ws.cell('A1').value = 'first' - ws.cell('C9').value = 'last' - - cols = ws.columns - - eq_(len(cols), 3) - - eq_(cols[0][0].value, 'first') - eq_(cols[-1][-1].value, 'last') - - def test_auto_filter(self): - ws = Worksheet(self.wb) - ws.auto_filter = ws.range('a1:f1') - assert ws.auto_filter == 'A1:F1' - - ws.auto_filter = '' - assert ws.auto_filter is None - - ws.auto_filter = 'c1:g9' - assert ws.auto_filter == 'C1:G9' - - def test_freeze(self): - ws = Worksheet(self.wb) - ws.freeze_panes = ws.cell('b2') - assert ws.freeze_panes == 'B2' - - ws.freeze_panes = '' - assert ws.freeze_panes is None - - ws.freeze_panes = 'c5' - assert ws.freeze_panes == 'C5' - - ws.freeze_panes = ws.cell('A1') - assert ws.freeze_panes is None - diff --git a/tablib/packages/openpyxl/tests/test_write.py b/tablib/packages/openpyxl/tests/test_write.py deleted file mode 100644 index 834e73c..0000000 --- a/tablib/packages/openpyxl/tests/test_write.py +++ /dev/null @@ -1,203 +0,0 @@ -# file openpyxl/tests/test_write.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from __future__ import with_statement -from StringIO import StringIO -import os.path - -# 3rd party imports -from nose.tools import eq_, with_setup, raises - -# package imports -from openpyxl.tests.helper import TMPDIR, DATADIR, \ - assert_equals_file_content, clean_tmpdir, make_tmpdir -from openpyxl.workbook import Workbook -from openpyxl.reader.excel import load_workbook -from openpyxl.writer.excel import save_workbook, save_virtual_workbook, \ - ExcelWriter -from openpyxl.writer.workbook import write_workbook, write_workbook_rels -from openpyxl.writer.worksheet import write_worksheet, write_worksheet_rels -from openpyxl.writer.strings import write_string_table -from openpyxl.writer.styles import StyleWriter - - -@with_setup(setup = make_tmpdir, teardown = clean_tmpdir) -def test_write_empty_workbook(): - wb = Workbook() - dest_filename = os.path.join(TMPDIR, 'empty_book.xlsx') - save_workbook(wb, dest_filename) - assert os.path.isfile(dest_filename) - - -def test_write_virtual_workbook(): - old_wb = Workbook() - saved_wb = save_virtual_workbook(old_wb) - new_wb = load_workbook(StringIO(saved_wb)) - assert new_wb - - -def test_write_workbook_rels(): - wb = Workbook() - content = write_workbook_rels(wb) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'workbook.xml.rels'), content) - - -def test_write_workbook(): - wb = Workbook() - content = write_workbook(wb) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'workbook.xml'), content) - - -def test_write_string_table(): - table = {'hello': 1, 'world': 2, 'nice': 3} - content = write_string_table(table) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sharedStrings.xml'), content) - - -def test_write_worksheet(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F42').value = 'hello' - content = write_worksheet(ws, {'hello': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1.xml'), content) - - -def test_write_hidden_worksheet(): - wb = Workbook() - ws = wb.create_sheet() - ws.sheet_state = ws.SHEETSTATE_HIDDEN - ws.cell('F42').value = 'hello' - content = write_worksheet(ws, {'hello': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1.xml'), content) - - -def test_write_formula(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F1').value = 10 - ws.cell('F2').value = 32 - ws.cell('F3').value = '=F1+F2' - content = write_worksheet(ws, {}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_formula.xml'), content) - - -def test_write_style(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F1').value = '13%' - style_id_by_hash = StyleWriter(wb).get_style_by_hash() - content = write_worksheet(ws, {}, style_id_by_hash) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_style.xml'), content) - - -def test_write_height(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F1').value = 10 - ws.row_dimensions[ws.cell('F1').row].height = 30 - content = write_worksheet(ws, {}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_height.xml'), content) - - -def test_write_hyperlink(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('A1').value = "test" - ws.cell('A1').hyperlink = "http://test.com" - content = write_worksheet(ws, {'test': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_hyperlink.xml'), content) - - -def test_write_hyperlink_rels(): - wb = Workbook() - ws = wb.create_sheet() - eq_(0, len(ws.relationships)) - ws.cell('A1').value = "test" - ws.cell('A1').hyperlink = "http://test.com/" - eq_(1, len(ws.relationships)) - ws.cell('A2').value = "test" - ws.cell('A2').hyperlink = "http://test2.com/" - eq_(2, len(ws.relationships)) - content = write_worksheet_rels(ws, 1) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_hyperlink.xml.rels'), content) - - -def test_hyperlink_value(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('A1').hyperlink = "http://test.com" - eq_("http://test.com", ws.cell('A1').value) - ws.cell('A1').value = "test" - eq_("test", ws.cell('A1').value) - -def test_write_auto_filter(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F42').value = 'hello' - ws.auto_filter = 'A1:F1' - content = write_worksheet(ws, {'hello': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_auto_filter.xml'), content) - -def test_freeze_panes_horiz(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F42').value = 'hello' - ws.freeze_panes = 'A4' - content = write_worksheet(ws, {'hello': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_freeze_panes_horiz.xml'), content) - -def test_freeze_panes_vert(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F42').value = 'hello' - ws.freeze_panes = 'D1' - content = write_worksheet(ws, {'hello': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_freeze_panes_vert.xml'), content) - pass - -def test_freeze_panes_both(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F42').value = 'hello' - ws.freeze_panes = 'D4' - content = write_worksheet(ws, {'hello': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_freeze_panes_both.xml'), content) - - diff --git a/tablib/packages/openpyxl3/tests/__init__.py b/tablib/packages/openpyxl3/tests/__init__.py deleted file mode 100644 index de89032..0000000 --- a/tablib/packages/openpyxl3/tests/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -# file openpyxl/tests/__init__.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni diff --git a/tablib/packages/openpyxl3/tests/helper.py b/tablib/packages/openpyxl3/tests/helper.py deleted file mode 100644 index 9dfbfaf..0000000 --- a/tablib/packages/openpyxl3/tests/helper.py +++ /dev/null @@ -1,94 +0,0 @@ -# file openpyxl/tests/helper.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports - -import os -import os.path -import shutil -import difflib -from io import StringIO -from pprint import pprint -from tempfile import gettempdir - -# package imports -from openpyxl.shared.xmltools import fromstring, ElementTree -from openpyxl.shared.xmltools import pretty_indent - -# constants -DATADIR = os.path.abspath(os.path.join(os.path.dirname(__file__), 'test_data')) -TMPDIR = os.path.join(gettempdir(), 'openpyxl_test_temp') - - -def make_tmpdir(): - try: - os.makedirs(TMPDIR) - except OSError: - pass - - -def clean_tmpdir(): - if os.path.isdir(TMPDIR): - shutil.rmtree(TMPDIR, ignore_errors = True) - - -def assert_equals_file_content(reference_file, fixture, filetype = 'xml'): - if os.path.isfile(fixture): - with open(fixture) as fixture_file: - fixture_content = fixture_file.read() - else: - fixture_content = fixture - - with open(reference_file) as expected_file: - expected_content = expected_file.read() - - if filetype == 'xml': - fixture_content = fromstring(fixture_content) - pretty_indent(fixture_content) - temp = StringIO() - ElementTree(fixture_content).write(temp) - fixture_content = temp.getvalue() - - expected_content = fromstring(expected_content) - pretty_indent(expected_content) - temp = StringIO() - ElementTree(expected_content).write(temp) - expected_content = temp.getvalue() - - fixture_lines = fixture_content.split('\n') - expected_lines = expected_content.split('\n') - differences = list(difflib.unified_diff(expected_lines, fixture_lines)) - if differences: - temp = StringIO() - pprint(differences, stream = temp) - assert False, 'Differences found : %s' % temp.getvalue() - -def get_xml(xml_node): - - io = StringIO() - ElementTree(xml_node).write(io, encoding = 'UTF-8') - ret = io.getvalue() - io.close() - return ret.replace('\n', '') diff --git a/tablib/packages/openpyxl3/tests/test_cell.py b/tablib/packages/openpyxl3/tests/test_cell.py deleted file mode 100644 index 07f0b6f..0000000 --- a/tablib/packages/openpyxl3/tests/test_cell.py +++ /dev/null @@ -1,200 +0,0 @@ -# file openpyxl/tests/test_cell.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from datetime import time, datetime - -# 3rd party imports -from nose.tools import eq_, raises, assert_raises - -# package imports -from openpyxl.worksheet import Worksheet -from openpyxl.workbook import Workbook -from openpyxl.shared.exc import ColumnStringIndexException, \ - CellCoordinatesException, DataTypeException -from openpyxl.cell import column_index_from_string, \ - coordinate_from_string, get_column_letter, Cell, absolute_coordinate - - -def test_coordinates(): - column, row = coordinate_from_string('ZF46') - eq_("ZF", column) - eq_(46, row) - - -@raises(CellCoordinatesException) -def test_invalid_coordinate(): - coordinate_from_string('AAA') - - -def test_absolute(): - eq_('$ZF$51', absolute_coordinate('ZF51')) - -def test_absolute_multiple(): - - eq_('$ZF$51:$ZF$53', absolute_coordinate('ZF51:ZF$53')) - - -def test_column_index(): - eq_(10, column_index_from_string('J')) - eq_(270, column_index_from_string('jJ')) - eq_(7030, column_index_from_string('jjj')) - - -def test_bad_column_index(): - - @raises(ColumnStringIndexException) - def _check(bad_string): - column_index_from_string(bad_string) - - bad_strings = ('JJJJ', '', '$', '1',) - for bad_string in bad_strings: - yield _check, bad_string - - -def test_column_letter_boundries(): - assert_raises(ColumnStringIndexException, get_column_letter, 0) - assert_raises(ColumnStringIndexException, get_column_letter, 18279) - - -def test_column_letter(): - eq_('ZZZ', get_column_letter(18278)) - eq_('JJJ', get_column_letter(7030)) - eq_('AB', get_column_letter(28)) - eq_('AA', get_column_letter(27)) - eq_('Z', get_column_letter(26)) - - -def test_initial_value(): - cell = Cell(None, 'A', 1, value = '17.5') - eq_(cell.TYPE_NUMERIC, cell.data_type) - - -class TestCellValueTypes(): - - @classmethod - def setup_class(cls): - cls.cell = Cell(None, 'A', 1) - - def test_1st(self): - eq_(self.cell.TYPE_NULL, self.cell.data_type) - - def test_null(self): - self.cell.value = None - eq_(self.cell.TYPE_NULL, self.cell.data_type) - - def test_numeric(self): - - def check_numeric(value): - self.cell.value = value - eq_(self.cell.TYPE_NUMERIC, self.cell.data_type) - - values = (42, '4.2', '-42.000', '0', 0, 0.0001, '0.9999', '99E-02') - for value in values: - yield check_numeric, value - - def test_string(self): - self.cell.value = 'hello' - eq_(self.cell.TYPE_STRING, self.cell.data_type) - - def test_formula(self): - self.cell.value = '=42' - eq_(self.cell.TYPE_FORMULA, self.cell.data_type) - - def test_boolean(self): - self.cell.value = True - eq_(self.cell.TYPE_BOOL, self.cell.data_type) - self.cell.value = False - eq_(self.cell.TYPE_BOOL, self.cell.data_type) - - def test_error_codes(self): - - def check_error(): - eq_(self.cell.TYPE_ERROR, self.cell.data_type) - - for error_string in list(self.cell.ERROR_CODES.keys()): - self.cell.value = error_string - yield check_error - - -def test_data_type_check(): - cell = Cell(None, 'A', 1) - cell.bind_value(None) - eq_(Cell.TYPE_NULL, cell._data_type) - - cell.bind_value('.0e000') - eq_(Cell.TYPE_NUMERIC, cell._data_type) - - cell.bind_value('-0.e-0') - eq_(Cell.TYPE_NUMERIC, cell._data_type) - - cell.bind_value('1E') - eq_(Cell.TYPE_STRING, cell._data_type) - -@raises(DataTypeException) -def test_set_bad_type(): - cell = Cell(None, 'A', 1) - cell.set_value_explicit(1, 'q') - - -def test_time(): - - def check_time(raw_value, coerced_value): - cell.value = raw_value - eq_(cell.value, coerced_value) - eq_(cell.TYPE_NUMERIC, cell.data_type) - - wb = Workbook() - ws = Worksheet(wb) - cell = Cell(ws, 'A', 1) - values = (('03:40:16', time(3, 40, 16)), ('03:40', time(3, 40)),) - for raw_value, coerced_value in values: - yield check_time, raw_value, coerced_value - - -def test_date_format_on_non_date(): - wb = Workbook() - ws = Worksheet(wb) - cell = Cell(ws, 'A', 1) - cell.value = datetime.now() - cell.value = 'testme' - eq_('testme', cell.value) - - -def test_repr(): - wb = Workbook() - ws = Worksheet(wb) - cell = Cell(ws, 'A', 1) - eq_(repr(cell), '', 'Got bad repr: %s' % repr(cell)) - -def test_is_date(): - wb = Workbook() - ws = Worksheet(wb) - cell = Cell(ws, 'A', 1) - cell.value = datetime.now() - eq_(cell.is_date(), True) - cell.value = 'testme' - eq_('testme', cell.value) - eq_(cell.is_date(), False) diff --git a/tablib/packages/openpyxl3/tests/test_chart.py b/tablib/packages/openpyxl3/tests/test_chart.py deleted file mode 100644 index 09a7bbc..0000000 --- a/tablib/packages/openpyxl3/tests/test_chart.py +++ /dev/null @@ -1,131 +0,0 @@ -# file openpyxl/tests/test_chart.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -from nose.tools import eq_ - -from openpyxl.tests.helper import get_xml -from openpyxl.shared.xmltools import Element -from openpyxl.writer.charts import ChartWriter -from openpyxl.workbook import Workbook -from openpyxl.chart import BarChart, ScatterChart, Serie, Reference -from openpyxl.style import Color - -class TestChartWriter(object): - - def setUp(self): - - wb = Workbook() - ws = wb.get_active_sheet() - ws.title = 'data' - for i in range(10): - ws.cell(row = i, column = 0).value = i - self.chart = BarChart() - self.chart.title = 'TITLE' - self.chart.add_serie(Serie(Reference(ws, (0, 0), (10, 0)))) - self.chart._series[-1].color = Color.GREEN - self.cw = ChartWriter(self.chart) - self.root = Element('test') - - def test_write_title(self): - self.cw._write_title(self.root) - eq_(get_xml(self.root), 'TITLE') - - def test_write_xaxis(self): - - self.cw._write_axis(self.root, self.chart.x_axis, 'c:catAx') - eq_(get_xml(self.root), '') - - def test_write_yaxis(self): - - self.cw._write_axis(self.root, self.chart.y_axis, 'c:valAx') - eq_(get_xml(self.root), '') - - def test_write_series(self): - - self.cw._write_series(self.root) - eq_(get_xml(self.root), 'data!$A$1:$A$11General0123456789None') - - def test_write_legend(self): - - self.cw._write_legend(self.root) - eq_(get_xml(self.root), '') - - def test_write_print_settings(self): - - self.cw._write_print_settings(self.root) - eq_(get_xml(self.root), '') - - def test_write_chart(self): - - self.cw._write_chart(self.root) - eq_(get_xml(self.root), 'TITLEdata!$A$1:$A$11General0123456789None') - - -class TestScatterChartWriter(object): - - def setUp(self): - - wb = Workbook() - ws = wb.get_active_sheet() - ws.title = 'data' - for i in range(10): - ws.cell(row = i, column = 0).value = i - ws.cell(row = i, column = 1).value = i - self.scatterchart = ScatterChart() - self.scatterchart.add_serie(Serie(Reference(ws, (0, 0), (10, 0)), - xvalues = Reference(ws, (0, 1), (10, 1)))) - self.cw = ChartWriter(self.scatterchart) - self.root = Element('test') - - def test_write_xaxis(self): - - self.cw._write_axis(self.root, self.scatterchart.x_axis, 'c:valAx') - eq_(get_xml(self.root), '') - - - def test_write_yaxis(self): - - self.cw._write_axis(self.root, self.scatterchart.y_axis, 'c:valAx') - eq_(get_xml(self.root), '') - - def test_write_series(self): - - self.cw._write_series(self.root) - eq_(get_xml(self.root), 'data!$B$1:$B$11General0123456789Nonedata!$A$1:$A$11General0123456789None') - - def test_write_legend(self): - - self.cw._write_legend(self.root) - eq_(get_xml(self.root), '') - - def test_write_print_settings(self): - - self.cw._write_print_settings(self.root) - eq_(get_xml(self.root), '') - - def test_write_chart(self): - - self.cw._write_chart(self.root) - eq_(get_xml(self.root), 'data!$B$1:$B$11General0123456789Nonedata!$A$1:$A$11General0123456789None') diff --git a/tablib/packages/openpyxl3/tests/test_data/genuine/empty-no-string.xlsx b/tablib/packages/openpyxl3/tests/test_data/genuine/empty-no-string.xlsx deleted file mode 100644 index 39490ac32434e02546ef2a888f12dedf4f5b58f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7842 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 diff --git a/tablib/packages/openpyxl3/tests/test_data/genuine/empty-with-styles.xlsx b/tablib/packages/openpyxl3/tests/test_data/genuine/empty-with-styles.xlsx deleted file mode 100644 index 250e9b4365699542af00bce79d17024ea1ae1131..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7511 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 diff --git a/tablib/packages/openpyxl3/tests/test_data/genuine/empty.xlsx b/tablib/packages/openpyxl3/tests/test_data/genuine/empty.xlsx deleted file mode 100644 index 3749d02093e170795608aa9c00a2b8e4e2be3a8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11005 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

j@~^R=nw%o zamN={t&gS>+}A@l(K9uDi*fVzemvj`*o||dR~OhH>^%>&+o01&!gZ+AQ6k`Qz;wCm zd?T5I9xY-;fP&~)q~XyP;ZlP~9b|A-P~N4g|6!YvpFZ8VN`?KjEI%eAkB2Z#+-d!) zB=;&iE;rJykmQq{HY4i;yc?*%{KP~9l?Dr;;Zg22!z;g)(QXk{Qvi6vtO8C#V*Vi`Co^MfeYfaNY2Et<_W$MmHV>zIqV9rwI8?# zkrVDuEtiQ6%a=XFE;44E0`C;2u?Qt-=)+Elniz_gj6l8ccKWXM^UO5DvMer3y@9p9 z&dS{v=iPu)r_mFvE?QH~{aLLyE)F-aol~rpv-{4T^_kfadMj{p6%69(-yb9@5+)e@ z4mMa1ZR(XOT7E#@f2T^*%91ah02NLbQGhLmc501iyEeg>*4PUeIn~8m=B`+DM31U$-^aac zm5aUWgpJVg7}5u)yPb*C9#Td|(>11;!1eBw6`#xPS<(WbY@hS9Q`{{#jo!zb9-5B3 zJ9i#5Rx|R6$d@^Hmj^?URf6~TEdx|1*8Y;>KVl`s^0hXf5uZGBVhgdSqM@*F$L>K> zF@-_#cY)u{Mj&3T;4v|7La~o_eItBI3-vZ<$<>HB$e_p!ew$E#6L7_CO3VaAwi7*n zq3*^V8R+oM;B_yto|k%mOQhjIeVYcP8XF>T;BqOJ+u(?eh@L1mm9}vEM`A3-;gQnb zob$Vz02x809TIV3Ss6LjLJFE#oJbdQXrHu{U8G7EtB9njIboNvHyRp|wNx~K2ide;AM75xx?2KG zPX+zeb(h_irONX$TpZeU^p6gJG@>7?-t6Lrx zEW@WUt}$SOB69(H6^^?Xt5r@%13-RS{t3X@~0~0k( z z)hcip-|!HE)W!iuf>(Eu z1oy?JVsL!yjW6Hs=Fxp;GdZBUWs(gRWZMF%B79=On zvXV&iHeL&viro!MK{jH@@w?A$QM@UyIIdJt0+^$gdqtY7Nt-XkCiKq{t9=od%Rt~8fHvcBx znm?8)*2NAwI)S*Zt58~FvZx}VL9;MJ=Y1c;@6|4~I`B(ki{a({AeB9OxZdZ4Ro7Qt!sN|TtOsV|yz7wVL`)xK7jee=< z_^r$G6UZ%R1xG$Y|9PhI%Wq|>EZP(>qj~F^KX#pM0O4b;7N0?=C6+A#D>xTqZmmYp z%71h(gcSOA1WKFLdzW59q~be{X?sz(2)>Z^0H^Y@CXGl`Ak#B|J38{dkIh*XwD#G% z5z+ziq|bP=n51sth%*0tT)jwEpUKVisIx{NCity1{O= zhU7XOIv8Fx`JPRO&f(p;0Qi>j_^uX^p?VIzAM;s@qXTQZku$-&vuJHl@oaT<yyy&E|SauE}W9$LS~rgCB6 zoLjCVk4Sufx?J*cHn$hzL)5km(8BO;zRSLQLWrBRoo4jI249jqLPkM%zS40M4SxVd zXf@}D$pxp^cS6mBQ!Gn@{Be>hc}AyW?Ur)}8(lsRL-VI;~Ue`+Y41Gvo&NpPt?Bd)__zRmL}~#Ep&wI#IGs~UW8Ds zvx7d2dN@CV`(5iRPyPMhfOFv{U`s&<*VK$`4HX@1?Hpek+Bz8jY(823e@kiLUIlo? zPXK$Eu|kevR`NC-K-AWuO(2&Yqc1o0!*@9MTs`eYX?Txj2B-#uRc zcoePOefzqL22X3|g`~ZhA|PTmUv;0TjbVF@5uw}=SY7rywg5_Q4_O{tZW)YrNJH(LHCh_OU4+~P??#yP?*&e!P{4hmqs-Xv<9g(;?6|cmc zL=cuKzR##K3fm!JODT@6b4Q%MoAr;o91nht&uzSmvf#?wM_dbY+`HV?Xl(oS&}D+j z+VIC6i;ot+V53@(GDqXOUxcjPXJqC#83tIn$1zqdbI4r-dSRdzu= z!`kvSAc`*}@24YHFyp1nh7ixVJu}7n{WL=vLfp3rtj1Ju^$qQ>YSg#0`>z;(%J7dZ zGoi}{T!suehPp%vI10~VzzY$6%~FWyq236v_k3f_i$g6FA_g~sqO>cd4}D;2Al=F>8Bjai;%dJM&TOX|WgIZMTNl7J_kGU{ntI8Q=A3;2g|~urO4d z5&|yUTXN2Q%JAj@%|4!BVsRj;MX(c6Xm85<3AK9a`Th1PZHr~Yl!@%Up`!(>&3qlS8=F zu7MUC!tpk7Gz}S->>#2L_L9-0xuHEB@5bji=|Ank7|90f1VDsAs!V+)!@kuxQtkAO zt?J(t=;;(#J)j3@SK|+x=NpdD+f}K@uS;rmfco!sFT%yN7BXhaxK!ztm*|7SjlL}F zB3pYc(YhA3SIxL?`1BQ1U+LrzGZf3$RH^y}^!tXd5Uu<7<5{H`snEIlt>?QF@3@?} zyO}xEWENk1M|3?6-@Gi`Bn5ZdA6X~}NJenR>Guok{@uI(KL2K!oubU&3I4wP=ik7e z=M1n3{be!GQ{dm%Qv4Md3ZCZw=am&td7jqG|76++uN{0+J%0**T5kOlyo>O^;C~cf zpRzoyUH!?j4$gS}s|kN)`Blk!%JMWZ{U?hI#&21ErKz8?JWVYA$ua@XGyX2k_>|#k z!tPIo7VJM5{x^O16#6tt^CuJ%oN5RE`O}omQ-Y@<^PdFuB)|OzzXIr|EYnW{qCZ)P z$$zo@Ej)UP{(C_3Cl&x$1f%~Eo;-#B-GlrUZch0Z_`m##q6`dJ?EnA@_!kQ{m^U;( Gul@&`W-g-u diff --git a/tablib/packages/openpyxl3/tests/test_data/genuine/merge_range.xlsx b/tablib/packages/openpyxl3/tests/test_data/genuine/merge_range.xlsx deleted file mode 100644 index 9452e362b623108660651ae51b199adb3d059133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8742 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 diff --git a/tablib/packages/openpyxl3/tests/test_data/reader/app-multi-titles.xml b/tablib/packages/openpyxl3/tests/test_data/reader/app-multi-titles.xml deleted file mode 100644 index b32ec40..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/reader/app-multi-titles.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - 0 - false - - - - Worksheets - - - 7 - - - Named Ranges - - - 7 - - - - - - ToC - ContractYear - ContractTier - Demand - LinearizedFunction - Market - Transmission - Excel_BuiltIn_Print_Area_10 - Excel_BuiltIn_Print_Area_12 - Excel_BuiltIn_Print_Area_13 - TS_discount_rate!Excel_BuiltIn_Print_Area_26 - Excel_BuiltIn_Print_Area_27 - Excel_BuiltIn_Print_Area_28 - Excel_BuiltIn_Print_Area_29 - - - false - false - false - 12.0000 - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/reader/empty-workbook-styles.xml b/tablib/packages/openpyxl3/tests/test_data/reader/empty-workbook-styles.xml deleted file mode 100644 index 4819c45..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/reader/empty-workbook-styles.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/reader/merged-ranges.xml b/tablib/packages/openpyxl3/tests/test_data/reader/merged-ranges.xml deleted file mode 100644 index 0cb17cf..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/reader/merged-ranges.xml +++ /dev/null @@ -1,2 +0,0 @@ - -12340123464646546464610 \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/reader/null_archive.xlsx b/tablib/packages/openpyxl3/tests/test_data/reader/null_archive.xlsx deleted file mode 100644 index 967263ab8a68d2f5626d2ba7b24575fa340bf924..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmWIWW@h1H0D+T5%64D|l;8u>d8Iiy@oAYksd^PT#T5bGj7%a7xK)ERGBPNDC?G)B S%gP24WduSSAgu%9FaQ96VG&#a diff --git a/tablib/packages/openpyxl3/tests/test_data/reader/null_file.xlsx b/tablib/packages/openpyxl3/tests/test_data/reader/null_file.xlsx deleted file mode 100644 index e69de29..0000000 diff --git a/tablib/packages/openpyxl3/tests/test_data/reader/shared-strings-rich.xml b/tablib/packages/openpyxl3/tests/test_data/reader/shared-strings-rich.xml deleted file mode 100644 index b3b31f6..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/reader/shared-strings-rich.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - Welcome - - - - to the best - - - - - - - - - shop in - - - - - - - - - - town - - - - let's play - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/reader/sharedStrings-emptystring.xml b/tablib/packages/openpyxl3/tests/test_data/reader/sharedStrings-emptystring.xml deleted file mode 100644 index 1dd7caf..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/reader/sharedStrings-emptystring.xml +++ /dev/null @@ -1,3 +0,0 @@ - -Testing empty cell - diff --git a/tablib/packages/openpyxl3/tests/test_data/reader/sharedStrings.xml b/tablib/packages/openpyxl3/tests/test_data/reader/sharedStrings.xml deleted file mode 100644 index aef87a0..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/reader/sharedStrings.xml +++ /dev/null @@ -1,2 +0,0 @@ - -This is cell A1 in Sheet 1This is cell G5 \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/reader/sheet2.xml b/tablib/packages/openpyxl3/tests/test_data/reader/sheet2.xml deleted file mode 100644 index 0176e57..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/reader/sheet2.xml +++ /dev/null @@ -1,2 +0,0 @@ - -10.0120.0230.0340.04510.0560.0677.0000000000000007E-280.0890.09100.1110.11120.12130.13140.14000000000000001150.15160.16170.17180.18190.19200.2210.21220.22230.23240.24250.25260.26270.27280.28000000000000003290.28999999999999998300.3 \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/reader/simple-styles.xml b/tablib/packages/openpyxl3/tests/test_data/reader/simple-styles.xml deleted file mode 100644 index 2f3b255..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/reader/simple-styles.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/reader/workbook.xml b/tablib/packages/openpyxl3/tests/test_data/reader/workbook.xml deleted file mode 100644 index 2697d4c..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/reader/workbook.xml +++ /dev/null @@ -1,2 +0,0 @@ - -'My Sheeet'!$D$8 \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/.rels b/tablib/packages/openpyxl3/tests/test_data/writer/expected/.rels deleted file mode 100644 index 450d174..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/.rels +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/[Content_Types].xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/[Content_Types].xml deleted file mode 100644 index 39285bb..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/[Content_Types].xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/app.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/app.xml deleted file mode 100644 index a7cccf7..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/app.xml +++ /dev/null @@ -1,2 +0,0 @@ - -Microsoft Excel0falsefalsefalsefalse12.0000Worksheets3SheetSheet1Sheet2 \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/core.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/core.xml deleted file mode 100644 index 4a99a55..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/core.xml +++ /dev/null @@ -1,2 +0,0 @@ - -TEST_USERSOMEBODY2010-04-01T20:30:00Z2010-04-05T14:05:30Z \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/font.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/font.xml deleted file mode 100644 index dabe15d..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/font.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sharedStrings.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/sharedStrings.xml deleted file mode 100644 index ff7ec02..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sharedStrings.xml +++ /dev/null @@ -1,2 +0,0 @@ - -helloworldnice \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1.xml deleted file mode 100644 index ab96c9f..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - 0 - - - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_auto_filter.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_auto_filter.xml deleted file mode 100644 index b4178b8..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_auto_filter.xml +++ /dev/null @@ -1 +0,0 @@ -0 \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_formula.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_formula.xml deleted file mode 100644 index ed98da2..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_formula.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - 10 - - - - - 32 - - - - - F1+F2 - - - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_freeze_panes_both.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_freeze_panes_both.xml deleted file mode 100644 index a83d2a0..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_freeze_panes_both.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 0 - - - - diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_freeze_panes_horiz.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_freeze_panes_horiz.xml deleted file mode 100644 index f5aa23f..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_freeze_panes_horiz.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - 0 - - - - diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_freeze_panes_vert.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_freeze_panes_vert.xml deleted file mode 100644 index 12ca034..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_freeze_panes_vert.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - 0 - - - - diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_height.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_height.xml deleted file mode 100644 index 428bbfa..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_height.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - 10 - - - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_hyperlink.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_hyperlink.xml deleted file mode 100644 index 70e4eb4..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_hyperlink.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_hyperlink.xml.rels b/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_hyperlink.xml.rels deleted file mode 100644 index 843c040..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_hyperlink.xml.rels +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_style.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_style.xml deleted file mode 100644 index 27af47e..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/sheet1_style.xml +++ /dev/null @@ -1 +0,0 @@ -0.13 \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/simple-styles.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/simple-styles.xml deleted file mode 100644 index 2f3b255..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/simple-styles.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/styles.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/styles.xml deleted file mode 100644 index 6a1ffd1..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/styles.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/theme1.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/theme1.xml deleted file mode 100644 index 012e249..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/theme1.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/workbook.xml b/tablib/packages/openpyxl3/tests/test_data/writer/expected/workbook.xml deleted file mode 100644 index 0e397a7..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/workbook.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_data/writer/expected/workbook.xml.rels b/tablib/packages/openpyxl3/tests/test_data/writer/expected/workbook.xml.rels deleted file mode 100644 index c41181c..0000000 --- a/tablib/packages/openpyxl3/tests/test_data/writer/expected/workbook.xml.rels +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/tablib/packages/openpyxl3/tests/test_dump.py b/tablib/packages/openpyxl3/tests/test_dump.py deleted file mode 100644 index 714cfb3..0000000 --- a/tablib/packages/openpyxl3/tests/test_dump.py +++ /dev/null @@ -1,109 +0,0 @@ - -# file openpyxl/tests/test_dump.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -from datetime import time, datetime - -# 3rd party imports -from nose.tools import eq_, raises, assert_raises - -from openpyxl.workbook import Workbook -from openpyxl.cell import get_column_letter - -from openpyxl.reader.excel import load_workbook - -from openpyxl.writer.strings import StringTableBuilder - -from tempfile import NamedTemporaryFile -import os -import shutil - -def test_dump_sheet(): - - test_file = NamedTemporaryFile(prefix='openpyxl.', suffix='.xlsx', delete=False) - test_file.close() - test_filename = test_file.name - - wb = Workbook(optimized_write = True) - - ws = wb.create_sheet() - - letters = [get_column_letter(x+1) for x in range(20)] - - expected_rows = [] - - for row in range(20): - - expected_rows.append(['%s%d' % (letter, row+1) for letter in letters]) - - for row in range(20): - - expected_rows.append([(row+1) for letter in letters]) - - for row in range(10): - - expected_rows.append([datetime(2010, ((x % 12)+1), row+1) for x in range(len(letters))]) - - for row in range(20): - - expected_rows.append(['=%s%d' % (letter, row+1) for letter in letters]) - - for row in expected_rows: - - ws.append(row) - - wb.save(test_filename) - - wb2 = load_workbook(test_filename, True) - - ws = wb2.worksheets[0] - - - for ex_row, ws_row in zip(expected_rows[:-20], ws.iter_rows()): - - for ex_cell, ws_cell in zip(ex_row, ws_row): - - eq_(ex_cell, ws_cell.internal_value) - - os.remove(test_filename) - - -def test_table_builder(): - - sb = StringTableBuilder() - - result = {'a':0, 'b':1, 'c':2, 'd':3} - - for letter in sorted(result.keys()): - - for x in range(5): - - sb.add(letter) - - table = dict(sb.get_table()) - - for key,idx in result.items(): - eq_(idx, table[key]) diff --git a/tablib/packages/openpyxl3/tests/test_iter.py b/tablib/packages/openpyxl3/tests/test_iter.py deleted file mode 100644 index 899f8d7..0000000 --- a/tablib/packages/openpyxl3/tests/test_iter.py +++ /dev/null @@ -1,112 +0,0 @@ -# file openpyxl/tests/test_iter.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -from nose.tools import eq_, raises, assert_raises -import os.path as osp -from openpyxl.tests.helper import DATADIR -from openpyxl.reader.iter_worksheet import get_range_boundaries -from openpyxl.reader.excel import load_workbook -import datetime - -class TestWorksheet(object): - - workbook_name = osp.join(DATADIR, 'genuine', 'empty.xlsx') - -class TestText(TestWorksheet): - sheet_name = 'Sheet1 - Text' - - expected = [['This is cell A1 in Sheet 1', None, None, None, None, None, None], - [None, None, None, None, None, None, None], - [None, None, None, None, None, None, None], - [None, None, None, None, None, None, None], - [None, None, None, None, None, None, 'This is cell G5'], ] - - def test_read_fast_integrated(self): - - wb = load_workbook(filename = self.workbook_name, use_iterators = True) - ws = wb.get_sheet_by_name(name = self.sheet_name) - - for row, expected_row in zip(ws.iter_rows(), self.expected): - - row_values = [x.internal_value for x in row] - - eq_(row_values, expected_row) - - - def test_get_boundaries_range(self): - - eq_(get_range_boundaries('C1:C4'), (3, 1, 3, 4)) - - def test_get_boundaries_one(self): - - - eq_(get_range_boundaries('C1'), (3, 1, 4, 1)) - - def test_read_single_cell_range(self): - - wb = load_workbook(filename = self.workbook_name, use_iterators = True) - ws = wb.get_sheet_by_name(name = self.sheet_name) - - eq_('This is cell A1 in Sheet 1', list(ws.iter_rows('A1'))[0][0].internal_value) - -class TestIntegers(TestWorksheet): - - sheet_name = 'Sheet2 - Numbers' - - expected = [[x + 1] for x in range(30)] - - query_range = 'D1:E30' - - def test_read_fast_integrated(self): - - wb = load_workbook(filename = self.workbook_name, use_iterators = True) - ws = wb.get_sheet_by_name(name = self.sheet_name) - - for row, expected_row in zip(ws.iter_rows(self.query_range), self.expected): - - row_values = [x.internal_value for x in row] - - eq_(row_values, expected_row) - -class TestFloats(TestWorksheet): - - sheet_name = 'Sheet2 - Numbers' - query_range = 'K1:L30' - expected = expected = [[(x + 1) / 100.0] for x in range(30)] - -class TestDates(TestWorksheet): - - sheet_name = 'Sheet4 - Dates' - - def test_read_single_cell_date(self): - - wb = load_workbook(filename = self.workbook_name, use_iterators = True) - ws = wb.get_sheet_by_name(name = self.sheet_name) - - eq_(datetime.datetime(1973, 5, 20), list(ws.iter_rows('A1'))[0][0].internal_value) - eq_(datetime.datetime(1973, 5, 20, 9, 15, 2), list(ws.iter_rows('C1'))[0][0].internal_value) - - - diff --git a/tablib/packages/openpyxl3/tests/test_meta.py b/tablib/packages/openpyxl3/tests/test_meta.py deleted file mode 100644 index 06051ad..0000000 --- a/tablib/packages/openpyxl3/tests/test_meta.py +++ /dev/null @@ -1,50 +0,0 @@ -# file openpyxl/tests/test_meta.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports - -import os.path - -# package imports -from openpyxl.tests.helper import DATADIR, assert_equals_file_content -from openpyxl.writer.workbook import write_content_types, write_root_rels -from openpyxl.workbook import Workbook - - -def test_write_content_types(): - wb = Workbook() - wb.create_sheet() - wb.create_sheet() - content = write_content_types(wb) - reference_file = os.path.join(DATADIR, 'writer', 'expected', - '[Content_Types].xml') - assert_equals_file_content(reference_file, content) - - -def test_write_root_rels(): - wb = Workbook() - content = write_root_rels(wb) - reference_file = os.path.join(DATADIR, 'writer', 'expected', '.rels') - assert_equals_file_content(reference_file, content) diff --git a/tablib/packages/openpyxl3/tests/test_named_range.py b/tablib/packages/openpyxl3/tests/test_named_range.py deleted file mode 100644 index c6d9d58..0000000 --- a/tablib/packages/openpyxl3/tests/test_named_range.py +++ /dev/null @@ -1,102 +0,0 @@ -# file openpyxl/tests/test_named_range.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports - -import os.path - -# 3rd-party imports -from nose.tools import eq_, assert_raises - -# package imports -from openpyxl.tests.helper import DATADIR -from openpyxl.namedrange import split_named_range -from openpyxl.reader.workbook import read_named_ranges -from openpyxl.shared.exc import NamedRangeException -from openpyxl.reader.excel import load_workbook - - -def test_split(): - eq_([('My Sheet', '$D$8'), ], split_named_range("'My Sheet'!$D$8")) - - -def test_split_no_quotes(): - eq_([('HYPOTHESES', '$B$3:$L$3'), ], split_named_range('HYPOTHESES!$B$3:$L$3')) - - -def test_bad_range_name(): - assert_raises(NamedRangeException, split_named_range, 'HYPOTHESES$B$3') - - -def test_read_named_ranges(): - - class DummyWs(object): - title = 'My Sheeet' - - def __str__(self): - return self.title - - class DummyWB(object): - - def get_sheet_by_name(self, name): - return DummyWs() - - with open(os.path.join(DATADIR, 'reader', 'workbook.xml')) as handle: - content = handle.read() - named_ranges = read_named_ranges(content, DummyWB()) - eq_(["My Sheeet!$D$8"], [str(range) for range in named_ranges]) - -def test_oddly_shaped_named_ranges(): - - ranges_counts = ((4, 'TEST_RANGE'), - (3, 'TRAP_1'), - (13, 'TRAP_2')) - - def check_ranges(ws, count, range_name): - - eq_(count, len(ws.range(range_name))) - - wb = load_workbook(os.path.join(DATADIR, 'genuine', 'merge_range.xlsx'), - use_iterators = False) - - ws = wb.worksheets[0] - - for count, range_name in ranges_counts: - - yield check_ranges, ws, count, range_name - - -def test_merged_cells_named_range(): - - wb = load_workbook(os.path.join(DATADIR, 'genuine', 'merge_range.xlsx'), - use_iterators = False) - - ws = wb.worksheets[0] - - cell = ws.range('TRAP_3') - - eq_('B15', cell.get_coordinate()) - - eq_(10, cell.value) diff --git a/tablib/packages/openpyxl3/tests/test_number_format.py b/tablib/packages/openpyxl3/tests/test_number_format.py deleted file mode 100644 index 54b0b88..0000000 --- a/tablib/packages/openpyxl3/tests/test_number_format.py +++ /dev/null @@ -1,142 +0,0 @@ -# file openpyxl/tests/test_number_format.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports - -from datetime import datetime, date - -# 3rd party imports -from nose.tools import eq_, assert_almost_equal, assert_raises - -# package imports -from openpyxl.workbook import Workbook -from openpyxl.worksheet import Worksheet -from openpyxl.cell import Cell -from openpyxl.style import NumberFormat -from openpyxl.shared.date_time import SharedDate - - -class TestNumberFormat(object): - - @classmethod - def setup_class(cls): - cls.workbook = Workbook() - cls.worksheet = Worksheet(cls.workbook, 'Test') - cls.sd = SharedDate() - - def test_convert_date_to_julian(self): - eq_(40167, self.sd.to_julian(2009, 12, 20)) - - def test_convert_date_from_julian(self): - - def test_date_equal(julian, datetime): - - eq_(self.sd.from_julian(julian), datetime) - - date_pairs= ( - (40167, datetime(2009, 12, 20)), - (21980, datetime(1960, 0o3, 0o5)), - ) - - for count, dt in date_pairs: - yield test_date_equal, count, dt - - def test_convert_datetime_to_julian(self): - eq_(40167, self.sd.datetime_to_julian(datetime(2009, 12, 20))) - - def test_insert_float(self): - self.worksheet.cell('A1').value = 3.14 - eq_(Cell.TYPE_NUMERIC, self.worksheet.cell('A1')._data_type) - - def test_insert_percentage(self): - self.worksheet.cell('A1').value = '3.14%' - eq_(Cell.TYPE_NUMERIC, self.worksheet.cell('A1')._data_type) - assert_almost_equal(0.0314, self.worksheet.cell('A1').value) - - def test_insert_datetime(self): - self.worksheet.cell('A1').value = date.today() - eq_(Cell.TYPE_NUMERIC, self.worksheet.cell('A1')._data_type) - - def test_insert_date(self): - self.worksheet.cell('A1').value = datetime.now() - eq_(Cell.TYPE_NUMERIC, self.worksheet.cell('A1')._data_type) - - def test_internal_date(self): - dt = datetime(2010, 7, 13, 6, 37, 41) - self.worksheet.cell('A3').value = dt - eq_(40372.27616898148, self.worksheet.cell('A3')._value) - - def test_datetime_interpretation(self): - dt = datetime(2010, 7, 13, 6, 37, 41) - self.worksheet.cell('A3').value = dt - eq_(dt, self.worksheet.cell('A3').value) - - def test_date_interpretation(self): - dt = date(2010, 7, 13) - self.worksheet.cell('A3').value = dt - eq_(datetime(2010, 7, 13, 0, 0), self.worksheet.cell('A3').value) - - def test_number_format_style(self): - self.worksheet.cell('A1').value = '12.6%' - eq_(NumberFormat.FORMAT_PERCENTAGE, \ - self.worksheet.cell('A1').style.number_format.format_code) - - def test_date_format_on_non_date(self): - cell = self.worksheet.cell('A1') - - def check_date_pair(count, date_string): - cell.value = datetime.strptime(date_string, '%Y-%m-%d') - eq_(count, cell._value) - - date_pairs = ( - (15, '1900-01-15'), - (59, '1900-02-28'), - (61, '1900-03-01'), - (367, '1901-01-01'), - (2958465, '9999-12-31'), ) - for count, date_string in date_pairs: - yield check_date_pair, count, date_string - - def test_1900_leap_year(self): - assert_raises(ValueError, self.sd.from_julian, 60) - assert_raises(ValueError, self.sd.to_julian, 1900, 2, 29) - - def test_bad_date(self): - - def check_bad_date(year, month, day): - assert_raises(ValueError, self.sd.to_julian, year, month, day) - - bad_dates = ((1776, 0o7, 0o4), (1899, 12, 31), ) - for year, month, day in bad_dates: - yield check_bad_date, year, month, day - - def test_bad_julian_date(self): - assert_raises(ValueError, self.sd.from_julian, -1) - - def test_mac_date(self): - self.sd.excel_base_date = self.sd.CALENDAR_MAC_1904 - assert_raises(NotImplementedError, self.sd.to_julian, 2000, 1, 1) - assert_raises(NotImplementedError, self.sd.from_julian, 1) - self.sd.excel_base_date = self.sd.CALENDAR_WINDOWS_1900 diff --git a/tablib/packages/openpyxl3/tests/test_password_hash.py b/tablib/packages/openpyxl3/tests/test_password_hash.py deleted file mode 100644 index fd2fddf..0000000 --- a/tablib/packages/openpyxl3/tests/test_password_hash.py +++ /dev/null @@ -1,41 +0,0 @@ -# file openpyxl/tests/test_password_hash.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# 3rd party imports -from nose.tools import eq_ - -# package imports -from openpyxl.shared.password_hasher import hash_password -from openpyxl.worksheet import SheetProtection - - -def test_hasher(): - eq_('CBEB', hash_password('test')) - - -def test_sheet_protection(): - protection = SheetProtection() - protection.password = 'test' - eq_('CBEB', protection.password) diff --git a/tablib/packages/openpyxl3/tests/test_props.py b/tablib/packages/openpyxl3/tests/test_props.py deleted file mode 100644 index 07d447c..0000000 --- a/tablib/packages/openpyxl3/tests/test_props.py +++ /dev/null @@ -1,124 +0,0 @@ -# coding=utf-8 -# file openpyxl/tests/test_props.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports - -from zipfile import ZipFile, ZIP_DEFLATED -from datetime import datetime -import os.path - -# 3rd party imports -from nose.tools import eq_ - -# package imports -from openpyxl.tests.helper import DATADIR, TMPDIR, make_tmpdir, clean_tmpdir, \ - assert_equals_file_content -from openpyxl.reader.workbook import read_properties_core, \ - read_sheets_titles, get_number_of_parts -from openpyxl.writer.workbook import write_properties_core, \ - write_properties_app -from openpyxl.shared.ooxml import ARC_APP, ARC_CORE -from openpyxl.workbook import DocumentProperties, Workbook - - -class TestReaderProps(object): - - @classmethod - def setup_class(cls): - cls.genuine_filename = os.path.join(DATADIR, 'genuine', 'empty.xlsx') - cls.archive = ZipFile(cls.genuine_filename, 'r', ZIP_DEFLATED) - - @classmethod - def teardown_class(cls): - cls.archive.close() - - def test_read_properties_core(self): - content = self.archive.read(ARC_CORE) - prop = read_properties_core(content) - eq_(prop.creator, '*.*') - eq_(prop.last_modified_by, 'Aurélien Campéas') - eq_(prop.created, datetime(2010, 4, 9, 20, 43, 12)) - eq_(prop.modified, datetime(2011, 2, 9, 13, 49, 32)) - - def test_read_sheets_titles(self): - content = self.archive.read(ARC_APP) - sheet_titles = read_sheets_titles(content) - eq_(sheet_titles, \ - ['Sheet1 - Text', 'Sheet2 - Numbers', 'Sheet3 - Formulas', 'Sheet4 - Dates']) - - -class TestReaderPropsMixed(object): - - @classmethod - def setup_class(cls): - reference_filename = \ - os.path.join(DATADIR, 'reader', 'app-multi-titles.xml') - with open(reference_filename) as handle: - cls.content = handle.read() - - def test_read_sheet_titles_mixed(self): - sheet_titles = read_sheets_titles(self.content) - eq_(sheet_titles, - ['ToC', 'ContractYear', 'ContractTier', 'Demand', - 'LinearizedFunction', 'Market', 'Transmission']) - - def test_number_of_parts(self): - parts_number = get_number_of_parts(self.content) - eq_(parts_number, - ({'Worksheets': 7, 'Named Ranges': 7}, - ['Worksheets', 'Named Ranges'])) - - -class TestWriteProps(object): - - @classmethod - def setup_class(cls): - make_tmpdir() - cls.tmp_filename = os.path.join(TMPDIR, 'test.xlsx') - cls.prop = DocumentProperties() - - @classmethod - def teardown_class(cls): - clean_tmpdir() - - def test_write_properties_core(self): - self.prop.creator = 'TEST_USER' - self.prop.last_modified_by = 'SOMEBODY' - self.prop.created = datetime(2010, 4, 1, 20, 30, 00) - self.prop.modified = datetime(2010, 4, 5, 14, 5, 30) - content = write_properties_core(self.prop) - assert_equals_file_content( - os.path.join(DATADIR, 'writer', 'expected', 'core.xml'), - content) - - def test_write_properties_app(self): - wb = Workbook() - wb.create_sheet() - wb.create_sheet() - content = write_properties_app(wb) - assert_equals_file_content( - os.path.join(DATADIR, 'writer', 'expected', 'app.xml'), - content) diff --git a/tablib/packages/openpyxl3/tests/test_read.py b/tablib/packages/openpyxl3/tests/test_read.py deleted file mode 100644 index 1240164..0000000 --- a/tablib/packages/openpyxl3/tests/test_read.py +++ /dev/null @@ -1,134 +0,0 @@ -# file openpyxl/tests/test_read.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports - -import os.path - -# 3rd party imports -from nose.tools import eq_, raises - -# package imports -from openpyxl.tests.helper import DATADIR -from openpyxl.worksheet import Worksheet -from openpyxl.workbook import Workbook -from openpyxl.style import NumberFormat, Style -from openpyxl.reader.worksheet import read_worksheet, read_dimension -from openpyxl.reader.excel import load_workbook -from openpyxl.shared.exc import InvalidFileException - - -def test_read_standalone_worksheet(): - - class DummyWb(object): - - def get_sheet_by_name(self, value): - return None - - path = os.path.join(DATADIR, 'reader', 'sheet2.xml') - with open(path) as handle: - ws = read_worksheet(handle.read(), DummyWb(), - 'Sheet 2', {1: 'hello'}, {1: Style()}) - assert isinstance(ws, Worksheet) - eq_(ws.cell('G5').value, 'hello') - eq_(ws.cell('D30').value, 30) - eq_(ws.cell('K9').value, 0.09) - - -def test_read_standard_workbook(): - path = os.path.join(DATADIR, 'genuine', 'empty.xlsx') - wb = load_workbook(path) - assert isinstance(wb, Workbook) - -def test_read_standard_workbook_from_fileobj(): - path = os.path.join(DATADIR, 'genuine', 'empty.xlsx') - fo = open(path, mode = 'rb') - wb = load_workbook(fo) - assert isinstance(wb, Workbook) - -def test_read_worksheet(): - path = os.path.join(DATADIR, 'genuine', 'empty.xlsx') - wb = load_workbook(path) - sheet2 = wb.get_sheet_by_name('Sheet2 - Numbers') - assert isinstance(sheet2, Worksheet) - eq_('This is cell G5', sheet2.cell('G5').value) - eq_(18, sheet2.cell('D18').value) - - -def test_read_nostring_workbook(): - genuine_wb = os.path.join(DATADIR, 'genuine', 'empty-no-string.xlsx') - wb = load_workbook(genuine_wb) - assert isinstance(wb, Workbook) - -@raises(InvalidFileException) -def test_read_empty_file(): - - null_file = os.path.join(DATADIR, 'reader', 'null_file.xlsx') - wb = load_workbook(null_file) - -@raises(InvalidFileException) -def test_read_empty_archive(): - - null_file = os.path.join(DATADIR, 'reader', 'null_archive.xlsx') - wb = load_workbook(null_file) - -def test_read_dimension(): - - path = os.path.join(DATADIR, 'reader', 'sheet2.xml') - - with open(path) as handle: - - dimension = read_dimension(xml_source = handle.read()) - - eq_(('D', 1, 'K', 30), dimension) - -class TestReadWorkbookWithStyles(object): - - @classmethod - def setup_class(cls): - cls.genuine_wb = os.path.join(DATADIR, 'genuine', \ - 'empty-with-styles.xlsx') - wb = load_workbook(cls.genuine_wb) - cls.ws = wb.get_sheet_by_name('Sheet1') - - def test_read_general_style(self): - eq_(self.ws.cell('A1').style.number_format.format_code, - NumberFormat.FORMAT_GENERAL) - - def test_read_date_style(self): - eq_(self.ws.cell('A2').style.number_format.format_code, - NumberFormat.FORMAT_DATE_XLSX14) - - def test_read_number_style(self): - eq_(self.ws.cell('A3').style.number_format.format_code, - NumberFormat.FORMAT_NUMBER_00) - - def test_read_time_style(self): - eq_(self.ws.cell('A4').style.number_format.format_code, - NumberFormat.FORMAT_DATE_TIME3) - - def test_read_percentage_style(self): - eq_(self.ws.cell('A5').style.number_format.format_code, - NumberFormat.FORMAT_PERCENTAGE_00) diff --git a/tablib/packages/openpyxl3/tests/test_strings.py b/tablib/packages/openpyxl3/tests/test_strings.py deleted file mode 100644 index 7dbf17a..0000000 --- a/tablib/packages/openpyxl3/tests/test_strings.py +++ /dev/null @@ -1,68 +0,0 @@ -# file openpyxl/tests/test_strings.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports - -import os.path - -# 3rd party imports -from nose.tools import eq_ - -# package imports -from openpyxl.tests.helper import DATADIR -from openpyxl.workbook import Workbook -from openpyxl.writer.strings import create_string_table -from openpyxl.reader.strings import read_string_table - - -def test_create_string_table(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('B12').value = 'hello' - ws.cell('B13').value = 'world' - ws.cell('D28').value = 'hello' - table = create_string_table(wb) - eq_({'hello': 1, 'world': 0}, table) - - -def test_read_string_table(): - with open(os.path.join(DATADIR, 'reader', 'sharedStrings.xml')) as handle: - content = handle.read() - string_table = read_string_table(content) - eq_({0: 'This is cell A1 in Sheet 1', 1: 'This is cell G5'}, string_table) - -def test_empty_string(): - with open(os.path.join(DATADIR, 'reader', 'sharedStrings-emptystring.xml')) as handle: - content = handle.read() - string_table = read_string_table(content) - eq_({0: 'Testing empty cell', 1:''}, string_table) - -def test_formatted_string_table(): - with open(os.path.join(DATADIR, 'reader', 'shared-strings-rich.xml')) \ - as handle: - content = handle.read() - string_table = read_string_table(content) - eq_({0: 'Welcome', 1: 'to the best shop in town', - 2: " let's play "}, string_table) diff --git a/tablib/packages/openpyxl3/tests/test_style.py b/tablib/packages/openpyxl3/tests/test_style.py deleted file mode 100644 index 4c8962c..0000000 --- a/tablib/packages/openpyxl3/tests/test_style.py +++ /dev/null @@ -1,181 +0,0 @@ -# file openpyxl/tests/test_style.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports - -import os.path -import datetime - -# 3rd party imports -from nose.tools import eq_, assert_false, ok_ - -# package imports -from openpyxl.tests.helper import DATADIR, assert_equals_file_content, get_xml -from openpyxl.reader.style import read_style_table -from openpyxl.workbook import Workbook -from openpyxl.style import NumberFormat -from openpyxl.writer.styles import StyleWriter -from openpyxl.style import NumberFormat, Border, Color - - -class TestCreateStyle(object): - - @classmethod - def setup_class(cls): - now = datetime.datetime.now() - cls.workbook = Workbook() - cls.worksheet = cls.workbook.create_sheet() - cls.worksheet.cell(coordinate = 'A1').value = '12.34%' - cls.worksheet.cell(coordinate = 'B4').value = now - cls.worksheet.cell(coordinate = 'B5').value = now - cls.worksheet.cell(coordinate = 'C14').value = 'This is a test' - cls.worksheet.cell(coordinate = 'D9').value = '31.31415' - cls.worksheet.cell(coordinate = 'D9').style.number_format.format_code = \ - NumberFormat.FORMAT_NUMBER_00 - cls.writer = StyleWriter(cls.workbook) - - def test_create_style_table(self): - eq_(3, len(self.writer.style_table)) - - def test_write_style_table(self): - reference_file = os.path.join(DATADIR, 'writer', 'expected', 'simple-styles.xml') - assert_equals_file_content(reference_file, self.writer.write_table()) - -class TestStyleWriter(object): - - def setUp(self): - - self.workbook = Workbook() - self.worksheet = self.workbook.create_sheet() - - def test_no_style(self): - - w = StyleWriter(self.workbook) - eq_(0, len(w.style_table)) - - def test_nb_style(self): - - for i in range(1, 6): - self.worksheet.cell(row=1, column=i).style.font.size += i - w = StyleWriter(self.workbook) - eq_(5, len(w.style_table)) - - self.worksheet.cell('A10').style.borders.top = Border.BORDER_THIN - w = StyleWriter(self.workbook) - eq_(6, len(w.style_table)) - - def test_style_unicity(self): - - for i in range(1, 6): - self.worksheet.cell(row=1, column=i).style.font.bold = True - w = StyleWriter(self.workbook) - eq_(1, len(w.style_table)) - - def test_fonts(self): - - self.worksheet.cell('A1').style.font.size = 12 - self.worksheet.cell('A1').style.font.bold = True - w = StyleWriter(self.workbook) - w._write_fonts() - eq_(get_xml(w._root), '') - - def test_fills(self): - - self.worksheet.cell('A1').style.fill.fill_type = 'solid' - self.worksheet.cell('A1').style.fill.start_color.index = Color.DARKYELLOW - w = StyleWriter(self.workbook) - w._write_fills() - eq_(get_xml(w._root), '') - - def test_borders(self): - - self.worksheet.cell('A1').style.borders.top.border_style = Border.BORDER_THIN - self.worksheet.cell('A1').style.borders.top.color.index = Color.DARKYELLOW - w = StyleWriter(self.workbook) - w._write_borders() - eq_(get_xml(w._root), '') - - def test_write_cell_xfs_1(self): - - self.worksheet.cell('A1').style.font.size = 12 - w = StyleWriter(self.workbook) - ft = w._write_fonts() - nft = w._write_number_formats() - w._write_cell_xfs(nft, ft, {}, {}) - xml = get_xml(w._root) - ok_('applyFont="1"' in xml) - ok_('applyFillId="1"' not in xml) - ok_('applyBorder="1"' not in xml) - ok_('applyAlignment="1"' not in xml) - - def test_alignment(self): - self.worksheet.cell('A1').style.alignment.horizontal = 'center' - self.worksheet.cell('A1').style.alignment.vertical = 'center' - w = StyleWriter(self.workbook) - nft = w._write_number_formats() - w._write_cell_xfs(nft,{},{},{}) - xml = get_xml(w._root) - ok_('applyAlignment="1"' in xml) - ok_('horizontal="center"' in xml) - ok_('vertical="center"' in xml) - - -#def test_format_comparisions(): -# format1 = NumberFormat() -# format2 = NumberFormat() -# format3 = NumberFormat() -# format1.format_code = 'm/d/yyyy' -# format2.format_code = 'm/d/yyyy' -# format3.format_code = 'mm/dd/yyyy' -# assert not format1 < format2 -# assert format1 < format3 -# assert format1 == format2 -# assert format1 != format3 - - -def test_builtin_format(): - format = NumberFormat() - format.format_code = '0.00' - eq_(format.builtin_format_code(2), format._format_code) - - -def test_read_style(): - reference_file = os.path.join(DATADIR, 'reader', 'simple-styles.xml') - with open(reference_file, 'r') as handle: - content = handle.read() - style_table = read_style_table(content) - eq_(4, len(style_table)) - eq_(NumberFormat._BUILTIN_FORMATS[9], - style_table[1].number_format.format_code) - eq_('yyyy-mm-dd', style_table[2].number_format.format_code) - - -def test_read_cell_style(): - reference_file = os.path.join( - DATADIR, 'reader', 'empty-workbook-styles.xml') - with open(reference_file, 'r') as handle: - content = handle.read() - style_table = read_style_table(content) - eq_(2, len(style_table)) diff --git a/tablib/packages/openpyxl3/tests/test_theme.py b/tablib/packages/openpyxl3/tests/test_theme.py deleted file mode 100644 index b0f6f00..0000000 --- a/tablib/packages/openpyxl3/tests/test_theme.py +++ /dev/null @@ -1,37 +0,0 @@ -# file openpyxl/tests/test_theme.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports -import os.path - -# package imports -from openpyxl.tests.helper import DATADIR, assert_equals_file_content -from openpyxl.writer.theme import write_theme - - -def test_write_theme(): - content = write_theme() - assert_equals_file_content( - os.path.join(DATADIR, 'writer', 'expected', 'theme1.xml'), content) diff --git a/tablib/packages/openpyxl3/tests/test_workbook.py b/tablib/packages/openpyxl3/tests/test_workbook.py deleted file mode 100644 index 20191d2..0000000 --- a/tablib/packages/openpyxl3/tests/test_workbook.py +++ /dev/null @@ -1,148 +0,0 @@ -# file openpyxl/tests/test_workbook.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# 3rd party imports -from nose.tools import eq_, with_setup, raises -import os.path as osp - -# package imports -from openpyxl.workbook import Workbook -from openpyxl.reader.excel import load_workbook -from openpyxl.namedrange import NamedRange -from openpyxl.shared.exc import ReadOnlyWorkbookException -from openpyxl.tests.helper import TMPDIR, clean_tmpdir, make_tmpdir - -import datetime - -def test_get_active_sheet(): - wb = Workbook() - active_sheet = wb.get_active_sheet() - eq_(active_sheet, wb.worksheets[0]) - - -def test_create_sheet(): - wb = Workbook() - new_sheet = wb.create_sheet(0) - eq_(new_sheet, wb.worksheets[0]) - - -@raises(ReadOnlyWorkbookException) -def test_create_sheet_readonly(): - wb = Workbook() - wb._set_optimized_read() - wb.create_sheet() - - -def test_remove_sheet(): - wb = Workbook() - new_sheet = wb.create_sheet(0) - wb.remove_sheet(new_sheet) - assert new_sheet not in wb.worksheets - - -def test_get_sheet_by_name(): - wb = Workbook() - new_sheet = wb.create_sheet() - title = 'my sheet' - new_sheet.title = title - found_sheet = wb.get_sheet_by_name(title) - eq_(new_sheet, found_sheet) - - -def test_get_index(): - wb = Workbook() - new_sheet = wb.create_sheet(0) - sheet_index = wb.get_index(new_sheet) - eq_(sheet_index, 0) - - -def test_get_sheet_names(): - wb = Workbook() - names = ['Sheet', 'Sheet1', 'Sheet2', 'Sheet3', 'Sheet4', 'Sheet5'] - for count in range(5): - wb.create_sheet(0) - actual_names = wb.get_sheet_names() - eq_(sorted(actual_names), sorted(names)) - - -def test_get_named_ranges(): - wb = Workbook() - eq_(wb.get_named_ranges(), wb._named_ranges) - - -def test_add_named_range(): - wb = Workbook() - new_sheet = wb.create_sheet() - named_range = NamedRange('test_nr', [(new_sheet, 'A1')]) - wb.add_named_range(named_range) - named_ranges_list = wb.get_named_ranges() - assert named_range in named_ranges_list - - -def test_get_named_range(): - wb = Workbook() - new_sheet = wb.create_sheet() - named_range = NamedRange('test_nr', [(new_sheet, 'A1')]) - wb.add_named_range(named_range) - found_named_range = wb.get_named_range('test_nr') - eq_(named_range, found_named_range) - - -def test_remove_named_range(): - wb = Workbook() - new_sheet = wb.create_sheet() - named_range = NamedRange('test_nr', [(new_sheet, 'A1')]) - wb.add_named_range(named_range) - wb.remove_named_range(named_range) - named_ranges_list = wb.get_named_ranges() - assert named_range not in named_ranges_list - -@with_setup(setup = make_tmpdir, teardown = clean_tmpdir) -def test_add_local_named_range(): - wb = Workbook() - new_sheet = wb.create_sheet() - named_range = NamedRange('test_nr', [(new_sheet, 'A1')]) - named_range.local_only = True - wb.add_named_range(named_range) - dest_filename = osp.join(TMPDIR, 'local_named_range_book.xlsx') - wb.save(dest_filename) - - -@with_setup(setup = make_tmpdir, teardown = clean_tmpdir) -def test_write_regular_date(): - - today = datetime.datetime(2010, 1, 18, 14, 15, 20, 1600) - - book = Workbook() - sheet = book.get_active_sheet() - sheet.cell("A1").value = today - dest_filename = osp.join(TMPDIR, 'date_read_write_issue.xlsx') - book.save(dest_filename) - - test_book = load_workbook(dest_filename) - test_sheet = test_book.get_active_sheet() - - eq_(test_sheet.cell("A1").value, today) - diff --git a/tablib/packages/openpyxl3/tests/test_worksheet.py b/tablib/packages/openpyxl3/tests/test_worksheet.py deleted file mode 100644 index 1894f1d..0000000 --- a/tablib/packages/openpyxl3/tests/test_worksheet.py +++ /dev/null @@ -1,258 +0,0 @@ -# file openpyxl/tests/test_worksheet.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# 3rd party imports -from nose.tools import eq_, raises, assert_raises - -# package imports -from openpyxl.workbook import Workbook -from openpyxl.worksheet import Worksheet, Relationship, flatten -from openpyxl.cell import Cell -from openpyxl.shared.exc import CellCoordinatesException, \ - SheetTitleException, InsufficientCoordinatesException, \ - NamedRangeException - - -class TestWorksheet(): - - @classmethod - def setup_class(cls): - cls.wb = Workbook() - - def test_new_worksheet(self): - ws = Worksheet(self.wb) - eq_(self.wb, ws._parent) - - def test_new_sheet_name(self): - self.wb.worksheets = [] - ws = Worksheet(self.wb, title = '') - eq_(repr(ws), '') - - def test_get_cell(self): - ws = Worksheet(self.wb) - cell = ws.cell('A1') - eq_(cell.get_coordinate(), 'A1') - - @raises(SheetTitleException) - def test_set_bad_title(self): - Worksheet(self.wb, 'X' * 50) - - def test_set_bad_title_character(self): - assert_raises(SheetTitleException, Worksheet, self.wb, '[') - assert_raises(SheetTitleException, Worksheet, self.wb, ']') - assert_raises(SheetTitleException, Worksheet, self.wb, '*') - assert_raises(SheetTitleException, Worksheet, self.wb, ':') - assert_raises(SheetTitleException, Worksheet, self.wb, '?') - assert_raises(SheetTitleException, Worksheet, self.wb, '/') - assert_raises(SheetTitleException, Worksheet, self.wb, '\\') - - def test_worksheet_dimension(self): - ws = Worksheet(self.wb) - eq_('A1:A1', ws.calculate_dimension()) - ws.cell('B12').value = 'AAA' - eq_('A1:B12', ws.calculate_dimension()) - - def test_worksheet_range(self): - ws = Worksheet(self.wb) - xlrange = ws.range('A1:C4') - assert isinstance(xlrange, tuple) - eq_(4, len(xlrange)) - eq_(3, len(xlrange[0])) - - def test_worksheet_named_range(self): - ws = Worksheet(self.wb) - self.wb.create_named_range('test_range', ws, 'C5') - xlrange = ws.range('test_range') - assert isinstance(xlrange, Cell) - eq_(5, xlrange.row) - - @raises(NamedRangeException) - def test_bad_named_range(self): - ws = Worksheet(self.wb) - ws.range('bad_range') - - @raises(NamedRangeException) - def test_named_range_wrong_sheet(self): - ws1 = Worksheet(self.wb) - ws2 = Worksheet(self.wb) - self.wb.create_named_range('wrong_sheet_range', ws1, 'C5') - ws2.range('wrong_sheet_range') - - def test_cell_offset(self): - ws = Worksheet(self.wb) - eq_('C17', ws.cell('B15').offset(2, 1).get_coordinate()) - - def test_range_offset(self): - ws = Worksheet(self.wb) - xlrange = ws.range('A1:C4', 1, 3) - assert isinstance(xlrange, tuple) - eq_(4, len(xlrange)) - eq_(3, len(xlrange[0])) - eq_('D2', xlrange[0][0].get_coordinate()) - - def test_cell_alternate_coordinates(self): - ws = Worksheet(self.wb) - cell = ws.cell(row = 8, column = 4) - eq_('E9', cell.get_coordinate()) - - @raises(InsufficientCoordinatesException) - def test_cell_insufficient_coordinates(self): - ws = Worksheet(self.wb) - cell = ws.cell(row = 8) - - def test_cell_range_name(self): - ws = Worksheet(self.wb) - self.wb.create_named_range('test_range_single', ws, 'B12') - assert_raises(CellCoordinatesException, ws.cell, 'test_range_single') - c_range_name = ws.range('test_range_single') - c_range_coord = ws.range('B12') - c_cell = ws.cell('B12') - eq_(c_range_coord, c_range_name) - eq_(c_range_coord, c_cell) - - def test_garbage_collect(self): - ws = Worksheet(self.wb) - ws.cell('A1').value = '' - ws.cell('B2').value = '0' - ws.cell('C4').value = 0 - ws.garbage_collect() - eq_(ws.get_cell_collection(), [ws.cell('B2'), ws.cell('C4')]) - - def test_hyperlink_relationships(self): - ws = Worksheet(self.wb) - eq_(len(ws.relationships), 0) - - ws.cell('A1').hyperlink = "http://test.com" - eq_(len(ws.relationships), 1) - eq_("rId1", ws.cell('A1').hyperlink_rel_id) - eq_("rId1", ws.relationships[0].id) - eq_("http://test.com", ws.relationships[0].target) - eq_("External", ws.relationships[0].target_mode) - - ws.cell('A2').hyperlink = "http://test2.com" - eq_(len(ws.relationships), 2) - eq_("rId2", ws.cell('A2').hyperlink_rel_id) - eq_("rId2", ws.relationships[1].id) - eq_("http://test2.com", ws.relationships[1].target) - eq_("External", ws.relationships[1].target_mode) - - @raises(ValueError) - def test_bad_relationship_type(self): - rel = Relationship('bad_type') - - def test_append_list(self): - ws = Worksheet(self.wb) - - ws.append(['This is A1', 'This is B1']) - - eq_('This is A1', ws.cell('A1').value) - eq_('This is B1', ws.cell('B1').value) - - def test_append_dict_letter(self): - ws = Worksheet(self.wb) - - ws.append({'A' : 'This is A1', 'C' : 'This is C1'}) - - eq_('This is A1', ws.cell('A1').value) - eq_('This is C1', ws.cell('C1').value) - - def test_append_dict_index(self): - ws = Worksheet(self.wb) - - ws.append({0 : 'This is A1', 2 : 'This is C1'}) - - eq_('This is A1', ws.cell('A1').value) - eq_('This is C1', ws.cell('C1').value) - - @raises(TypeError) - def test_bad_append(self): - ws = Worksheet(self.wb) - ws.append("test") - - def test_append_2d_list(self): - - ws = Worksheet(self.wb) - - ws.append(['This is A1', 'This is B1']) - ws.append(['This is A2', 'This is B2']) - - vals = ws.range('A1:B2') - - eq_((('This is A1', 'This is B1'), - ('This is A2', 'This is B2'),), flatten(vals)) - - def test_rows(self): - - ws = Worksheet(self.wb) - - ws.cell('A1').value = 'first' - ws.cell('C9').value = 'last' - - rows = ws.rows - - eq_(len(rows), 9) - - eq_(rows[0][0].value, 'first') - eq_(rows[-1][-1].value, 'last') - - def test_cols(self): - - ws = Worksheet(self.wb) - - ws.cell('A1').value = 'first' - ws.cell('C9').value = 'last' - - cols = ws.columns - - eq_(len(cols), 3) - - eq_(cols[0][0].value, 'first') - eq_(cols[-1][-1].value, 'last') - - def test_auto_filter(self): - ws = Worksheet(self.wb) - ws.auto_filter = ws.range('a1:f1') - assert ws.auto_filter == 'A1:F1' - - ws.auto_filter = '' - assert ws.auto_filter is None - - ws.auto_filter = 'c1:g9' - assert ws.auto_filter == 'C1:G9' - - def test_freeze(self): - ws = Worksheet(self.wb) - ws.freeze_panes = ws.cell('b2') - assert ws.freeze_panes == 'B2' - - ws.freeze_panes = '' - assert ws.freeze_panes is None - - ws.freeze_panes = 'c5' - assert ws.freeze_panes == 'C5' - - ws.freeze_panes = ws.cell('A1') - assert ws.freeze_panes is None - diff --git a/tablib/packages/openpyxl3/tests/test_write.py b/tablib/packages/openpyxl3/tests/test_write.py deleted file mode 100644 index 74363cb..0000000 --- a/tablib/packages/openpyxl3/tests/test_write.py +++ /dev/null @@ -1,203 +0,0 @@ -# file openpyxl/tests/test_write.py - -# Copyright (c) 2010 openpyxl -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# @license: http://www.opensource.org/licenses/mit-license.php -# @author: Eric Gazoni - -# Python stdlib imports - -from io import StringIO -import os.path - -# 3rd party imports -from nose.tools import eq_, with_setup, raises - -# package imports -from openpyxl.tests.helper import TMPDIR, DATADIR, \ - assert_equals_file_content, clean_tmpdir, make_tmpdir -from openpyxl.workbook import Workbook -from openpyxl.reader.excel import load_workbook -from openpyxl.writer.excel import save_workbook, save_virtual_workbook, \ - ExcelWriter -from openpyxl.writer.workbook import write_workbook, write_workbook_rels -from openpyxl.writer.worksheet import write_worksheet, write_worksheet_rels -from openpyxl.writer.strings import write_string_table -from openpyxl.writer.styles import StyleWriter - - -@with_setup(setup = make_tmpdir, teardown = clean_tmpdir) -def test_write_empty_workbook(): - wb = Workbook() - dest_filename = os.path.join(TMPDIR, 'empty_book.xlsx') - save_workbook(wb, dest_filename) - assert os.path.isfile(dest_filename) - - -def test_write_virtual_workbook(): - old_wb = Workbook() - saved_wb = save_virtual_workbook(old_wb) - new_wb = load_workbook(StringIO(saved_wb)) - assert new_wb - - -def test_write_workbook_rels(): - wb = Workbook() - content = write_workbook_rels(wb) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'workbook.xml.rels'), content) - - -def test_write_workbook(): - wb = Workbook() - content = write_workbook(wb) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'workbook.xml'), content) - - -def test_write_string_table(): - table = {'hello': 1, 'world': 2, 'nice': 3} - content = write_string_table(table) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sharedStrings.xml'), content) - - -def test_write_worksheet(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F42').value = 'hello' - content = write_worksheet(ws, {'hello': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1.xml'), content) - - -def test_write_hidden_worksheet(): - wb = Workbook() - ws = wb.create_sheet() - ws.sheet_state = ws.SHEETSTATE_HIDDEN - ws.cell('F42').value = 'hello' - content = write_worksheet(ws, {'hello': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1.xml'), content) - - -def test_write_formula(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F1').value = 10 - ws.cell('F2').value = 32 - ws.cell('F3').value = '=F1+F2' - content = write_worksheet(ws, {}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_formula.xml'), content) - - -def test_write_style(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F1').value = '13%' - style_id_by_hash = StyleWriter(wb).get_style_by_hash() - content = write_worksheet(ws, {}, style_id_by_hash) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_style.xml'), content) - - -def test_write_height(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F1').value = 10 - ws.row_dimensions[ws.cell('F1').row].height = 30 - content = write_worksheet(ws, {}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_height.xml'), content) - - -def test_write_hyperlink(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('A1').value = "test" - ws.cell('A1').hyperlink = "http://test.com" - content = write_worksheet(ws, {'test': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_hyperlink.xml'), content) - - -def test_write_hyperlink_rels(): - wb = Workbook() - ws = wb.create_sheet() - eq_(0, len(ws.relationships)) - ws.cell('A1').value = "test" - ws.cell('A1').hyperlink = "http://test.com/" - eq_(1, len(ws.relationships)) - ws.cell('A2').value = "test" - ws.cell('A2').hyperlink = "http://test2.com/" - eq_(2, len(ws.relationships)) - content = write_worksheet_rels(ws, 1) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_hyperlink.xml.rels'), content) - - -def test_hyperlink_value(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('A1').hyperlink = "http://test.com" - eq_("http://test.com", ws.cell('A1').value) - ws.cell('A1').value = "test" - eq_("test", ws.cell('A1').value) - -def test_write_auto_filter(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F42').value = 'hello' - ws.auto_filter = 'A1:F1' - content = write_worksheet(ws, {'hello': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_auto_filter.xml'), content) - -def test_freeze_panes_horiz(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F42').value = 'hello' - ws.freeze_panes = 'A4' - content = write_worksheet(ws, {'hello': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_freeze_panes_horiz.xml'), content) - -def test_freeze_panes_vert(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F42').value = 'hello' - ws.freeze_panes = 'D1' - content = write_worksheet(ws, {'hello': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_freeze_panes_vert.xml'), content) - pass - -def test_freeze_panes_both(): - wb = Workbook() - ws = wb.create_sheet() - ws.cell('F42').value = 'hello' - ws.freeze_panes = 'D4' - content = write_worksheet(ws, {'hello': 0}, {}) - assert_equals_file_content(os.path.join(DATADIR, 'writer', 'expected', \ - 'sheet1_freeze_panes_both.xml'), content) - - diff --git a/test.xlsx b/test.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5813e469ef637972ff16286f2e09ff9c1db45a02 GIT binary patch literal 5377 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 HzwZ7EHpUWO literal 0 HcmV?d00001 diff --git a/test_tablib.py.orig b/test_tablib.py.orig new file mode 100755 index 0000000..21131bb --- /dev/null +++ b/test_tablib.py.orig @@ -0,0 +1,522 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Tests for Tablib.""" + +import unittest +import sys + +if sys.version_info[0] > 2: + from tablib.packages import markup3 as markup +else: + from tablib.packages import markup + + + +import tablib + + + +class TablibTestCase(unittest.TestCase): + """Tablib test cases.""" + + def setUp(self): + """Create simple data set with headers.""" + + global data, book + + data = tablib.Dataset() + book = tablib.Databook() + + self.headers = ('first_name', 'last_name', 'gpa') + self.john = ('John', 'Adams', 90) + self.george = ('George', 'Washington', 67) + self.tom = ('Thomas', 'Jefferson', 50) + + self.founders = tablib.Dataset(headers=self.headers) + self.founders.append(self.john) + self.founders.append(self.george) + self.founders.append(self.tom) + + + def tearDown(self): + """Teardown.""" + pass + + + def test_empty_append(self): + """Verify append() correctly adds tuple with no headers.""" + new_row = (1, 2, 3) + data.append(new_row) + + # Verify width/data + self.assertTrue(data.width == len(new_row)) + self.assertTrue(data[0] == new_row) + + + def test_empty_append_with_headers(self): + """Verify append() correctly detects mismatch of number of + headers and data. + """ + data.headers = ['first', 'second'] + new_row = (1, 2, 3, 4) + + self.assertRaises(tablib.InvalidDimensions, data.append, new_row) + + + def test_add_column(self): + """Verify adding column works with/without headers.""" + + data.append(['kenneth']) + data.append(['bessie']) + + new_col = ['reitz', 'monke'] + + data.append(col=new_col) + + self.assertEquals(data[0], ('kenneth', 'reitz')) + self.assertEquals(data.width, 2) + + # With Headers + data.headers = ('fname', 'lname') + new_col = [21, 22] + data.append(col=new_col, header='age') + + self.assertEquals(data['age'], new_col) + + + def test_add_column_no_data_no_headers(self): + """Verify adding new column with no headers.""" + + new_col = ('reitz', 'monke') + + data.append(col=new_col) + + self.assertEquals(data[0], tuple([new_col[0]])) + self.assertEquals(data.width, 1) + self.assertEquals(data.height, len(new_col)) + + + def test_add_callable_column(self): + """Verify adding column with values specified as callable.""" + new_col = [lambda x: x[0]] + self.founders.append(col=new_col, header='first_again') +# +# self.assertTrue(map(lambda x: x[0] == x[-1], self.founders)) + + + def test_header_slicing(self): + """Verify slicing by headers.""" + + self.assertEqual(self.founders['first_name'], + [self.john[0], self.george[0], self.tom[0]]) + self.assertEqual(self.founders['last_name'], + [self.john[1], self.george[1], self.tom[1]]) + self.assertEqual(self.founders['gpa'], + [self.john[2], self.george[2], self.tom[2]]) + + + def test_data_slicing(self): + """Verify slicing by data.""" + + # Slice individual rows + self.assertEqual(self.founders[0], self.john) + self.assertEqual(self.founders[:1], [self.john]) + self.assertEqual(self.founders[1:2], [self.george]) + self.assertEqual(self.founders[-1], self.tom) + self.assertEqual(self.founders[3:], []) + + # Slice multiple rows + self.assertEqual(self.founders[:], [self.john, self.george, self.tom]) + self.assertEqual(self.founders[0:2], [self.john, self.george]) + self.assertEqual(self.founders[1:3], [self.george, self.tom]) + self.assertEqual(self.founders[2:], [self.tom]) + + + def test_delete(self): + """Verify deleting from dataset works.""" + + # Delete from front of object + del self.founders[0] + self.assertEqual(self.founders[:], [self.george, self.tom]) + + # Verify dimensions, width should NOT change + self.assertEqual(self.founders.height, 2) + self.assertEqual(self.founders.width, 3) + + # Delete from back of object + del self.founders[1] + self.assertEqual(self.founders[:], [self.george]) + + # Verify dimensions, width should NOT change + self.assertEqual(self.founders.height, 1) + self.assertEqual(self.founders.width, 3) + + # Delete from invalid index + self.assertRaises(IndexError, self.founders.__delitem__, 3) + + + def test_csv_export(self): + """Verify exporting dataset object as CSV.""" + + # Build up the csv string with headers first, followed by each row + csv = '' + for col in self.headers: + csv += col + ',' + + csv = csv.strip(',') + '\r\n' + + for founder in self.founders: + for col in founder: + csv += str(col) + ',' + csv = csv.strip(',') + '\r\n' + + self.assertEqual(csv, self.founders.csv) + + def test_tsv_export(self): + """Verify exporting dataset object as CSV.""" + + # Build up the csv string with headers first, followed by each row + tsv = '' + for col in self.headers: + tsv += col + '\t' + + tsv = tsv.strip('\t') + '\r\n' + + for founder in self.founders: + for col in founder: + tsv += str(col) + '\t' + tsv = tsv.strip('\t') + '\r\n' + + self.assertEqual(tsv, self.founders.tsv) + + def test_html_export(self): + + """HTML export""" + + html = markup.page() + html.table.open() + html.thead.open() + + html.tr(markup.oneliner.th(self.founders.headers)) + html.thead.close() + + for founder in self.founders: + + html.tr(markup.oneliner.td(founder)) + + html.table.close() + html = str(html) + + self.assertEqual(html, self.founders.html) + + + def test_unicode_append(self): + """Passes in a single unicode charecter and exports.""" + + new_row = ('å', 'é') + data.append(new_row) + + data.json + data.yaml + data.csv + data.tsv + data.xls +<<<<<<< HEAD + data.html +======= + data.xlsx +>>>>>>> 5350355fbe0aefe053d40fda03c0688a7b7eae3d + + + def test_book_export_no_exceptions(self): + """Test that varoius exports don't error out.""" + + book = tablib.Databook() + book.add_sheet(data) + + book.json + book.yaml + book.xls + book.xlsx + + + def test_json_import_set(self): + """Generate and import JSON set serialization.""" + data.append(self.john) + data.append(self.george) + data.headers = self.headers + + _json = data.json + + data.json = _json + + self.assertEqual(_json, data.json) + + + def test_json_import_book(self): + """Generate and import JSON book serialization.""" + data.append(self.john) + data.append(self.george) + data.headers = self.headers + + book.add_sheet(data) + _json = book.json + + book.json = _json + + self.assertEqual(_json, book.json) + + + def test_yaml_import_set(self): + """Generate and import YAML set serialization.""" + data.append(self.john) + data.append(self.george) + data.headers = self.headers + + _yaml = data.yaml + + data.yaml = _yaml + + self.assertEqual(_yaml, data.yaml) + + + def test_yaml_import_book(self): + """Generate and import YAML book serialization.""" + data.append(self.john) + data.append(self.george) + data.headers = self.headers + + book.add_sheet(data) + _yaml = book.yaml + + book.yaml = _yaml + + self.assertEqual(_yaml, book.yaml) + + + def test_csv_import_set(self): + """Generate and import CSV set serialization.""" + data.append(self.john) + data.append(self.george) + data.headers = self.headers + + _csv = data.csv + + data.csv = _csv + + self.assertEqual(_csv, data.csv) + + + def test_csv_import_set_with_spaces(self): + """Generate and import CSV set serialization when row values have + spaces.""" + data.append(('Bill Gates', 'Microsoft')) + data.append(('Steve Jobs', 'Apple')) + data.headers = ('Name', 'Company') + + _csv = data.csv + + data.csv = _csv + + self.assertEqual(_csv, data.csv) + + + def test_tsv_import_set(self): + """Generate and import TSV set serialization.""" + data.append(self.john) + data.append(self.george) + data.headers = self.headers + + _tsv = data.tsv + + data.tsv = _tsv + + self.assertEqual(_tsv, data.tsv) + + + def test_csv_format_detect(self): + """Test CSV format detection.""" + + _csv = ( + '1,2,3\n' + '4,5,6\n' + '7,8,9\n' + ) + _bunk = ( + '¡¡¡¡¡¡¡¡£™∞¢£§∞§¶•¶ª∞¶•ªº••ª–º§•†•§º¶•†¥ª–º•§ƒø¥¨©πƒø†ˆ¥ç©¨√øˆ¥≈†ƒ¥ç©ø¨çˆ¥ƒçø¶' + ) + + self.assertTrue(tablib.formats.csv.detect(_csv)) + self.assertFalse(tablib.formats.csv.detect(_bunk)) + + + def test_tsv_format_detect(self): + """Test TSV format detection.""" + + _tsv = ( + '1\t2\t3\n' + '4\t5\t6\n' + '7\t8\t9\n' + ) + _bunk = ( + '¡¡¡¡¡¡¡¡£™∞¢£§∞§¶•¶ª∞¶•ªº••ª–º§•†•§º¶•†¥ª–º•§ƒø¥¨©πƒø†ˆ¥ç©¨√øˆ¥≈†ƒ¥ç©ø¨çˆ¥ƒçø¶' + ) + + self.assertTrue(tablib.formats.tsv.detect(_tsv)) + self.assertFalse(tablib.formats.tsv.detect(_bunk)) + + + def test_json_format_detect(self): + """Test JSON format detection.""" + + _json = '[{"last_name": "Adams","age": 90,"first_name": "John"}]' + _bunk = ( + '¡¡¡¡¡¡¡¡£™∞¢£§∞§¶•¶ª∞¶•ªº••ª–º§•†•§º¶•†¥ª–º•§ƒø¥¨©πƒø†ˆ¥ç©¨√øˆ¥≈†ƒ¥ç©ø¨çˆ¥ƒçø¶' + ) + + self.assertTrue(tablib.formats.json.detect(_json)) + self.assertFalse(tablib.formats.json.detect(_bunk)) + + + def test_yaml_format_detect(self): + """Test YAML format detection.""" + + _yaml = '- {age: 90, first_name: John, last_name: Adams}' + _bunk = ( + '¡¡¡¡¡¡---///\n\n\n¡¡£™∞¢£§∞§¶•¶ª∞¶•ªº••ª–º§•†•§º¶•†¥ª–º•§ƒø¥¨©πƒø†ˆ¥ç©¨√øˆ¥≈†ƒ¥ç©ø¨çˆ¥ƒçø¶' + ) + + self.assertTrue(tablib.formats.yaml.detect(_yaml)) + self.assertFalse(tablib.formats.yaml.detect(_bunk)) + + + def test_auto_format_detect(self): + """Test auto format detection.""" + + _yaml = '- {age: 90, first_name: John, last_name: Adams}' + _json = '[{"last_name": "Adams","age": 90,"first_name": "John"}]' + _csv = '1,2,3\n4,5,6\n7,8,9\n' + _bunk = '¡¡¡¡¡¡---///\n\n\n¡¡£™∞¢£§∞§¶•¶ª∞¶•ªº••ª–º§•†•§º¶•†¥ª–º•§ƒø¥¨©πƒø†ˆ¥ç©¨√øˆ¥≈†ƒ¥ç©ø¨çˆ¥ƒçø¶' + + self.assertEqual(tablib.detect(_yaml)[0], tablib.formats.yaml) + self.assertEqual(tablib.detect(_csv)[0], tablib.formats.csv) + self.assertEqual(tablib.detect(_json)[0], tablib.formats.json) + self.assertEqual(tablib.detect(_bunk)[0], None) + + + def test_transpose(self): + """Transpose a dataset.""" + + transposed_founders = self.founders.transpose() + first_row = transposed_founders[0] + second_row = transposed_founders[1] + + self.assertEqual(transposed_founders.headers, + ["first_name","John", "George", "Thomas"]) + self.assertEqual(first_row, + ("last_name","Adams", "Washington", "Jefferson")) + self.assertEqual(second_row, + ("gpa",90, 67, 50)) + + + def test_row_stacking(self): + + """Row stacking.""" + + to_join = tablib.Dataset(headers=self.founders.headers) + + for row in self.founders: + to_join.append(row=row) + + row_stacked = self.founders.stack_rows(to_join) + + for column in row_stacked.headers: + + original_data = self.founders[column] + expected_data = original_data + original_data + self.assertEqual(row_stacked[column], expected_data) + + + def test_column_stacking(self): + + """Column stacking""" + + to_join = tablib.Dataset(headers=self.founders.headers) + + for row in self.founders: + to_join.append(row=row) + + column_stacked = self.founders.stack_columns(to_join) + + for index, row in enumerate(column_stacked): + + original_data = self.founders[index] + expected_data = original_data + original_data + self.assertEqual(row, expected_data) + + self.assertEqual(column_stacked[0], + ("John", "Adams", 90, "John", "Adams", 90)) + + + def test_sorting(self): + + """Sort columns.""" + + sorted_data = self.founders.sort(col="first_name") + + first_row = sorted_data[0] + second_row = sorted_data[2] + third_row = sorted_data[1] + expected_first = self.founders[1] + expected_second = self.founders[2] + expected_third = self.founders[0] + + self.assertEqual(first_row, expected_first) + self.assertEqual(second_row, expected_second) + self.assertEqual(third_row, expected_third) + + + def test_wipe(self): + """Purge a dataset.""" + + new_row = (1, 2, 3) + data.append(new_row) + + # Verify width/data + self.assertTrue(data.width == len(new_row)) + self.assertTrue(data[0] == new_row) + + data.wipe() + new_row = (1, 2, 3, 4) + data.append(new_row) + self.assertTrue(data.width == len(new_row)) + self.assertTrue(data[0] == new_row) + + + def test_formatters(self): + """Confirm formatters are being triggered.""" + + def _formatter(cell_value): + return str(cell_value).upper() + + self.founders.add_formatter('last_name', _formatter) + + for name in [r['last_name'] for r in self.founders.dict]: + self.assertTrue(name.isupper()) + + def test_unicode_csv(self): + """Check if unicode in csv export doesn't raise.""" + + data = tablib.Dataset() + + if sys.version_info[0] > 2: + data.append(['\xfc', '\xfd']) + else: + exec("data.append([u'\xfc', u'\xfd'])") + + + data.csv + +if __name__ == '__main__': + unittest.main() diff --git a/toy.py b/toy.py new file mode 100644 index 0000000..ef3ff37 --- /dev/null +++ b/toy.py @@ -0,0 +1,9 @@ +import tablib + +d = tablib.Dataset() + +d.headers = ['face', 'book'] +d.append([1,2]) + +f = open('test.xlsx', 'wb') +f.write(d.xlsx) \ No newline at end of file