Merge remote branch 'origin/master'

This commit is contained in:
Sam Minnee 2011-02-22 10:57:59 +13:00
commit d045970d83
26 changed files with 77 additions and 128 deletions

View File

@ -89,7 +89,7 @@ class TestRunner extends Controller {
if (!self::$default_reporter) self::set_reporter(Director::is_cli() ? 'CliDebugView' : 'DebugView');
if(!PhpUnitWrapper::has_php_unit()) {
die("Please install PHPUnit using pear");
die("Please install PHPUnit 3.5.0 or newer using pear\n");
}
}

View File

@ -22,7 +22,7 @@ function fileExistsInIncludePath($filename) {
/**
* PHPUnit Wrapper class.
* Base class for PHPUnit wrapper classes to support different PHPUnit versions.
* The current implementation supports PHPUnit 3.4 and PHPUnit 3.5.
* The current implementation supports PHPUnit 3.5.
*/
class PhpUnitWrapper implements IPhpUnitWrapper {
@ -48,13 +48,6 @@ class PhpUnitWrapper implements IPhpUnitWrapper {
* @var PHPUnit_Framework_TestListener
*/
private $reporter = null;
/**
* Shows the version, implemented by the phpunit-wrapper class instance.
* This instance implements no phpunit, the version is null.
* @var String
*/
protected $version = null;
private static $phpunit_wrapper = null;
@ -123,11 +116,10 @@ class PhpUnitWrapper implements IPhpUnitWrapper {
}
/**
* Getter for $version (@see $version).
* @return String
*/
public function getVersion() {
return $this->version;
return (method_exists('PHPUnit_Runner_Version', 'id')) ? PHPUnit_Runner_Version::id() : null;
}
/**
@ -140,25 +132,21 @@ class PhpUnitWrapper implements IPhpUnitWrapper {
if (self::$phpunit_wrapper == null) {
if (fileExistsInIncludePath("/PHPUnit/Autoload.php")) {
self::$phpunit_wrapper = new PhpUnitWrapper_3_5();
} else
if (fileExistsInIncludePath("/PHPUnit/Framework.php")) {
self::$phpunit_wrapper = new PhpUnitWrapper_3_4();
} else {
self::$phpunit_wrapper = new PhpUnitWrapper();
self::$phpunit_wrapper = new PhpUnitWrapper();
}
self::$phpunit_wrapper->init();
}
return self::$phpunit_wrapper;
}
/**
* Returns true if one of the two supported PHPUNIT versions is installed.
*
* @return boolean true if PHPUnit has been installed on the environment.
*/
static function has_php_unit() {
return (Bool) self::inst()->getVersion();
$version = self::inst()->getVersion();
return ($version && version_compare($version, '3.5.0', '>='));
}
/**

View File

@ -1,63 +0,0 @@
<?php
/**
* @package sapphire
* @subpackage dev
*/
/**
* PHPUnit Wrapper class. Implements the correct behaviour for PHPUnit V3.4.
*/
class PhpUnitWrapper_3_4 extends PhpUnitWrapper {
protected $version = 'PhpUnit V3.4';
/**
* Initialise the wrapper class.
*/
public function init() {
parent::init();
require_once 'PHPUnit/Framework.php';
require_once 'PHPUnit/Util/Report.php';
require_once 'PHPUnit/TextUI/TestRunner.php';
}
/**
* Overwrites beforeRunTests. Initiates coverage-report generation if
* $coverage has been set to true (@see setCoverageStatus).
*/
protected function beforeRunTests() {
if($this->getCoverageStatus()) {
// blacklist selected folders from coverage report
foreach(TestRunner::$coverage_filter_dirs as $dir) {
PHPUnit_Util_Filter::addDirectoryToFilter(BASE_PATH . '/' . $dir);
}
$this->getFrameworkTestResults()->collectCodeCoverageInformation(true);
}
}
/**
* Overwrites aferRunTests. Creates coverage report and clover report
* if required.
*/
protected function aferRunTests() {
if($this->getCoverageStatus()) {
if(!file_exists(ASSETS_PATH . '/coverage-report')) {
mkdir(ASSETS_PATH . '/coverage-report');
}
$ret = PHPUnit_Util_Report::render($this->getFrameworkTestResults(), ASSETS_PATH . '/coverage-report/');
$coverageApp = ASSETS_PATH . '/coverage-report/' . preg_replace('/[^A-Za-z0-9]/','_',preg_replace('/(\/$)|(^\/)/','',Director::baseFolder())) . '.html';
$coverageTemplates = ASSETS_PATH . '/coverage-report/' . preg_replace('/[^A-Za-z0-9]/','_',preg_replace('/(\/$)|(^\/)/','',realpath(TEMP_FOLDER))) . '.html';
echo "<p>Coverage reports available here:<ul>
<li><a href=\"$coverageApp\">Coverage report of the application</a></li>
<li><a href=\"$coverageTemplates\">Coverage report of the templates</a></li>
</ul>";
}
}
}

View File

@ -6,8 +6,6 @@
class PhpUnitWrapper_3_5 extends PhpUnitWrapper {
protected $version = 'PhpUnit V3.5';
protected $coverage = null;
protected static $test_name = 'SapphireTest';

View File

@ -76,7 +76,7 @@ This will add `sapphire`, `cms` and the `blackcandy` theme to your project.
As a fallback solution, you can simply download all necessary files without any dependency management through piston.
This is handy if you have an existing project in version control, and want a one-off snapshot
of the modules that won't be updated frequently.
of the modules. The only way to update this codebase later is to overwrite the whole folder, with no easy way to track and re-apply any changes made to it since.
cd my-silverstripe-project/
tools/new-project -m flat

View File

@ -278,7 +278,7 @@ class Group extends DataObject {
*/
public function collateAncestorIDs() {
$parent = $this;
while(isset($parent)) {
while(isset($parent) && $parent instanceof Group) {
$items[] = $parent->ID;
$parent = $parent->Parent;
}

View File

@ -41,10 +41,10 @@ class DataObjectDecoratorTest extends SapphireTest {
$object = DataObject::get_one('DataObjectDecoratorTest_RelatedObject', "\"ContactID\" = {$contactID}");
$this->assertNotNull($object, 'Related object not null');
$this->assertType('DataObjectDecoratorTest_Member', $object->Contact(), 'Related contact is a member dataobject');
$this->assertType('DataObjectDecoratorTest_Member', $object->getComponent('Contact'), 'getComponent does the same thing as Contact()');
$this->assertInstanceOf('DataObjectDecoratorTest_Member', $object->Contact(), 'Related contact is a member dataobject');
$this->assertInstanceOf('DataObjectDecoratorTest_Member', $object->getComponent('Contact'), 'getComponent does the same thing as Contact()');
$this->assertType('DataObjectDecoratorTest_RelatedObject', $contact->RelatedObjects()->First());
$this->assertInstanceOf('DataObjectDecoratorTest_RelatedObject', $contact->RelatedObjects()->First());
$this->assertEquals("Lorem ipsum dolor", $contact->RelatedObjects()->First()->FieldOne);
$this->assertEquals("Random notes", $contact->RelatedObjects()->First()->FieldTwo);
$contact->delete();
@ -143,7 +143,7 @@ class DataObjectDecoratorTest extends SapphireTest {
function testDbObjectOnDecoratedFields() {
$member = $this->objFromFixture('DataObjectDecoratorTest_Member', 'member1');
$this->assertNotNull($member->dbObject('Website'));
$this->assertType('Varchar', $member->dbObject('Website'));
$this->assertInstanceOf('Varchar', $member->dbObject('Website'));
}
function testDecoratorCanBeAppliedToDataObject() {

View File

@ -702,7 +702,7 @@ class DataObjectTest extends SapphireTest {
$changedFields = $changedPage->getChangedFields();
// Don't write the record, it will reset changed fields
$this->assertType('RedirectorPage', $changedPage);
$this->assertInstanceOf('RedirectorPage', $changedPage);
$this->assertEquals($changedPage->ClassName, 'RedirectorPage');
$this->assertEquals($changedPage->RedirectionType, 'Internal');
//$this->assertEquals($changedPage->RecordClassName, 'RedirectorPage');
@ -711,7 +711,7 @@ class DataObjectTest extends SapphireTest {
$this->assertEquals($changedFields['ClassName']['after'], 'RedirectorPage');
$changedPage->write();
$this->assertType('RedirectorPage', $changedPage);
$this->assertInstanceOf('RedirectorPage', $changedPage);
$this->assertEquals($changedPage->ClassName, 'RedirectorPage');
}

View File

@ -177,19 +177,19 @@ class ObjectTest extends SapphireTest {
$inst = new ObjectTest_ExtensionTest();
$extensions = $inst->getExtensionInstances();
$this->assertEquals(count($extensions), 2);
$this->assertType(
$this->assertInstanceOf(
'ObjectTest_ExtendTest1',
$extensions['ObjectTest_ExtendTest1']
);
$this->assertType(
$this->assertInstanceOf(
'ObjectTest_ExtendTest2',
$extensions['ObjectTest_ExtendTest2']
);
$this->assertType(
$this->assertInstanceOf(
'ObjectTest_ExtendTest1',
$inst->getExtensionInstance('ObjectTest_ExtendTest1')
);
$this->assertType(
$this->assertInstanceOf(
'ObjectTest_ExtendTest2',
$inst->getExtensionInstance('ObjectTest_ExtendTest2')
);

View File

@ -22,7 +22,7 @@ class RequestHandlingTest extends FunctionalTest {
function testConstructedWithNullRequest() {
$r = new RequestHandler();
$this->assertType('NullHTTPRequest', $r->getRequest());
$this->assertInstanceOf('NullHTTPRequest', $r->getRequest());
}
function testRequestHandlerChainingAllParams() {

View File

@ -108,7 +108,7 @@ class SearchContextTest extends SapphireTest {
$project = $results->First();
$this->assertType('SearchContextTest_Project', $project);
$this->assertInstanceOf('SearchContextTest_Project', $project);
$this->assertEquals("Blog Website", $project->Name);
$this->assertEquals(2, $project->Actions()->Count());

View File

@ -64,7 +64,7 @@ class SiteTreeActionsTest extends FunctionalTest {
// Get the live version of the page
$page = Versioned::get_one_by_stage("SiteTree", "Live", "\"SiteTree\".\"ID\" = $pageID");
$this->assertType("SiteTree", $page);
$this->assertInstanceOf("SiteTree", $page);
// Check that someone without the right permission can't delete the page
$editor = $this->objFromFixture('Member', 'cmsnodeleteeditor');
@ -116,7 +116,7 @@ class SiteTreeActionsTest extends FunctionalTest {
// Get the live version of the page
$page = Versioned::get_one_by_stage("SiteTree", "Live", "\"SiteTree\".\"ID\" = $pageID");
$this->assertType('SiteTree', $page);
$this->assertInstanceOf('SiteTree', $page);
$actionsArr = $page->getCMSActions()->column('Name');

View File

@ -143,7 +143,7 @@ class SiteTreeTest extends SapphireTest {
$child->Title = 'Page Title';
$child->setParent($parent);
$this->assertType("SiteTree", $child->Parent);
$this->assertInstanceOf("SiteTree", $child->Parent);
$this->assertEquals("Section Title", $child->Parent->Title);
}
@ -152,7 +152,7 @@ class SiteTreeTest extends SapphireTest {
$child = new SiteTreeTest_PageNode();
$child->setParent($parent);
$this->assertType('SiteTreeTest_PageNode', $child->Parent);
$this->assertInstanceOf('SiteTreeTest_PageNode', $child->Parent);
}
/**

View File

@ -165,7 +165,7 @@ class DirectorTest extends SapphireTest {
$url = 'DirectorTestRequest_Controller/' . sprintf($testfunction, ucfirst($method)) . '?' . http_build_query($fixture);
$getresponse = Director::test($url, $fixture, null, strtoupper($method), null, null, $fixture);
$this->assertType('SS_HTTPResponse', $getresponse, 'Director::test() returns SS_HTTPResponse');
$this->assertInstanceOf('SS_HTTPResponse', $getresponse, 'Director::test() returns SS_HTTPResponse');
$this->assertEquals($fixture['somekey'], $getresponse->getBody(), 'Director::test() ' . $testfunction);
}
}

View File

@ -18,18 +18,18 @@ class SS_LogTest extends SapphireTest {
function testExistingWriter() {
$writers = SS_Log::get_writers();
$this->assertType('array', $writers);
$this->assertInternalType('array', $writers);
$this->assertEquals(2, count($writers));
}
function testRemoveWriter() {
SS_Log::remove_writer($this->testEmailWriter);
$writers = SS_Log::get_writers();
$this->assertType('array', $writers);
$this->assertInternalType('array', $writers);
$this->assertEquals(1, count($writers));
SS_Log::remove_writer($this->testFileWriter);
$writers = SS_Log::get_writers();
$this->assertType('array', $writers);
$this->assertInternalType('array', $writers);
$this->assertEquals(0, count($writers));
}

View File

@ -27,10 +27,10 @@ class FileTest extends SapphireTest {
$this->assertEquals($testfilePath, $file->Filename, '"Filename" property remains unchanged');
// TODO This should be auto-detected, see File->updateFilesystem()
// $this->assertType('Folder', $file->Parent(), 'Parent folder is created in database');
// $this->assertInstanceOf('Folder', $file->Parent(), 'Parent folder is created in database');
// $this->assertFileExists($file->Parent()->getFullPath(), 'Parent folder is created on filesystem');
// $this->assertEquals('FileTest', $file->Parent()->Name);
// $this->assertType('Folder', $file->Parent()->Parent(), 'Grandparent folder is created in database');
// $this->assertInstanceOf('Folder', $file->Parent()->Parent(), 'Grandparent folder is created in database');
// $this->assertFileExists($file->Parent()->Parent()->getFullPath(), 'Grandparent folder is created on filesystem');
// $this->assertEquals('assets', $file->Parent()->Parent()->Name);
}

View File

@ -243,12 +243,12 @@ class FormTest extends FunctionalTest {
SecurityToken::enable();
$form1 = $this->getStubForm();
$this->assertType('SecurityToken', $form1->getSecurityToken());
$this->assertInstanceOf('SecurityToken', $form1->getSecurityToken());
SecurityToken::disable();
$form2 = $this->getStubForm();
$this->assertType('NullSecurityToken', $form2->getSecurityToken());
$this->assertInstanceOf('NullSecurityToken', $form2->getSecurityToken());
SecurityToken::enable();
}
@ -257,7 +257,7 @@ class FormTest extends FunctionalTest {
SecurityToken::enable();
$formWithToken = $this->getStubForm();
$this->assertType(
$this->assertInstanceOf(
'HiddenField',
$formWithToken->Fields()->fieldByName(SecurityToken::get_default_name()),
'Token field added by default'

View File

@ -21,14 +21,14 @@ class MoneyTest extends SapphireTest {
function testMoneyFieldsReturnedAsObjects() {
$obj = $this->objFromFixture('MoneyTest_DataObject', 'test1');
$this->assertType('Money', $obj->MyMoney);
$this->assertInstanceOf('Money', $obj->MyMoney);
}
function testLoadFromFixture() {
$obj = $this->objFromFixture('MoneyTest_DataObject', 'test1');
$this->assertType('Money', $obj->MyMoney);
$this->assertInstanceOf('Money', $obj->MyMoney);
$this->assertEquals($obj->MyMoney->getCurrency(), 'EUR');
$this->assertEquals($obj->MyMoney->getAmount(), 1.23);
}
@ -42,7 +42,7 @@ class MoneyTest extends SapphireTest {
$this->assertNotContains('MyMoney', array_keys($changed));
// With changes
$this->assertType('Money', $obj->MyMoney);
$this->assertInstanceOf('Money', $obj->MyMoney);
$obj->MyMoney->setAmount(99);
$changed = $obj->getChangedFields();
$this->assertContains('MyMoney', array_keys($changed));
@ -280,7 +280,7 @@ class MoneyTest extends SapphireTest {
function testLoadIntoDataObject() {
$obj = new MoneyTest_DataObject();
$this->assertType('Money', $obj->obj('MyMoney'));
$this->assertInstanceOf('Money', $obj->obj('MyMoney'));
$m = new Money();
$m->setValue(array(

View File

@ -39,7 +39,7 @@ class SiteConfigTest extends SapphireTest {
$configEn = SiteConfig::current_site_config();
$configFr = SiteConfig::current_site_config('fr_FR');
$this->assertType('SiteConfig', $configFr);
$this->assertInstanceOf('SiteConfig', $configFr);
$this->assertEquals($configFr->Locale, 'fr_FR');
$this->assertEquals($configFr->Title, $configEn->Title, 'Copies title from existing config');
}

View File

@ -220,7 +220,7 @@ class TranslatableTest extends FunctionalTest {
// first test with default language
$fields = $pageOrigLang->getCMSFields();
$this->assertType(
$this->assertInstanceOf(
'TextField',
$fields->dataFieldByName('Title'),
'Translatable doesnt modify fields if called in default language (e.g. "non-translation mode")'
@ -233,13 +233,13 @@ class TranslatableTest extends FunctionalTest {
// then in "translation mode"
$pageTranslated = $pageOrigLang->createTranslation('fr_FR');
$fields = $pageTranslated->getCMSFields();
$this->assertType(
$this->assertInstanceOf(
'TextField',
$fields->dataFieldByName('Title'),
'Translatable leaves original formfield intact in "translation mode"'
);
$readonlyField = $fields->dataFieldByName('Title')->performReadonlyTransformation();
$this->assertType(
$this->assertInstanceOf(
$readonlyField->class,
$fields->dataFieldByName('Title_original'),
'Translatable adds the original value as a ReadonlyField in "translation mode"'
@ -793,7 +793,7 @@ class TranslatableTest extends FunctionalTest {
"Users with canEdit() and TRANSLATE_ALL permission can't create a new translation if locale is not in Translatable::get_allowed_locales()"
);
$this->assertType(
$this->assertInstanceOf(
'Page',
$testPage->createTranslation('ja_JP')
);

View File

@ -94,11 +94,11 @@ class VersionedTest extends SapphireTest {
function testVersionedFieldsAdded() {
$obj = new VersionedTest_DataObject();
// Check that the Version column is added as a full-fledged column
$this->assertType('Int', $obj->dbObject('Version'));
$this->assertInstanceOf('Int', $obj->dbObject('Version'));
$obj2 = new VersionedTest_Subclass();
// Check that the Version column is added as a full-fledged column
$this->assertType('Int', $obj2->dbObject('Version'));
$this->assertInstanceOf('Int', $obj2->dbObject('Version'));
}
function testPublishCreateNewVersion() {

View File

@ -84,6 +84,32 @@ class GroupTest extends FunctionalTest {
$this->assertNull(DataObject::get('Group', "\"ID\"={$adminGroup->ID}"), 'Group is removed');
$this->assertNull(DataObject::get('Permission',"\"GroupID\"={$adminGroup->ID}"), 'Permissions removed along with the group');
}
function testCollateAncestorIDs() {
$parentGroup = $this->objFromFixture('Group', 'parentgroup');
$childGroup = $this->objFromFixture('Group', 'childgroup');
$orphanGroup = new Group();
$orphanGroup->ParentID = 99999;
$orphanGroup->write();
$this->assertEquals(
array($parentGroup->ID),
$parentGroup->collateAncestorIDs(),
'Root node only contains itself'
);
$this->assertEquals(
array($childGroup->ID, $parentGroup->ID),
$childGroup->collateAncestorIDs(),
'Contains parent nodes, with child node first'
);
$this->assertEquals(
array($orphanGroup->ID),
$orphanGroup->collateAncestorIDs(),
'Orphaned nodes dont contain invalid parent IDs'
);
}
}
class GroupTest_Member extends Member implements TestOnly {

View File

@ -150,7 +150,7 @@ class MemberTest extends FunctionalTest {
$this->assertTrue($record->checkPassword('test1'), "Password test1 not found in MemberRecord");
$record = $passwords->next();
$this->assertType('DataObject', $record);
$this->assertInstanceOf('DataObject', $record);
$this->assertTrue($record->checkPassword('1nitialPassword'), "Password 1nitialPassword not found in MemberRecord");
}

View File

@ -3,7 +3,7 @@ class PasswordEncryptorTest extends SapphireTest {
function testCreateForCode() {
PasswordEncryptor::register('test', 'PasswordEncryptorTest_TestEncryptor');
$e = PasswordEncryptor::create_for_algorithm('test');
$this->assertType(
$this->assertInstanceOf(
'PasswordEncryptorTest_TestEncryptor',
$e
);

View File

@ -40,7 +40,7 @@ class SecurityDefaultAdminTest extends SapphireTest {
$admin = Security::findAnAdministrator();
$this->assertType('Member', $admin);
$this->assertInstanceOf('Member', $admin);
$this->assertTrue(Permission::checkMember($admin, 'ADMIN'));
$this->assertNull($admin->Email);
$this->assertNull($admin->Password);

View File

@ -41,7 +41,7 @@ class SecurityTokenTest extends SapphireTest {
function testInst() {
$inst1 = SecurityToken::inst();
$this->assertType('SecurityToken', $inst1);
$this->assertInstanceOf('SecurityToken', $inst1);
}
function testInstReturnsSingleton() {
@ -111,7 +111,7 @@ class SecurityTokenTest extends SapphireTest {
$t->updateFieldSet($fs);
$f = $fs->dataFieldByName($t->getName());
$this->assertType('HiddenField', $f);
$this->assertInstanceOf('HiddenField', $f);
$this->assertEquals($f->Name(), $t->getName(), 'Name matches');
$this->assertEquals($f->Value(), $t->getValue(), 'Value matches');
}
@ -123,7 +123,7 @@ class SecurityTokenTest extends SapphireTest {
$t->updateFieldSet($fs); // second
$f = $fs->dataFieldByName($t->getName());
$this->assertType('HiddenField', $f);
$this->assertInstanceOf('HiddenField', $f);
$this->assertEquals(1, $fs->Count());
}