def complex_field_nested_within_a_hyperlink_complex_field_is_wrapped_with_the_hyperlink(self): element = xml_element("w:p", {}, [ self._BEGIN_COMPLEX_FIELD, self._HYPERLINK_INSTRTEXT, self._SEPARATE_COMPLEX_FIELD, self._BEGIN_COMPLEX_FIELD, xml_element("w:instrText", {}, [ xml_text(' AUTHOR "John Doe"') ]), self._SEPARATE_COMPLEX_FIELD, _run_element_with_text("John Doe"), self._END_COMPLEX_FIELD, self._END_COMPLEX_FIELD, ]) paragraph = _read_and_get_document_xml_element(element) assert_that(paragraph, is_paragraph(children=is_sequence( is_empty_run, self._is_empty_hyperlinked_run, self._is_empty_hyperlinked_run, self._is_empty_hyperlinked_run, self._is_hyperlinked_run(children=is_sequence( is_text("John Doe"), )), self._is_empty_hyperlinked_run, is_empty_run, )))
def sdt_is_read_using_sdt_content(): element = xml_element("w:sdt", {}, [ xml_element("w:sdtContent", {}, [ xml_element("w:t", {}, [xml_text("Blackdown")]), ]), ]) result = _read_and_get_document_xml_element(element) assert_equal(documents.text("Blackdown"), result)
def sdt_is_read_using_sdt_content(self): element = xml_element("w:sdt", {}, [ xml_element("w:sdtContent", {}, [ xml_element("w:t", {}, [xml_text("Blackdown")]), ]), ]) result = _read_and_get_document_xml_element(element) assert_equal(documents.text("Blackdown"), result)
def can_handle_split_instr_text_elements(self): element = xml_element("w:p", {}, [ self._BEGIN_COMPLEX_FIELD, xml_element("w:instrText", {}, [xml_text(" HYPE")]), xml_element("w:instrText", {}, [ xml_text('RLINK "{0}"'.format(self._URI)), ]), self._SEPARATE_COMPLEX_FIELD, _run_element_with_text("this is a hyperlink"), self._END_COMPLEX_FIELD, ]) paragraph = _read_and_get_document_xml_element(element) assert_that( paragraph, is_paragraph(children=is_sequence( is_empty_run, self._is_empty_hyperlinked_run, self._is_hyperlinked_run( children=is_sequence(is_text("this is a hyperlink"), )), is_empty_run, )))
def can_handle_split_instr_text_elements(self): element = xml_element("w:p", {}, [ self._BEGIN_COMPLEX_FIELD, xml_element("w:instrText", {}, [ xml_text(" HYPE") ]), xml_element("w:instrText", {}, [ xml_text('RLINK "{0}"'.format(self._URI)), ]), self._SEPARATE_COMPLEX_FIELD, _run_element_with_text("this is a hyperlink"), self._END_COMPLEX_FIELD, ]) paragraph = _read_and_get_document_xml_element(element) assert_that(paragraph, is_paragraph(children=is_sequence( is_empty_run, self._is_empty_hyperlinked_run, self._is_hyperlinked_run(children=is_sequence( is_text("this is a hyperlink"), )), is_empty_run, )))
class ComplexFieldTests(object): _URI = "http://example.com" _BEGIN_COMPLEX_FIELD = xml_element("w:r", {}, [ xml_element("w:fldChar", {"w:fldCharType": "begin"}), ]) _SEPARATE_COMPLEX_FIELD = xml_element("w:r", {}, [ xml_element("w:fldChar", {"w:fldCharType": "separate"}), ]) _END_COMPLEX_FIELD = xml_element("w:r", {}, [ xml_element("w:fldChar", {"w:fldCharType": "end"}), ]) _HYPERLINK_INSTRTEXT = xml_element("w:instrText", {}, [ xml_text(' HYPERLINK "{0}"'.format(_URI)) ]) def _is_hyperlinked_run(self, **kwargs): return is_run(children=is_sequence( is_hyperlink( href=self._URI, **kwargs ), )) @property def _is_empty_hyperlinked_run(self): return self._is_hyperlinked_run(children=[]) @istest def runs_in_a_complex_field_for_hyperlinks_are_read_as_hyperlinks(self): element = xml_element("w:p", {}, [ self._BEGIN_COMPLEX_FIELD, self._HYPERLINK_INSTRTEXT, self._SEPARATE_COMPLEX_FIELD, _run_element_with_text("this is a hyperlink"), self._END_COMPLEX_FIELD, ]) paragraph = _read_and_get_document_xml_element(element) assert_that(paragraph, is_paragraph(children=is_sequence( is_empty_run, self._is_empty_hyperlinked_run, self._is_hyperlinked_run(children=is_sequence( is_text("this is a hyperlink"), )), is_empty_run, ))) @istest def runs_after_a_complex_field_for_hyperlinks_are_not_read_as_hyperlinks(self): element = xml_element("w:p", {}, [ self._BEGIN_COMPLEX_FIELD, self._HYPERLINK_INSTRTEXT, self._SEPARATE_COMPLEX_FIELD, self._END_COMPLEX_FIELD, _run_element_with_text("this will not be a hyperlink"), ]) paragraph = _read_and_get_document_xml_element(element) assert_that(paragraph, is_paragraph(children=is_sequence( is_empty_run, self._is_empty_hyperlinked_run, is_empty_run, is_run(children=is_sequence( is_text("this will not be a hyperlink"), )), ))) @istest def can_handle_split_instr_text_elements(self): element = xml_element("w:p", {}, [ self._BEGIN_COMPLEX_FIELD, xml_element("w:instrText", {}, [ xml_text(" HYPE") ]), xml_element("w:instrText", {}, [ xml_text('RLINK "{0}"'.format(self._URI)), ]), self._SEPARATE_COMPLEX_FIELD, _run_element_with_text("this is a hyperlink"), self._END_COMPLEX_FIELD, ]) paragraph = _read_and_get_document_xml_element(element) assert_that(paragraph, is_paragraph(children=is_sequence( is_empty_run, self._is_empty_hyperlinked_run, self._is_hyperlinked_run(children=is_sequence( is_text("this is a hyperlink"), )), is_empty_run, ))) @istest def hyperlink_is_not_ended_by_end_of_nested_complex_field(self): element = xml_element("w:p", {}, [ self._BEGIN_COMPLEX_FIELD, self._HYPERLINK_INSTRTEXT, self._SEPARATE_COMPLEX_FIELD, self._BEGIN_COMPLEX_FIELD, xml_element("w:instrText", {}, [ xml_text(' AUTHOR "John Doe"') ]), self._SEPARATE_COMPLEX_FIELD, self._END_COMPLEX_FIELD, _run_element_with_text("this is a hyperlink"), self._END_COMPLEX_FIELD, ]) paragraph = _read_and_get_document_xml_element(element) assert_that(paragraph, is_paragraph(children=is_sequence( is_empty_run, self._is_empty_hyperlinked_run, self._is_empty_hyperlinked_run, self._is_empty_hyperlinked_run, self._is_empty_hyperlinked_run, self._is_hyperlinked_run(children=is_sequence( is_text("this is a hyperlink"), )), is_empty_run, ))) @istest def complex_field_nested_within_a_hyperlink_complex_field_is_wrapped_with_the_hyperlink(self): element = xml_element("w:p", {}, [ self._BEGIN_COMPLEX_FIELD, self._HYPERLINK_INSTRTEXT, self._SEPARATE_COMPLEX_FIELD, self._BEGIN_COMPLEX_FIELD, xml_element("w:instrText", {}, [ xml_text(' AUTHOR "John Doe"') ]), self._SEPARATE_COMPLEX_FIELD, _run_element_with_text("John Doe"), self._END_COMPLEX_FIELD, self._END_COMPLEX_FIELD, ]) paragraph = _read_and_get_document_xml_element(element) assert_that(paragraph, is_paragraph(children=is_sequence( is_empty_run, self._is_empty_hyperlinked_run, self._is_empty_hyperlinked_run, self._is_empty_hyperlinked_run, self._is_hyperlinked_run(children=is_sequence( is_text("John Doe"), )), self._is_empty_hyperlinked_run, is_empty_run, ))) @istest def field_without_separate_fld_char_is_ignored(self): element = xml_element("w:p", {}, [ self._BEGIN_COMPLEX_FIELD, self._HYPERLINK_INSTRTEXT, self._SEPARATE_COMPLEX_FIELD, self._BEGIN_COMPLEX_FIELD, self._END_COMPLEX_FIELD, _run_element_with_text("this is a hyperlink"), self._END_COMPLEX_FIELD, ]) paragraph = _read_and_get_document_xml_element(element) assert_that(paragraph, is_paragraph(children=is_sequence( is_empty_run, self._is_empty_hyperlinked_run, self._is_empty_hyperlinked_run, self._is_empty_hyperlinked_run, self._is_hyperlinked_run(children=is_sequence( is_text("this is a hyperlink"), )), is_empty_run, )))
def _text_element(value): return xml_element("w:t", {}, [xml_text(value)])
def text_nodes_are_ignored_when_reading_children(): element = xml_element("w:r", {}, [xml_text("[text]")]) assert_equal( documents.run([]), _read_and_get_document_xml_element(element) )
def text_nodes_are_ignored_when_reading_children(self): element = xml_element("w:r", {}, [xml_text("[text]")]) assert_equal( documents.run([]), _read_and_get_document_xml_element(element) )
def can_parse_text_element_before_new_tag(): xml = _parse_xml_string(b"<body>Hello!<br/></body>") assert_equal( xml_element( "body", {}, [xml_text("Hello!"), xml_element("br", {}, [])]), xml)
def can_parse_text_element(): xml = _parse_xml_string(b"<body>Hello!</body>") assert_equal(xml_element("body", {}, [xml_text("Hello!")]), xml)
def ignores_text_nodes(self): xml = xml_element("a", {}, [xml_text("Hello!")]) assert_equal(None, xml.find_child("b"))
def can_parse_text_element_before_new_tag(): xml = _parse_xml_string(b"<body>Hello!<br/></body>") assert_equal(xml_element("body", {}, [xml_text("Hello!"), xml_element("br", {}, [])]), xml)