Skip to content

Commit 64f0de9

Browse files
committed
Handle Style Objects Passed to Element Constructors
Original PR PHPOffice#2685 by @hazington.
1 parent 4f22889 commit 64f0de9

File tree

3 files changed

+35
-39
lines changed

3 files changed

+35
-39
lines changed

src/PhpWord/Element/AbstractElement.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ public function isInSection()
479479
}
480480

481481
/**
482-
* Set new style value.
482+
* Set new style value. PR #2685.
483483
*
484484
* @param mixed $styleObject Style object
485485
* @param null|AbstractStyle|array|string $styleValue Style value
@@ -489,14 +489,16 @@ public function isInSection()
489489
*/
490490
protected function setNewStyle($styleObject, $styleValue = null, $returnObject = false)
491491
{
492-
if (null !== $styleValue && is_array($styleValue)) {
492+
if ($styleValue instanceof AbstractStyle && get_class($styleValue) === get_class($styleObject)) {
493+
return $styleValue;
494+
}
495+
if (is_array($styleValue)) {
493496
$styleObject->setStyleByArray($styleValue);
494-
$style = $styleObject;
495-
} else {
496-
$style = $returnObject ? $styleObject : $styleValue;
497+
498+
return $styleObject;
497499
}
498500

499-
return $style;
501+
return $returnObject ? $styleObject : $styleValue;
500502
}
501503

502504
/**

tests/PhpWordTests/Element/CellTest.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,17 @@ public function testConstructWithStyleArray(): void
4848
self::assertNull($oCell->getWidth());
4949
}
5050

51+
/**
52+
* Test if the style object passed to the constructor is actually used.
53+
*/
54+
public function testConstructWithStyleObject(): void
55+
{
56+
$style = new \PhpOffice\PhpWord\Style\Cell();
57+
$oCell = new Cell(null, $style);
58+
59+
self::assertSame($style, $oCell->getStyle());
60+
}
61+
5162
/**
5263
* Add text.
5364
*/

tests/PhpWordTests/Writer/EPub3/Element/ImageTest.php

Lines changed: 16 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,60 +10,43 @@
1010

1111
class ImageTest extends TestCase
1212
{
13-
/**
14-
* @var XMLWriter
15-
*/
16-
private $xmlWriter;
17-
18-
/**
19-
* @var Image
20-
*/
21-
private $element;
22-
23-
/**
24-
* @var ImageWriter
25-
*/
26-
private $writer;
27-
28-
protected function setUp(): void
13+
public function testWrite(): void
2914
{
30-
$this->xmlWriter = new XMLWriter();
15+
$xmlWriter = new XMLWriter();
3116
$style = new ImageStyle();
3217
$style->setWidth(100);
3318
$style->setHeight(100);
34-
$this->element = new Image('tests/PhpWordTests/_files/images/earth.jpg', $style);
35-
$this->writer = new ImageWriter($this->xmlWriter, $this->element);
36-
}
37-
38-
public function testWrite(): void
39-
{
40-
$this->writer->write();
19+
$element = new Image('tests/PhpWordTests/_files/images/earth.jpg', $style);
20+
$writer = new ImageWriter($xmlWriter, $element);
21+
$writer->write();
4122

42-
$expected = '<p><img src="media/image.jpg" style="width:500px;height:500px;"/></p>';
43-
self::assertEquals($expected, $this->xmlWriter->getData());
23+
$expected = '<p><img src="media/image.jpg" style="width:100px;height:100px;"/></p>';
24+
self::assertSame($expected, $xmlWriter->getData());
4425
}
4526

4627
public function testWriteWithoutP(): void
4728
{
29+
$xmlWriter = new XMLWriter();
4830
$style = new ImageStyle();
4931
$style->setWidth(100);
5032
$style->setHeight(100);
51-
$this->element = new Image('tests/PhpWordTests/_files/images/earth.jpg', $style);
52-
$this->writer = new ImageWriter($this->xmlWriter, $this->element, true);
33+
$element = new Image('tests/PhpWordTests/_files/images/earth.jpg', $style);
34+
$writer = new ImageWriter($xmlWriter, $element, true);
5335

54-
$this->writer->write();
36+
$writer->write();
5537

56-
$expected = '<img src="media/image.jpg" style="width:500px;height:500px;"/>';
57-
self::assertEquals($expected, $this->xmlWriter->getData());
38+
$expected = '<img src="media/image.jpg" style="width:100px;height:100px;"/>';
39+
self::assertSame($expected, $xmlWriter->getData());
5840
}
5941

6042
public function testWriteWithInvalidElement(): void
6143
{
44+
$xmlWriter = new XMLWriter();
6245
$invalidElement = $this->createMock(\PhpOffice\PhpWord\Element\AbstractElement::class);
63-
$writer = new ImageWriter($this->xmlWriter, $invalidElement);
46+
$writer = new ImageWriter($xmlWriter, $invalidElement);
6447

6548
$writer->write();
6649

67-
self::assertEquals('', $this->xmlWriter->getData());
50+
self::assertSame('', $xmlWriter->getData());
6851
}
6952
}

0 commit comments

Comments
 (0)