Repository URL to install this package:
|
Version:
0.9.10 ▾
|
# coding: utf-8
from __future__ import (
absolute_import,
print_function,
unicode_literals,
)
from pydocx.test import DocumentGeneratorTestCase
from pydocx.test.utils import WordprocessingDocumentFactory
from pydocx.openxml.packaging import MainDocumentPart, StyleDefinitionsPart
class StyleBasedOnTestCase(DocumentGeneratorTestCase):
def test_style_chain_ends_when_loop_is_detected(self):
style_xml = '''
<style styleId="one">
<basedOn val="three"/>
<rPr>
<b val="on"/>
</rPr>
</style>
<style styleId="two">
<basedOn val="one"/>
</style>
<style styleId="three">
<basedOn val="two"/>
</style>
'''
document_xml = '''
<p>
<pPr>
<pStyle val="three"/>
</pPr>
<r>
<t>aaa</t>
</r>
</p>
'''
document = WordprocessingDocumentFactory()
document.add(StyleDefinitionsPart, style_xml)
document.add(MainDocumentPart, document_xml)
expected_html = '<p><strong>aaa</strong></p>'
self.assert_document_generates_html(document, expected_html)
def test_styles_are_inherited(self):
style_xml = '''
<style styleId="one">
<rPr>
<b val="on"/>
</rPr>
</style>
<style styleId="two">
<basedOn val="one"/>
<rPr>
<i val="on"/>
</rPr>
</style>
<style styleId="three">
<basedOn val="two"/>
<rPr>
<u val="single"/>
</rPr>
</style>
'''
document_xml = '''
<p>
<pPr>
<pStyle val="three"/>
</pPr>
<r>
<t>aaa</t>
</r>
</p>
'''
document = WordprocessingDocumentFactory()
document.add(StyleDefinitionsPart, style_xml)
document.add(MainDocumentPart, document_xml)
expected_html = '''
<p>
<span class="pydocx-underline">
<em>
<strong>aaa</strong>
</em>
</span>
</p>
'''
self.assert_document_generates_html(document, expected_html)
def test_basedon_ignored_for_character_based_on_paragraph(self):
# character styles may only be based on other character styles
# otherwise, the based on specification should be ignored
style_xml = '''
<style styleId="one" type="paragraph">
<rPr>
<b val="on"/>
</rPr>
</style>
<style styleId="two" type="character">
<basedOn val="one"/>
<rPr>
<i val="on"/>
</rPr>
</style>
'''
document_xml = '''
<p>
<r>
<rPr>
<rStyle val="two"/>
</rPr>
<t>aaa</t>
</r>
</p>
'''
document = WordprocessingDocumentFactory()
document.add(StyleDefinitionsPart, style_xml)
document.add(MainDocumentPart, document_xml)
expected_html = '<p><em>aaa</em></p>'
self.assert_document_generates_html(document, expected_html)
def test_basedon_ignored_for_paragraph_based_on_character(self):
# paragraph styles may only be based on other paragraph styles
# otherwise, the based on specification should be ignored
style_xml = '''
<style styleId="one" type="character">
<rPr>
<b val="on"/>
</rPr>
</style>
<style styleId="two" type="paragraph">
<basedOn val="one"/>
<rPr>
<i val="on"/>
</rPr>
</style>
'''
document_xml = '''
<p>
<pPr>
<pStyle val="two"/>
</pPr>
<r>
<t>aaa</t>
</r>
</p>
'''
document = WordprocessingDocumentFactory()
document.add(StyleDefinitionsPart, style_xml)
document.add(MainDocumentPart, document_xml)
expected_html = '<p><em>aaa</em></p>'
self.assert_document_generates_html(document, expected_html)