Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/PhpWord/Reader/Word2007/AbstractPart.php
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ private function readFormField(XMLReader $xmlReader, array $domNodes, $parent, $
}
}
$formField->setEntries($listEntries);
if (null !== $formField->getValue()) {
if (null !== $formField->getValue() && isset($listEntries[$formField->getValue()])) {
$formField->setText($listEntries[$formField->getValue()]);
}

Expand Down
8 changes: 6 additions & 2 deletions tests/PhpWordTests/Writer/HTML/Element/RubyTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ public function testWriteRubyHtml(): void

$dom = Helper::getAsHTML($phpWord, '', '', ['ruby', 'rt', 'rp']);
$xpath = new DOMXPath($dom);
self::assertEquals(1, $xpath->query('/html/body/div/ruby')->length);
$query = $xpath->query('/html/body/div/ruby');
self::assertNotFalse($query);
self::assertEquals(1, $query->length);
// ensure text is right
$rubyElement = $dom->getElementsByTagName('ruby')->item(0);
$rtElement = $dom->getElementsByTagName('rt')->item(0);
Expand Down Expand Up @@ -84,7 +86,9 @@ public function testWriteRubyHtmlParagraphStyle(): void

$dom = Helper::getAsHTML($phpWord, '', '', ['ruby', 'rt', 'rp']);
$xpath = new DOMXPath($dom);
self::assertEquals(1, $xpath->query('/html/body/div/ruby')->length);
$query = $xpath->query('/html/body/div/ruby');
self::assertNotFalse($query);
self::assertEquals(1, $query->length);
// ensure text is right
$rubyElement = $dom->getElementsByTagName('ruby')->item(0);
$rtElement = $dom->getElementsByTagName('rt')->item(0);
Expand Down
8 changes: 6 additions & 2 deletions tests/PhpWordTests/Writer/HTML/Element/TableTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

namespace PhpOffice\PhpWordTests\Writer\HTML\Element;

use DOMNode;
use DOMXPath;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\SimpleType\VerticalJc;
Expand Down Expand Up @@ -161,7 +162,9 @@ public function testWriteTableBorders(): void
self::assertEmpty(Helper::getNamedItem($xpath, '/html/body/div/table[6]', 'style'));
self::assertEquals('tstyle', Helper::getTextContent($xpath, '/html/body/div/table[6]', 'class'));
$style = Helper::getTextContent($xpath, '/html/head/style');
self::assertNotFalse(preg_match('/^[.]tstyle[^\\r\\n]*/m', $style, $matches));
$prg = preg_match('/^[.]tstyle[^\\r\\n]*/m', $style, $matches);
self::assertNotEmpty($matches);
self::assertNotFalse($prg);
self::assertEquals(".tstyle {table-layout: auto; $cssnone}", $matches[0]);
}

Expand Down Expand Up @@ -197,7 +200,7 @@ public function testWriteTableCellVAlign(): void
$cell3Query = $xpath->query('//table/tr/td[3]');
self::assertNotFalse($cell3Query);
self::assertCount(1, $cell3Query);

self::assertInstanceOf(DOMNode::class, $cell3Query->item(0));
$cell3Style = $cell3Query->item(0)->attributes->getNamedItem('style');
self::assertNull($cell3Style);
}
Expand Down Expand Up @@ -230,6 +233,7 @@ public function testWriteTableCellVMerge(): void
$cell3Query = $xpath->query('//table/tr[3]/td[1]');
self::assertNotFalse($cell3Query);
self::assertCount(1, $cell3Query);
self::assertInstanceOf(DOMNode::class, $cell3Query->item(0));
self::assertNull($cell3Query->item(0)->attributes->getNamedItem('rowspan'));
}
}
88 changes: 65 additions & 23 deletions tests/PhpWordTests/Writer/HTML/ElementTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

use DateTime;
use DOMDocument;
use DOMNode;
use DOMXPath;
use PhpOffice\PhpWord\Element\Text as TextElement;
use PhpOffice\PhpWord\Element\TextRun;
Expand Down Expand Up @@ -77,8 +78,12 @@ public function testWriteTrackChanges(): void
$dom = Helper::getAsHTML($phpWord);
$xpath = new DOMXPath($dom);

self::assertEquals(1, $xpath->query('/html/body/div/p[1]/ins')->length);
self::assertEquals(1, $xpath->query('/html/body/div/p[2]/del')->length);
$query = $xpath->query('/html/body/div/p[1]/ins');
self::assertNotFalse($query);
self::assertEquals(1, $query->length);
$query = $xpath->query('/html/body/div/p[2]/del');
self::assertNotFalse($query);
self::assertEquals(1, $query->length);
}

/**
Expand All @@ -101,14 +106,20 @@ public function testWriteColSpan(): void
$dom = Helper::getAsHTML($phpWord);
$xpath = new DOMXPath($dom);

self::assertEquals(1, $xpath->query('/html/body/div/table/tr[1]/td')->length);
self::assertEquals('2', $xpath->query('/html/body/div/table/tr/td[1]')->item(0)->attributes->getNamedItem('colspan')->textContent);
self::assertEquals(2, $xpath->query('/html/body/div/table/tr[2]/td')->length);

self::assertEquals('#6086B8', $xpath->query('/html/body/div/table/tr[1]/td')->item(0)->attributes->getNamedItem('bgcolor')->textContent);
self::assertEquals('#ffffff', $xpath->query('/html/body/div/table/tr[1]/td')->item(0)->attributes->getNamedItem('color')->textContent);
self::assertEquals('#ffffff', $xpath->query('/html/body/div/table/tr[2]/td')->item(0)->attributes->getNamedItem('bgcolor')->textContent);
self::assertNull($xpath->query('/html/body/div/table/tr[2]/td')->item(0)->attributes->getNamedItem('color'));
$query = $xpath->query('/html/body/div/table/tr[1]/td');
self::assertNotFalse($query);
self::assertCount(1, $query);
self::assertInstanceOf(DOMNode::class, $query->item(0));
self::assertEquals('2', $query->item(0)->attributes->getNamedItem('colspan')->textContent);
self::assertEquals('#6086B8', $query->item(0)->attributes->getNamedItem('bgcolor')->textContent);
self::assertEquals('#ffffff', $query->item(0)->attributes->getNamedItem('color')->textContent);

$query = $xpath->query('/html/body/div/table/tr[2]/td');
self::assertNotFalse($query);
self::assertCount(2, $query);
self::assertInstanceOf(DOMNode::class, $query->item(0));
self::assertEquals('#ffffff', $query->item(0)->attributes->getNamedItem('bgcolor')->textContent);
self::assertNull($query->item(0)->attributes->getNamedItem('color'));
}

/**
Expand All @@ -135,9 +146,18 @@ public function testWriteRowSpan(): void
$dom = Helper::getAsHTML($phpWord);
$xpath = new DOMXPath($dom);

self::assertEquals(2, $xpath->query('/html/body/div/table/tr[1]/td')->length);
self::assertEquals('3', $xpath->query('/html/body/div/table/tr[1]/td[1]')->item(0)->attributes->getNamedItem('rowspan')->textContent);
self::assertEquals(1, $xpath->query('/html/body/div/table/tr[2]/td')->length);
$query = $xpath->query('/html/body/div/table/tr[1]/td');
self::assertNotFalse($query);
self::assertCount(2, $query);

$query = $xpath->query('/html/body/div/table/tr[1]/td[1]');
self::assertNotFalse($query);
self::assertInstanceOf(DOMNode::class, $query->item(0));
self::assertEquals('3', $query->item(0)->attributes->getNamedItem('rowspan')->textContent);

$query = $xpath->query('/html/body/div/table/tr[2]/td');
self::assertNotFalse($query);
self::assertCount(1, $query);
}

/**
Expand Down Expand Up @@ -167,14 +187,29 @@ public function testWriteRowSpanAndColSpan(): void
$dom = Helper::getAsHTML($phpWord);
$xpath = new DOMXPath($dom);

self::assertEquals(3, $xpath->query('/html/body/div/table/tr[1]/td')->length);
self::assertEquals('2', $xpath->query('/html/body/div/table/tr[1]/td[2]')->item(0)->attributes->getNamedItem('colspan')->textContent);
self::assertEquals('3', $xpath->query('/html/body/div/table/tr[1]/td[3]')->item(0)->attributes->getNamedItem('rowspan')->textContent);

self::assertEquals(1, $xpath->query('/html/body/div/table/tr[2]/td')->length);
self::assertEquals('3', $xpath->query('/html/body/div/table/tr[2]/td[1]')->item(0)->attributes->getNamedItem('colspan')->textContent);

self::assertEquals(3, $xpath->query('/html/body/div/table/tr[3]/td')->length);
$query = $xpath->query('/html/body/div/table/tr[1]/td');
self::assertNotFalse($query);
self::assertCount(3, $query);

$query = $xpath->query('/html/body/div/table/tr[1]/td[2]');
self::assertNotFalse($query);
self::assertInstanceOf(DOMNode::class, $query->item(0));
self::assertEquals('2', $query->item(0)->attributes->getNamedItem('colspan')->textContent);

$query = $xpath->query('/html/body/div/table/tr[1]/td[3]');
self::assertNotFalse($query);
self::assertInstanceOf(DOMNode::class, $query->item(0));
self::assertEquals('3', $query->item(0)->attributes->getNamedItem('rowspan')->textContent);

$query = $xpath->query('/html/body/div/table/tr[2]/td[1]');
self::assertNotFalse($query);
self::assertCount(1, $query);
self::assertInstanceOf(DOMNode::class, $query->item(0));
self::assertEquals('3', $query->item(0)->attributes->getNamedItem('colspan')->textContent);

$query = $xpath->query('/html/body/div/table/tr[3]/td');
self::assertNotFalse($query);
self::assertCount(3, $query);
}

public function testWriteTitleTextRun(): void
Expand Down Expand Up @@ -240,7 +275,14 @@ public function testWriteTableLayout(): void
$dom = Helper::getAsHTML($phpWord);
$xpath = new DOMXPath($dom);

self::assertEquals('table-layout: fixed;', $xpath->query('/html/body/div/table[1]')->item(0)->attributes->getNamedItem('style')->textContent);
self::assertEquals('table-layout: auto;', $xpath->query('/html/body/div/table[2]')->item(0)->attributes->getNamedItem('style')->textContent);
$query = $xpath->query('/html/body/div/table[1]');
self::assertNotFalse($query);
self::assertInstanceOf(DOMNode::class, $query->item(0));
self::assertEquals('table-layout: fixed;', $query->item(0)->attributes->getNamedItem('style')->textContent);

$query = $xpath->query('/html/body/div/table[2]');
self::assertNotFalse($query);
self::assertInstanceOf(DOMNode::class, $query->item(0));
self::assertEquals('table-layout: auto;', $query->item(0)->attributes->getNamedItem('style')->textContent);
}
}
4 changes: 3 additions & 1 deletion tests/PhpWordTests/Writer/HTML/FontTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,9 @@ public function testWhiteSpace(): void
$xpath = new DOMXPath($dom);

$style = Helper::getTextContent($xpath, '/html/head/style');
self::assertNotFalse(preg_match('/^[*][^\\r\\n]*/m', $style, $matches));
$prg = preg_match('/^[*][^\\r\\n]*/m', $style, $matches);
self::assertNotEmpty($matches);
self::assertNotFalse($prg);
self::assertEquals('* {font-family: \'Arial\'; font-size: 12pt; color: #000000; white-space: pre-wrap;}', $matches[0]);
$prg = preg_match('/^[.]style1[^\\r\\n]*/m', $style, $matches);
self::assertNotEmpty($matches);
Expand Down
24 changes: 19 additions & 5 deletions tests/PhpWordTests/Writer/HTML/Helper.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,26 @@ public static function getTextContent(DOMXPath $xpath, string $query, string $na
if ($item2 === null) {
self::fail('Unexpected null return requesting item');
} elseif ($namedItem !== '') {
$item3 = $item2->attributes->getNamedItem($namedItem);
if ($item3 === null) {
self::fail('Unexpected null return requesting namedItem');
if (!property_exists($item2, 'attributes')) {
self::fail('Unexpected incorrect object');
} else {
$returnVal = $item3->textContent;
$item3 = $item2->attributes->getNamedItem($namedItem);
if ($item3 === null) {
self::fail('Unexpected null return requesting namedItem');
} else {
if (!property_exists($item3, 'textContent')) {
self::fail('Unexpected incorrect object');
} else {
$returnVal = $item3->textContent;
}
}
}
} else {
$returnVal = $item2->textContent;
if (!property_exists($item2, 'textContent')) {
self::fail('Unexpected incorrect object');
} else {
$returnVal = $item2->textContent;
}
}
}

Expand All @@ -66,6 +78,8 @@ public static function getNamedItem(DOMXPath $xpath, string $query, string $name
$item2 = $item->item($itemNumber);
if ($item2 === null) {
self::fail('Unexpected null return requesting item');
} elseif (!property_exists($item2, 'attributes')) {
self::fail('Unexpected incorrect object');
} else {
$returnValue = $item2->attributes->getNamedItem($namedItem);
}
Expand Down
12 changes: 9 additions & 3 deletions tests/PhpWordTests/Writer/HTML/ParagraphTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ public function testParagraphStyles(): void
self::assertEquals('indented', Helper::getTextContent($xpath, '/html/body/div/p[2]', 'class'));

$style = Helper::getTextContent($xpath, '/html/head/style');
self::assertNotFalse(preg_match('/^[.]indented[^\\r\\n]*/m', $style, $matches));
$prg = preg_match('/^[.]indented[^\\r\\n]*/m', $style, $matches);
self::assertNotEmpty($matches);
self::assertNotFalse($prg);
self::assertEquals('.indented {margin-left: 0.5in; margin-right: 0.6in;}', $matches[0]);
}

Expand Down Expand Up @@ -87,9 +89,13 @@ public function testParagraphAndFontStyles(): void
self::assertEquals('font-family: \'Verdana\'; font-size: 12pt;', Helper::getTextContent($xpath, '/html/body/div/p[2]/span', 'style'));

$style = Helper::getTextContent($xpath, '/html/head/style');
self::assertNotFalse(preg_match('/^[.]indented[^\\r\\n]*/m', $style, $matches));
$prg = preg_match('/^[.]indented[^\\r\\n]*/m', $style, $matches);
self::assertNotEmpty($matches);
self::assertNotFalse($prg);
self::assertEquals('.indented {margin-left: 0.5in; margin-right: 0.6in;}', $matches[0]);
self::assertNotFalse(preg_match('/^[.]style1[^\\r\\n]*/m', $style, $matches));
$prg = preg_match('/^[.]style1[^\\r\\n]*/m', $style, $matches);
self::assertNotEmpty($matches);
self::assertNotFalse($prg);
self::assertEquals('.style1 {font-family: \'Courier New\', monospace; font-size: 10pt; white-space: pre-wrap;}', $matches[0]);
}

Expand Down
Loading