pluginsEnabled[] = 'odt'; parent::setUp(); } /** * Test ODT XML style definition import. */ public function test_simple_odt_import() { $xml_code = ' '; $style = ODTStyle::importODTStyle($xml_code); $this->assertNotNull($style); $this->assertEquals($style->getFamily(), 'paragraph'); $this->assertEquals($style->getProperty('style-name'), 'Heading'); $this->assertEquals($style->getProperty('style-family'), 'paragraph'); $this->assertEquals($style->getProperty('style-parent'), 'Standard'); $this->assertEquals($style->getProperty('style-next'), 'Text_20_body'); $this->assertEquals($style->getProperty('style-class'), 'text'); $this->assertEquals($style->getProperty('margin-top'), '0.423cm'); $this->assertEquals($style->getProperty('margin-bottom'), '0.212cm'); $this->assertEquals($style->getProperty('keep-with-next'), 'always'); $this->assertEquals($style->getProperty('font-name'), 'Bitstream Vera Sans1'); $this->assertEquals($style->getProperty('font-size'), '14pt'); $this->assertEquals($style->getProperty('font-name-asian'), 'Bitstream Vera Sans2'); $this->assertEquals($style->getProperty('font-size-asian'), '14pt'); $this->assertEquals($style->getProperty('font-name-complex'), 'Bitstream Vera Sans2'); $this->assertEquals($style->getProperty('font-size-complex'), '14pt'); } /** * Test ODT XML style definition import and conversion to string. */ public function test_import_and_to_string() { $xml_code = ' '; // The order of attributes will change! This is OK. $expected = ''."\n"; $expected .= ''."\n"; $expected .= ''."\n"; $expected .= ''."\n"; $style = ODTStyle::importODTStyle($xml_code); $this->assertNotNull($style); $style_string = $style->toString(); $this->assertEquals($expected, $style_string); } /** * Test set and get of a property. */ public function test_set_and_get() { $xml_code = ' '; $style = ODTStyle::importODTStyle($xml_code); $this->assertNotNull($style); $style->setProperty('margin-top', '999cm'); $this->assertEquals($style->getProperty('margin-top'), '999cm'); } /** * Test properties import and conversion to string. */ public function test_import_properties_and_to_string() { $properties = array(); $properties ['style-name'] = 'Heading'; $properties ['style-parent'] = 'Standard'; $properties ['style-class'] = 'text'; $properties ['style-family'] = 'paragraph'; $properties ['style-next'] = 'Text_20_body'; $properties ['margin-top'] = '0.423cm'; $properties ['margin-bottom'] = '0.212cm'; $properties ['keep-with-next'] = 'always'; $properties ['font-size'] = '14pt'; $properties ['font-size-asian'] = '14pt'; $properties ['font-size-complex'] = '14pt'; $properties ['font-name'] = 'Bitstream Vera Sans1'; $properties ['font-name-asian'] = 'Bitstream Vera Sans2'; $properties ['font-name-complex'] = 'Bitstream Vera Sans2'; $expected = ''."\n"; $expected .= ''."\n"; $expected .= ''."\n"; $expected .= ''."\n"; $style = new ODTParagraphStyle(); $this->assertNotNull($style); $style->importProperties($properties, NULL); $style_string = $style->toString(); $this->assertEquals($expected, $style_string); } /** * Test default ODT XML style definition import and conversion to string. */ public function test_import_and_to_string_default() { $xml_code = ' '; // The order of attributes will change! This is OK. $expected = ''."\n"; $expected .= ''."\n"; $expected .= ''."\n"; $expected .= ''."\n"; $style = ODTStyle::importODTStyle($xml_code); $this->assertNotNull($style); $style_string = $style->toString(); $this->assertEquals(true, $style->isDefault()); $this->assertEquals($expected, $style_string); } /** * Test setProperty() and toString(). * This is a test case for issue #120. */ public function test_set_and_to_string() { $properties = array(); $properties ['style-name'] = 'Heading'; $properties ['style-parent'] = 'Standard'; $properties ['style-class'] = 'text'; $properties ['style-next'] = 'Text_20_body'; $properties ['margin-top'] = '0.423cm'; $properties ['margin-bottom'] = '0.212cm'; $properties ['keep-with-next'] = 'always'; $properties ['font-size'] = '14pt'; $properties ['font-size-asian'] = '14pt'; $properties ['font-size-complex'] = '14pt'; $properties ['font-name'] = 'Bitstream Vera Sans1'; $properties ['font-name-asian'] = 'Bitstream Vera Sans2'; $properties ['font-name-complex'] = 'Bitstream Vera Sans2'; $expected = ''."\n"; $expected .= ''."\n"; $expected .= ''."\n"; $expected .= ''."\n"; $style = new ODTParagraphStyle(); $this->assertNotNull($style); foreach ($properties as $key => $value) { $style->setProperty($key, $value); } $style_string = $style->toString(); // We should have the following elements: // style:style, style:paragraph-properties, style:text-properties $style_style = XMLUtil::getElementOpenTag('style:style', $style_string); $this->assertNotNull($style_style); $paragraph_props = XMLUtil::getElementOpenTag('style:paragraph-properties', $style_string); $this->assertNotNull($paragraph_props); $text_props = XMLUtil::getElementOpenTag('style:text-properties', $style_string); $this->assertNotNull($text_props); // Check attribute values of element "style:style", see $expected // Remark: attribute 'style:family' must always be present even if it was not set $attributes = array(); $found = XMLUtil::getAttributes($attributes, $style_style); $this->assertEquals(5, $found); $this->assertEquals('Heading', $attributes['style:name']); $this->assertEquals('Standard', $attributes['style:parent-style-name']); $this->assertEquals('text', $attributes['style:class']); $this->assertEquals('Text_20_body', $attributes['style:next-style-name']); $this->assertEquals('paragraph', $attributes['style:family']); // Check attribute values of element "style:paragraph-properties", see $expected $attributes = array(); $found = XMLUtil::getAttributes($attributes, $paragraph_props); $this->assertEquals(3, $found); $this->assertEquals('0.423cm', $attributes['fo:margin-top']); $this->assertEquals('0.212cm', $attributes['fo:margin-bottom']); $this->assertEquals('always', $attributes['fo:keep-with-next']); // Check attribute values of element "style:text-properties", see $expected $attributes = array(); $found = XMLUtil::getAttributes($attributes, $text_props); $this->assertEquals(6, $found); $this->assertEquals('14pt', $attributes['fo:font-size']); $this->assertEquals('14pt', $attributes['style:font-size-asian']); $this->assertEquals('14pt', $attributes['style:font-size-complex']); $this->assertEquals('Bitstream Vera Sans1', $attributes['style:font-name']); $this->assertEquals('Bitstream Vera Sans2', $attributes['style:font-name-asian']); $this->assertEquals('Bitstream Vera Sans2', $attributes['style:font-name-complex']); } /** * Test setProperty() and toString(), including tab-stops. * This is a test case for issue #123. */ public function test_set_toc_paragraph() { $indent = 2; $properties = array(); $properties ['style-name'] = 'TOC-Test'; $properties ['style-parent'] = 'Index'; $properties ['style-class'] = 'index'; $properties ['style-position'] = 17 - $indent .'cm'; $properties ['style-type'] = 'right'; $properties ['style-leader-style'] = 'dotted'; $properties ['style-leader-text'] = '.'; $properties ['margin-left'] = $indent.'cm'; $properties ['margin-right'] = '0cm'; $properties ['text-indent'] = '0cm'; // This variable is just used to show the expected result but is not used for test comparsion. // We explicitly parse the exported XML code to be independent from attributes position. // The attrbitues positions might change in the future if ODTParagraphStyle.php is changed. $expected = ''; $expected .= ''; $expected .= ''; $expected .= ''; $expected .= ''; $expected .= ''; $expected .= ''; // Create style, set all properties and get XML code of the style $style = new ODTParagraphStyle(); $this->assertNotNull($style); foreach ($properties as $key => $value) { $style->setProperty($key, $value); } $style_string = $style->toString(); // We should have the following elements: // style:style, style:paragraph-properties, style:text-properties, style:tab-stops $style_style = XMLUtil::getElementOpenTag('style:style', $style_string); $this->assertNotNull($style_style); $paragraph_props = XMLUtil::getElementOpenTag('style:paragraph-properties', $style_string); $paragraph = XMLUtil::getElement('style:paragraph-properties', $style_string); $this->assertNotNull($paragraph_props); $tab_stops_props = XMLUtil::getElement('style:tab-stops', $paragraph); $this->assertNotNull($tab_stops_props); $tab_stop_props = XMLUtil::getElementOpenTag('style:tab-stop', $tab_stops_props); $this->assertNotNull($tab_stop_props); // Check attribute values of element "style:style", see $expected // Remark: attribute 'style:family' must always be present even if it was not set $attributes = array(); $found = XMLUtil::getAttributes($attributes, $style_style); $this->assertEquals(4, $found); $this->assertEquals('TOC-Test', $attributes['style:name']); $this->assertEquals('Index', $attributes['style:parent-style-name']); $this->assertEquals('index', $attributes['style:class']); $this->assertEquals('paragraph', $attributes['style:family']); // Check attribute values of element "style:paragraph-properties", see $expected $attributes = array(); $found = XMLUtil::getAttributes($attributes, $paragraph_props); $this->assertEquals(3, $found); $this->assertEquals('2cm', $attributes['fo:margin-left']); $this->assertEquals('0cm', $attributes['fo:margin-right']); $this->assertEquals('0cm', $attributes['fo:text-indent']); // Check attribute values of element "style:tab-stop", see $expected $attributes = array(); $found = XMLUtil::getAttributes($attributes, $tab_stop_props); $this->assertEquals(4, $found); $this->assertEquals('15cm', $attributes['style:position']); $this->assertEquals('right', $attributes['style:type']); $this->assertEquals('dotted', $attributes['style:leader-style']); $this->assertEquals('.', $attributes['style:leader-text']); } }