diff --git a/tests/test_reports_spreadsheet.py b/tests/test_reports_spreadsheet.py index d27ee3c608939a79fb5e9fbbce448aae496fe5fe..b14ec45c522452b4873e2bbebcefc2390dd343e8 100644 --- a/tests/test_reports_spreadsheet.py +++ b/tests/test_reports_spreadsheet.py @@ -223,6 +223,44 @@ def test_ods_writer_use_sheet_discards_unused_sheets(ods_writer): assert len(sheets) == 1 assert sheets[0].getAttribute('name') == 'One' +@pytest.mark.parametrize('width,expect_name', [ + ('.750', 'col_0_75in'), + (2, 'col_2in'), + ('2.2in', 'col_2_2in'), + (3.5, 'col_3_5in'), + ('4cm', 'col_4cm'), +]) +def test_ods_column_style(ods_writer, width, expect_name): + style = ods_writer.column_style(width) + assert style.getAttribute('name') == expect_name + assert style.getAttribute('family') == 'table-column' + curr_style = get_child( + ods_writer.document.automaticstyles, + odf.style.Style, + name=expect_name, + ) + assert get_child( + curr_style, + odf.style.TableColumnProperties, + columnwidth=expect_name[4:].replace('_', '.'), + ) + +def test_ods_column_style_caches(ods_writer): + int_width = ods_writer.column_style('1in') + float_width = ods_writer.column_style('1.00in') + assert int_width is float_width + +@pytest.mark.parametrize('width', [ + '1mi', + '0in', + '-1cm', + 'in', + '.cm', +]) +def test_ods_column_style_invalid_width(ods_writer, width): + with pytest.raises(ValueError): + ods_writer.column_style(width) + @pytest.mark.parametrize('currency_code', [ 'USD', 'EUR', @@ -261,11 +299,6 @@ def test_ods_currency_style_cache_considers_properties(ods_writer): assert plain.getAttribute('datastylename') != bold.getAttribute('datastylename') @pytest.mark.parametrize('attr_name,child_type,checked_attr', [ - ('style_col1', odf.style.TableColumnProperties, 'columnwidth'), - ('style_col1_25', odf.style.TableColumnProperties, 'columnwidth'), - ('style_col1_5', odf.style.TableColumnProperties, 'columnwidth'), - ('style_col1_75', odf.style.TableColumnProperties, 'columnwidth'), - ('style_col2', odf.style.TableColumnProperties, 'columnwidth'), ('style_bold', odf.style.TextProperties, 'fontweight'), ('style_centertext', odf.style.ParagraphProperties, 'textalign'), ('style_dividerline', odf.style.TableCellProperties, 'borderbottom'), @@ -273,10 +306,7 @@ def test_ods_currency_style_cache_considers_properties(ods_writer): ('style_starttext', odf.style.ParagraphProperties, 'textalign'), ]) def test_ods_writer_style(ods_writer, attr_name, child_type, checked_attr): - if child_type is odf.style.TableColumnProperties: - root = ods_writer.document.automaticstyles - else: - root = ods_writer.document.styles + root = ods_writer.document.styles style = getattr(ods_writer, attr_name) actual = get_child(root, odf.style.Style, name=style.getAttribute('name')) assert actual is style