true, 'keepNext' => false, 'keepLines' => false, 'pageBreakBefore' => false, 'contextualSpacing' => false, ]; foreach ($attributes as $key => $default) { $get = $this->findGetter($key, $default, $object); $object->setStyleValue($key, null); self::assertEquals($default, $object->$get()); $object->setStyleValue($key, ''); self::assertEquals($default, $object->$get()); } } /** * Test setting style values with normal value. */ public function testSetStyleValueNormal(): void { $object = new Paragraph(); $attributes = [ 'spaceAfter' => 240, 'spaceBefore' => 240, 'indent' => 1, 'hanging' => 1, 'spacing' => 120, 'spacingLineRule' => LineSpacingRule::AT_LEAST, 'basedOn' => 'Normal', 'next' => 'Normal', 'numStyle' => 'numStyle', 'numLevel' => 1, 'widowControl' => false, 'keepNext' => true, 'keepLines' => true, 'pageBreakBefore' => true, 'contextualSpacing' => true, 'textAlignment' => 'auto', 'bidi' => true, 'suppressAutoHyphens' => true, ]; foreach ($attributes as $key => $value) { $get = $this->findGetter($key, $value, $object); $object->setStyleValue("$key", $value); if ('indent' == $key || 'hanging' == $key) { $value = $value * 720; } self::assertEquals($value, $object->$get()); } } private function findGetter($key, $value, $object) { if (is_bool($value)) { if (method_exists($object, "is{$key}")) { return "is{$key}"; } elseif (method_exists($object, "has{$key}")) { return "has{$key}"; } } return "get{$key}"; } /** * Test get null style value. */ public function testGetNullStyleValue(): void { $object = new Paragraph(); $attributes = ['spacing', 'indent', 'hanging', 'spaceBefore', 'spaceAfter', 'textAlignment']; foreach ($attributes as $key) { $get = $this->findGetter($key, null, $object); self::assertNull($object->$get()); } } /** * Test tabs. */ public function testTabs(): void { $object = new Paragraph(); $object->setTabs([new Tab('left', 1550), new Tab('right', 5300)]); self::assertCount(2, $object->getTabs()); } /** * Line height. */ public function testLineHeight(): void { $phpWord = new PhpWord(); $section = $phpWord->addSection(); // Test style array $text = $section->addText('This is a test', [], ['line-height' => 2.0]); $doc = TestHelperDOCX::getDocument($phpWord); $element = $doc->getElement('/w:document/w:body/w:p/w:pPr/w:spacing'); $lineHeight = $element->getAttribute('w:line'); $lineRule = $element->getAttribute('w:lineRule'); self::assertEquals(480, $lineHeight); self::assertEquals('auto', $lineRule); // Test setter $text->getParagraphStyle()->setLineHeight(3.0); $doc = TestHelperDOCX::getDocument($phpWord); $element = $doc->getElement('/w:document/w:body/w:p/w:pPr/w:spacing'); $lineHeight = $element->getAttribute('w:line'); $lineRule = $element->getAttribute('w:lineRule'); self::assertEquals(720, $lineHeight); self::assertEquals('auto', $lineRule); } /** * Test setLineHeight validation. */ public function testLineHeightValidation(): void { $object = new Paragraph(); $object->setLineHeight('12.5pt'); self::assertEquals(12.5, $object->getLineHeight()); } /** * Test line height exception by using nonnumeric value. */ public function testLineHeightException(): void { $this->expectException(\PhpOffice\PhpWord\Exception\InvalidStyleException::class); $object = new Paragraph(); $object->setLineHeight('a'); } }