public function testExtendedCan()
 {
     $extensions = $this->removeExtensions(Object::get_extensions('SilverStripe\\Security\\Member'));
     $member = $this->objFromFixture('SilverStripe\\Security\\Member', 'test');
     /* Normal behaviour is that you can't view a member unless canView() on an extension returns true */
     $this->assertFalse($member->canView());
     $this->assertFalse($member->canDelete());
     $this->assertFalse($member->canEdit());
     /* Apply a extension that allows viewing in any case (most likely the case for member profiles) */
     Member::add_extension('MemberTest_ViewingAllowedExtension');
     $member2 = $this->objFromFixture('SilverStripe\\Security\\Member', 'staffmember');
     $this->assertTrue($member2->canView());
     $this->assertFalse($member2->canDelete());
     $this->assertFalse($member2->canEdit());
     /* Apply a extension that denies viewing of the Member */
     Member::remove_extension('MemberTest_ViewingAllowedExtension');
     Member::add_extension('MemberTest_ViewingDeniedExtension');
     $member3 = $this->objFromFixture('SilverStripe\\Security\\Member', 'managementmember');
     $this->assertFalse($member3->canView());
     $this->assertFalse($member3->canDelete());
     $this->assertFalse($member3->canEdit());
     /* Apply a extension that allows viewing and editing but denies deletion */
     Member::remove_extension('MemberTest_ViewingDeniedExtension');
     Member::add_extension('MemberTest_EditingAllowedDeletingDeniedExtension');
     $member4 = $this->objFromFixture('SilverStripe\\Security\\Member', 'accountingmember');
     $this->assertTrue($member4->canView());
     $this->assertFalse($member4->canDelete());
     $this->assertTrue($member4->canEdit());
     Member::remove_extension('MemberTest_EditingAllowedDeletingDeniedExtension');
     $this->addExtensions($extensions);
 }
 public function testGetExtensions()
 {
     $this->assertEquals(Object::get_extensions('ObjectTest_ExtensionTest'), array('oBjEcTTEST_ExtendTest1', "ObjectTest_ExtendTest2"));
     $this->assertEquals(Object::get_extensions('ObjectTest_ExtensionTest', true), array('oBjEcTTEST_ExtendTest1', "ObjectTest_ExtendTest2('FOO', 'BAR')"));
     $inst = new ObjectTest_ExtensionTest();
     $extensions = $inst->getExtensionInstances();
     $this->assertEquals(count($extensions), 2);
     $this->assertInstanceOf('ObjectTest_ExtendTest1', $extensions['ObjectTest_ExtendTest1']);
     $this->assertInstanceOf('ObjectTest_ExtendTest2', $extensions['ObjectTest_ExtendTest2']);
     $this->assertInstanceOf('ObjectTest_ExtendTest1', $inst->getExtensionInstance('ObjectTest_ExtendTest1'));
     $this->assertInstanceOf('ObjectTest_ExtendTest2', $inst->getExtensionInstance('ObjectTest_ExtendTest2'));
 }