function testHasmethodBehaviour() { /* SiteTree should have all of the methods that Versioned has, because Versioned is listed in SiteTree's * extensions */ $st = new SiteTree(); $cc = new ContentController($st); $this->assertTrue($st->hasMethod('publish'), "Test SiteTree has publish"); $this->assertTrue($st->hasMethod('migrateVersion'), "Test SiteTree has migrateVersion"); /* This relationship should be case-insensitive, too */ $this->assertTrue($st->hasMethod('PuBliSh'), "Test SiteTree has PuBliSh"); $this->assertTrue($st->hasMethod('MiGratEVersIOn'), "Test SiteTree has MiGratEVersIOn"); /* In a similar manner, all of SiteTree's methods should be available on ContentController, because $failover is set */ $this->assertTrue($cc->hasMethod('canView'), "Test ContentController has canView"); $this->assertTrue($cc->hasMethod('linkorcurrent'), "Test ContentController has linkorcurrent"); /* This 'method copying' is transitive, so all of Versioned's methods should be available on ContentControler. * Once again, this is case-insensitive */ $this->assertTrue($cc->hasMethod('MiGratEVersIOn'), "Test ContentController has MiGratEVersIOn"); /* The above examples make use of SiteTree, Versioned and ContentController. Let's test defineMethods() more * directly, with some sample objects */ $objs = array(); $objs[] = new ObjectTest_T2(); $objs[] = new ObjectTest_T2(); $objs[] = new ObjectTest_T2(); // All these methods should exist and return true $trueMethods = array('testMethod','otherMethod','someMethod','t1cMethod','normalMethod'); foreach($objs as $i => $obj) { foreach($trueMethods as $method) { $methodU = strtoupper($method); $methodL = strtoupper($method); $this->assertTrue($obj->hasMethod($method), "Test that obj#$i has method $method"); $this->assertTrue($obj->hasMethod($methodU), "Test that obj#$i has method $methodU"); $this->assertTrue($obj->hasMethod($methodL), "Test that obj#$i has method $methodL"); $this->assertTrue($obj->$method(), "Test that obj#$i can call method $method"); $this->assertTrue($obj->$methodU(), "Test that obj#$i can call method $methodU"); $this->assertTrue($obj->$methodL(), "Test that obj#$i can call method $methodL"); } $this->assertTrue($obj->hasMethod('Wrapping'), "Test that obj#$i has method Wrapping"); $this->assertTrue($obj->hasMethod('WRAPPING'), "Test that obj#$i has method WRAPPING"); $this->assertTrue($obj->hasMethod('wrapping'), "Test that obj#$i has method wrapping"); $this->assertEquals("Wrapping", $obj->Wrapping(), "Test that obj#$i can call method Wrapping"); $this->assertEquals("Wrapping", $obj->WRAPPING(), "Test that obj#$i can call method WRAPPIGN"); $this->assertEquals("Wrapping", $obj->wrapping(), "Test that obj#$i can call method wrapping"); } }
function testHasMethod() { $st = new SiteTree(); $cc = new ContentController($st); // Check that Versiond methods exist on SiteTree $this->assertTrue($st->hasMethod('publish'), "Test SiteTree has publish"); $this->assertTrue($st->hasMethod('migrateVersion'), "Test SiteTree has migrateVersion"); // Check for different casing $this->assertTrue($st->hasMethod('PuBliSh'), "Test SiteTree has PuBliSh"); $this->assertTrue($st->hasMethod('MiGratEVersIOn'), "Test SiteTree has MiGratEVersIOn"); // Check that SiteTree methods exist on ContentController (test failover) $this->assertTrue($cc->hasMethod('canView'), "Test ContentController has canView"); $this->assertTrue($cc->hasMethod('linkorcurrent'), "Test ContentController has linkorcurrent"); $this->assertTrue($cc->hasMethod('MiGratEVersIOn'), "Test ContentController has MiGratEVersIOn"); // Make use of the test object below. 1st instantiation is different from subsequent, so create a few $objs = array(); $objs[] = new ObjectTest_T2(); $objs[] = new ObjectTest_T2(); $objs[] = new ObjectTest_T2(); // All these methods should exist and return true $trueMethods = array('testMethod', 'otherMethod', 'someMethod', 't1cMethod', 'normalMethod'); foreach ($objs as $i => $obj) { foreach ($trueMethods as $method) { $methodU = strtoupper($method); $methodL = strtoupper($method); $this->assertTrue($obj->hasMethod($method), "Test that obj#{$i} has method {$method}"); $this->assertTrue($obj->hasMethod($methodU), "Test that obj#{$i} has method {$methodU}"); $this->assertTrue($obj->hasMethod($methodL), "Test that obj#{$i} has method {$methodL}"); $this->assertTrue($obj->{$method}(), "Test that obj#{$i} can call method {$method}"); $this->assertTrue($obj->{$methodU}(), "Test that obj#{$i} can call method {$methodU}"); $this->assertTrue($obj->{$methodL}(), "Test that obj#{$i} can call method {$methodL}"); } $this->assertTrue($obj->hasMethod('Wrapping'), "Test that obj#{$i} has method Wrapping"); $this->assertTrue($obj->hasMethod('WRAPPING'), "Test that obj#{$i} has method WRAPPING"); $this->assertTrue($obj->hasMethod('wrapping'), "Test that obj#{$i} has method wrapping"); $this->assertEquals("Wrapping", $obj->Wrapping(), "Test that obj#{$i} can call method Wrapping"); $this->assertEquals("Wrapping", $obj->WRAPPING(), "Test that obj#{$i} can call method WRAPPIGN"); $this->assertEquals("Wrapping", $obj->wrapping(), "Test that obj#{$i} can call method wrapping"); } }
/** * Builds a hierarchy from the current page to the top product group page * or holder. * * @param SiteTree $currPage The page to start from * * @return array * * @author Sascha Koehler <*****@*****.**> * @since 18.10.2012 */ public static function getPageHierarchy($currPage) { if (!array_key_exists('SiteTree_' . $currPage->ID, self::$pageHierarchy)) { $level = 0; $hierarchy = array('SiteTree_' . $currPage->ID => array('Page' => $currPage, 'Level' => $level)); while ($currPage->hasMethod('getParent') && $currPage->getParent()) { $parent = $currPage->getParent(); if ($parent) { $level++; $hierarchy['SiteTree_' . $parent->ID] = array('Page' => $parent, 'Level' => $level); $currPage = $parent; } else { break; } } self::$pageHierarchy['SiteTree_' . $currPage->ID] = array(); foreach ($hierarchy as $pageID => $pageInfo) { self::$pageHierarchy['SiteTree_' . $currPage->ID][$pageID] = array('Page' => $pageInfo['Page'], 'Level' => ($pageInfo['Level'] - $level) * -1); } } return self::$pageHierarchy['SiteTree_' . $currPage->ID]; }