function testCopyFrom()
 {
     $original = new VirtualPageTest_ClassA();
     $original->MyInitiallyCopiedField = 'original';
     $original->MyVirtualField = 'original';
     $original->MyNonVirtualField = 'original';
     $original->write();
     $virtual = new VirtualPage();
     $virtual->CopyContentFromID = $original->ID;
     $virtual->write();
     $virtual->copyFrom($original);
     // Using getField() to avoid side effects from an overloaded __get()
     $this->assertEquals('original', $virtual->getField('MyInitiallyCopiedField'), 'Fields listed in $initially_copied_fields are copied on first copyFrom() invocation');
     $this->assertEquals('original', $virtual->getField('MyVirtualField'), 'Fields not listed in $initially_copied_fields are copied in copyFrom()');
     $this->assertNull($virtual->getField('MyNonVirtualField'), 'Fields listed in $non_virtual_fields are not copied in copyFrom()');
     $original->MyInitiallyCopiedField = 'changed';
     $original->write();
     $virtual->copyFrom($original);
     $this->assertEquals('original', $virtual->MyInitiallyCopiedField, 'Fields listed in $initially_copied_fields are not copied on subsequent copyFrom() invocations');
 }
 public function testVirtualPageAsAnAllowedChild()
 {
     $parentPage = new VirtualPageTest_PageWithAllowedChildren();
     $parentPage->write();
     $childPage = new VirtualPageTest_ClassA();
     $childPage->ParentID = $parentPage->ID;
     $childPage->write();
     // Check we're allowed to create a VirtualPage without linking it to a page yet
     $childVirtualPage = new VirtualPage();
     $childVirtualPage->ParentID = $parentPage->ID;
     try {
         $childVirtualPage->write();
     } catch (ValidationException $e) {
         $this->fail('Failed to write VirtualPage when it is an allowed child');
     }
     // Check that we can link a VirtualPage to a page type that's an allowed child
     $childVirtualPage->CopyContentFromID = $childPage->ID;
     try {
         $childVirtualPage->write();
     } catch (ValidationException $e) {
         $this->fail('Failed to write VirtualPage when it is linked to an allowed child');
     }
     // Check that we CAN'T link a VirtualPage to a page that is NOT an allowed child
     $disallowedChild = new VirtualPageTest_ClassB();
     $disallowedChild->write();
     $childVirtualPage->CopyContentFromID = $disallowedChild->ID;
     $isDetected = false;
     try {
         $childVirtualPage->write();
     } catch (ValidationException $e) {
         $this->assertContains('not allowed as child of this parent page', $e->getMessage());
         $isDetected = true;
     }
     if (!$isDetected) {
         $this->fail("Shouldn't be allowed to write a VirtualPage that links to a disallowed child");
     }
 }
 public function testVirtualPageFindsCorrectCasting()
 {
     $page = new VirtualPageTest_ClassA();
     $page->CastingTest = "Some content";
     $page->write();
     $virtual = new VirtualPage();
     $virtual->CopyContentFromID = $page->ID;
     $virtual->write();
     $this->assertEquals('VirtualPageTest_TestDBField', $virtual->castingHelper('CastingTest'));
     $this->assertEquals('SOME CONTENT', $virtual->obj('CastingTest')->forTemplate());
 }