/** * Merges two styles * * Every element has a cloned style object. However, the style will usually * change very litte element-to-element. Thus, it's a waste of space to have * hundreds of identical objects in memory. * * I'll merge this style object with $style. If a state is identical between * the two, I'll set this style's property to reference $style's property. * * @param Jstewmc\Rtf\Style $style the reference style * @return self * @since 0.1.0 */ public function merge(Style $style) { if ($style->getDocument() == $this->document) { $this->document = $style->getDocument(); } if ($style->getSection() == $this->section) { $this->section = $style->getSection(); } if ($style->getParagraph() == $this->paragraph) { $this->paragraph = $style->getParagraph(); } if ($style->getCharacter() == $this->character) { $this->character = $style->getCharacter(); } return; }
/** * merge() should not merge style if the states are different */ public function testMerge_doesNotMergeStyles_ifStatesAreDifferent() { $style1 = new Style(); $style2 = new Style(); // $style2->getDocument()->setSomething(); $style2->getSection()->setIndex(999); $style2->getParagraph()->setIndex(999); $style2->getCharacter()->setIsBold(true); $style2->merge($style1); // $this->assertNotSame($style1->getDocument(), $style2->getDocument()); $this->assertNotSame($style1->getSection(), $style2->getSection()); $this->assertNotSame($style1->getParagraph(), $style2->getParagraph()); $this->assertNotSame($style1->getCharacter(), $style2->getCharacter()); return; }