/** * Tests checking if attribute has to be replaced on persistence * * @return void */ public function testIsReplaced() { $test = new NodeAttribute('test'); $test->add(array('v1', 'v2', 'v3', 'v4')); $test->snapshot(); $test->add('v5'); $test->remove('v3'); $test->remove('v2'); $test->add('v3'); $this->assertEquals(array('v5'), $test->getDiffAdditions(), 'Tracking works as usual'); $this->assertEquals(array('v2'), $test->getDiffDeletions(), 'Tracking works as usual'); $this->assertEquals(array('v3'), $test->getDiffReplacements(), 'Tracking works as usual'); $this->assertFalse($test->isReplaced(), 'We have just been adding & removing values'); $test->set(array('v2', 'v6')); $this->assertEquals(array(), array_merge($test->getDiffAdditions(), $test->getDiffDeletions(), $test->getDiffReplacements()), 'Diff got cleared'); $this->assertTrue($test->isReplaced(), 'Object is marked for a complete replacement'); $test->add('v5'); $test->remove('v2'); $this->assertEquals(array(), array_merge($test->getDiffAdditions(), $test->getDiffDeletions(), $test->getDiffReplacements()), 'Diff not updated'); $this->assertTrue($test->isReplaced(), 'Object is still marked for a replacement'); $test->snapshot(); $test->add('v2'); $this->assertEquals(array('v2'), $test->getDiffAdditions(), 'Diff tracked again'); $this->assertFalse($test->isReplaced(), 'We are no more in a replacement case'); }