public function testCloningCallsClonerWithClonedObject() { $lazyObject = $this->lazyObject; $test = $this; $cb = $this->getMock('stdClass', array('cb')); $cb->expects($this->once())->method('cb')->will($this->returnCallback(function (LazyLoadableObject $proxy) use($lazyObject, $test) { /* @var $proxy LazyLoadableObject|Proxy */ $test->assertNotSame($proxy, $lazyObject); $proxy->__setInitializer(null); $proxy->publicAssociation = 'clonedAssociation'; })); $this->lazyObject->__setCloner($this->getClosure(array($cb, 'cb'))); $cloned = clone $this->lazyObject; $this->assertSame('clonedAssociation', $cloned->publicAssociation); $this->assertNotSame($cloned, $lazyObject, 'a clone of the lazy object is retrieved'); }