From bc8c341b37bfac34bbeaccdd5368c2d7edc309ac Mon Sep 17 00:00:00 2001 From: Bruno Herfst Date: Wed, 26 Oct 2016 11:04:09 +1100 Subject: Add support for page and column breaks --- tests/conversion_tests.py | 20 +++++++++++-- tests/docx/body_xml_tests.py | 35 ++++++++++++++++------ .../styles/parser/document_matcher_parser_tests.py | 27 +++++++++++++++++ 3 files changed, 71 insertions(+), 11 deletions(-) (limited to 'tests') diff --git a/tests/conversion_tests.py b/tests/conversion_tests.py index 71fbbc7..3dfb9f3 100644 --- a/tests/conversion_tests.py +++ b/tests/conversion_tests.py @@ -365,11 +365,27 @@ def table_cells_are_written_with_rowspan_if_not_equal_to_one(): @istest def line_break_is_converted_to_br(): - line_break = documents.line_break() - result = convert_document_element_to_html(line_break) + result = convert_document_element_to_html(documents.line_break) assert_equal("
", result.value) +@istest +def breaks_that_are_not_line_breaks_are_ignored(): + result = convert_document_element_to_html(documents.page_break) + assert_equal("", result.value) + + +@istest +def breaks_can_be_mapped_using_style_mappings(): + result = convert_document_element_to_html( + documents.page_break, + style_map=[ + _style_mapping("br[type='page'] => hr") + ], + ) + assert_equal("
", result.value) + + @istest def images_are_converted_to_img_tags_with_data_uri(): image = documents.image(alt_text=None, content_type="image/png", open=lambda: io.BytesIO(b"abc")) diff --git a/tests/docx/body_xml_tests.py b/tests/docx/body_xml_tests.py index ccbd888..02d8b85 100644 --- a/tests/docx/body_xml_tests.py +++ b/tests/docx/body_xml_tests.py @@ -422,22 +422,39 @@ class ReadXmlElementTests(object): documents.bookmark("start"), _read_and_get_document_xml_element(element) ) - + @istest - def br_is_read_as_line_break(self): + def br_without_explicit_type_is_read_as_line_break(self): break_element = xml_element("w:br", {}, []) - result = _read_and_get_document_xml_element(break_element) - assert_equal(result, documents.line_break()) - - + result = _read_document_xml_element(break_element) + assert_equal(documents.line_break, result.value) + + @istest + def br_with_text_wrapping_type_is_read_as_line_break(self): + break_element = xml_element("w:br", {"w:type": "textWrapping"}, []) + result = _read_document_xml_element(break_element) + assert_equal(documents.line_break, result.value) + @istest - def warning_on_breaks_that_arent_line_breaks(self): + def br_with_page_type_is_read_as_page_break(self): break_element = xml_element("w:br", {"w:type": "page"}, []) result = _read_document_xml_element(break_element) - expected_warning = results.warning("Unsupported break type: page") + assert_equal(documents.page_break, result.value) + + @istest + def br_with_column_type_is_read_as_column_break(self): + break_element = xml_element("w:br", {"w:type": "column"}, []) + result = _read_document_xml_element(break_element) + assert_equal(documents.column_break, result.value) + + @istest + def warning_on_break_types_that_arent_recognised(self): + break_element = xml_element("w:br", {"w:type": "unknownBreakType"}, []) + result = _read_document_xml_element(break_element) + expected_warning = results.warning("Unsupported break type: unknownBreakType") assert_equal([expected_warning], result.messages) assert_equal(None, result.value) - + IMAGE_BYTES = b"Not an image at all!" IMAGE_RELATIONSHIP_ID = "rId5" diff --git a/tests/styles/parser/document_matcher_parser_tests.py b/tests/styles/parser/document_matcher_parser_tests.py index 194d6fa..0286e7b 100644 --- a/tests/styles/parser/document_matcher_parser_tests.py +++ b/tests/styles/parser/document_matcher_parser_tests.py @@ -132,6 +132,33 @@ def reads_comment_reference(): read_document_matcher("comment-reference") ) +@istest +def reads_line_breaks(): + assert_equal( + document_matchers.line_break, + read_document_matcher("br[type='line']"), + ) + +@istest +def reads_page_breaks(): + assert_equal( + document_matchers.page_break, + read_document_matcher("br[type='page']"), + ) + +@istest +def reads_column_breaks(): + assert_equal( + document_matchers.column_break, + read_document_matcher("br[type='column']"), + ) + + +@istest +def unrecognised_break_type_raises_error(): + error = assert_raises(LineParseError, lambda: read_document_matcher("br[type='unknownBreakType']")) + assert_equal("Unrecognised break type: unknownBreakType", str(error)) + def read_document_matcher(string): return parse_document_matcher(TokenIterator(tokenise(string))) -- cgit v1.2.3