[limb-svn] r6218 - in 3.x/trunk/limb/tests_runner: src tests tests/cases
svn at limb-project.com
svn at limb-project.com
Mon Aug 6 16:16:32 MSD 2007
Author: pachanga
Date: 2007-08-06 16:16:32 +0400 (Mon, 06 Aug 2007)
New Revision: 6218
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6218
Modified:
3.x/trunk/limb/tests_runner/src/lmbDetachedFixture.class.php
3.x/trunk/limb/tests_runner/src/lmbTestGroup.class.php
3.x/trunk/limb/tests_runner/src/lmbTestRunner.class.php
3.x/trunk/limb/tests_runner/src/lmbTestTreeDirNode.class.php
3.x/trunk/limb/tests_runner/src/lmbTestTreeFileNode.class.php
3.x/trunk/limb/tests_runner/src/lmbTestTreeNode.class.php
3.x/trunk/limb/tests_runner/src/lmbTestTreeShallowDirNode.class.php
3.x/trunk/limb/tests_runner/src/lmbTestWebUI.class.php
3.x/trunk/limb/tests_runner/tests/cases/lmbTestGroupTest.class.php
3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeDirNodeTest.class.php
3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeFilePathNodeTest.class.php
3.x/trunk/limb/tests_runner/tests/test_self.php
Log:
-- parent test fixtures are setup in a more proper way, before this fixtures were setup only down from the current node while parent ones were ignored. The fix is a bit hackish yet it fixes quite a serious bug, some refactoring may be applied in the future
-- lmbTestGroup allows to have many nested fixtures
-- lmbTestTreeNode splits test case creation and test case preparation into 2 methods: _doCreateTestCase() and _prepareTestCase($test)
Modified: 3.x/trunk/limb/tests_runner/src/lmbDetachedFixture.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/src/lmbDetachedFixture.class.php 2007-08-06 11:48:22 UTC (rev 6217)
+++ 3.x/trunk/limb/tests_runner/src/lmbDetachedFixture.class.php 2007-08-06 12:16:32 UTC (rev 6218)
@@ -1,4 +1,4 @@
-<?php
+<?php
/*
* Limb PHP Framework
*
@@ -7,45 +7,45 @@
* @license LGPL http://www.gnu.org/copyleft/lesser.html
*/
-/**
- * class lmbDetachedFixture.
- *
- * @package tests_runner
- * @version $Id$
+/**
+ * class lmbDetachedFixture.
+ *
+ * @package tests_runner
+ * @version $Id$
*/
-class lmbDetachedFixture
-{
- protected $_setup;
- protected $_teardown;
- protected $_container = array();
-
- function __construct($setup, $teardown)
- {
- $this->_setup = $setup;
- $this->_teardown = $teardown;
- }
-
- function setUp()
- {
- if(file_exists($this->_setup))
- include($this->_setup);
- }
-
- function tearDown()
- {
- if(file_exists($this->_teardown))
- include($this->_teardown);
- }
-
- function __set($name, $value)
- {
- $this->_container[$name] = $value;
- }
-
- function __get($name)
- {
- if(isset($this->_container[$name]))
- return $this->_container[$name];
- }
-}
-?>
\ No newline at end of file
+class lmbDetachedFixture
+{
+ protected $_setup;
+ protected $_teardown;
+ protected $_container = array();
+
+ function __construct($setup, $teardown)
+ {
+ $this->_setup = $setup;
+ $this->_teardown = $teardown;
+ }
+
+ function setUp()
+ {
+ if(file_exists($this->_setup))
+ include($this->_setup);
+ }
+
+ function tearDown()
+ {
+ if(file_exists($this->_teardown))
+ include($this->_teardown);
+ }
+
+ function __set($name, $value)
+ {
+ $this->_container[$name] = $value;
+ }
+
+ function __get($name)
+ {
+ if(isset($this->_container[$name]))
+ return $this->_container[$name];
+ }
+}
+?>
Modified: 3.x/trunk/limb/tests_runner/src/lmbTestGroup.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/src/lmbTestGroup.class.php 2007-08-06 11:48:22 UTC (rev 6217)
+++ 3.x/trunk/limb/tests_runner/src/lmbTestGroup.class.php 2007-08-06 12:16:32 UTC (rev 6218)
@@ -15,13 +15,14 @@
*/
class lmbTestGroup extends TestSuite
{
- protected $_fixture;
- protected $_container = array();
+ protected $_fixtures = array();
- function useFixture($fixture)
+ function addFixture($fixture)
{
- $this->_fixture = $fixture;
- $this->_setUpFixture();
+ $this->_fixtures[] = $fixture;
+ //fixture is setup once added, since fixture may contain some stuff
+ //required even before actual tests execution
+ $fixture->setup();
}
function run($reporter)
@@ -33,16 +34,10 @@
return $res;
}
- protected function _setUpFixture()
- {
- if($this->_fixture)
- $this->_fixture->setUp();
- }
-
protected function _tearDownFixture()
{
- if($this->_fixture)
- $this->_fixture->tearDown();
+ foreach(array_reverse($this->_fixtures) as $fixture)
+ $fixture->tearDown();
}
}
-?>
\ No newline at end of file
+?>
Modified: 3.x/trunk/limb/tests_runner/src/lmbTestRunner.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/src/lmbTestRunner.class.php 2007-08-06 11:48:22 UTC (rev 6217)
+++ 3.x/trunk/limb/tests_runner/src/lmbTestRunner.class.php 2007-08-06 12:16:32 UTC (rev 6218)
@@ -127,4 +127,4 @@
}
}
-?>
\ No newline at end of file
+?>
Modified: 3.x/trunk/limb/tests_runner/src/lmbTestTreeDirNode.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/src/lmbTestTreeDirNode.class.php 2007-08-06 11:48:22 UTC (rev 6217)
+++ 3.x/trunk/limb/tests_runner/src/lmbTestTreeDirNode.class.php 2007-08-06 12:16:32 UTC (rev 6218)
@@ -24,10 +24,10 @@
protected static $file_filter;
protected $loaded;
- function createTestCase()
+ function createTestCase($is_first = true)
{
$this->_loadChildren();
- return parent :: createTestCase();
+ return parent :: createTestCase($is_first);
}
static function getFileFilter()
Modified: 3.x/trunk/limb/tests_runner/src/lmbTestTreeFileNode.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/src/lmbTestTreeFileNode.class.php 2007-08-06 11:48:22 UTC (rev 6217)
+++ 3.x/trunk/limb/tests_runner/src/lmbTestTreeFileNode.class.php 2007-08-06 12:16:32 UTC (rev 6218)
@@ -39,7 +39,7 @@
protected function _doCreateTestCase()
{
require_once($this->file);
- $suite = new TestSuite(basename($this->file));
+ $suite = new lmbTestGroup(basename($this->file));
$candidates = $this->_getClassesDefinedInFile();
$loader = new SimpleFileLoader();
foreach($loader->selectRunnableTests($candidates) as $class)
Modified: 3.x/trunk/limb/tests_runner/src/lmbTestTreeNode.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/src/lmbTestTreeNode.class.php 2007-08-06 11:48:22 UTC (rev 6217)
+++ 3.x/trunk/limb/tests_runner/src/lmbTestTreeNode.class.php 2007-08-06 12:16:32 UTC (rev 6218)
@@ -41,6 +41,18 @@
return $this->children;
}
+ function getParents()
+ {
+ $parents = array();
+ $node = $this->parent;
+ while($node)
+ {
+ array_unshift($parents, $node);
+ $node = $node->getParent();
+ }
+ return $parents;
+ }
+
protected function _loadChildren(){}
function findChildByPath($path)
@@ -98,24 +110,56 @@
return $this->_doCreateTestCase()->getLabel();
}
- function createTestCase()
+ function createTestCase($is_first = true)
{
+ if($is_first && $this->_hasSkippedParents())
+ return null;
+
$test = $this->_doCreateTestCase();
- $children = $this->getChildren();//using getter instead of raw property, since child classes may need customization
+
+ //all parents are traversed in case some test customization is required
+ if($is_first)
+ {
+ foreach($this->getParents() as $node)
+ $node->_prepareTestCase($test);
+ }
+
+ $this->_prepareTestCase($test);
+ //using getter instead of raw property, since child classes may need lazy loading
+ $children = $this->getChildren();
foreach($children as $child)
{
if($child->isSkipped())
continue;
- $child->init();
- $test->addTestCase($child->createTestCase());
+ $child->init();//obsolete stuff
+ $test->addTestCase($child->createTestCase(false));
}
return $test;
}
+ protected function _hasSkippedParents()
+ {
+ if(!$this->parent)
+ return false;
+
+ $parent = $this->parent;
+ while($parent)
+ {
+ if($parent->isSkipped())
+ return true;
+ $parent = $parent->getParent();
+ }
+ return false;
+ }
+
protected function _doCreateTestCase()
{
- return new TestSuite();
+ //we need to delay inclusion of SimpleTest as much as possible
+ require_once(dirname(__FILE__) . '/lmbTestGroup.class.php');
+ return new lmbTestGroup();
}
+
+ protected function _prepareTestCase($test){}
}
?>
Modified: 3.x/trunk/limb/tests_runner/src/lmbTestTreeShallowDirNode.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/src/lmbTestTreeShallowDirNode.class.php 2007-08-06 11:48:22 UTC (rev 6217)
+++ 3.x/trunk/limb/tests_runner/src/lmbTestTreeShallowDirNode.class.php 2007-08-06 12:16:32 UTC (rev 6218)
@@ -61,10 +61,15 @@
$label = $this->_getDirectoryLabel();
$test = new lmbTestGroup($label);
+ return $test;
+ }
+
+ protected function _prepareTestCase($test)
+ {
$fixture = new lmbDetachedFixture($this->dir . '/.setup.php',
$this->dir . '/.teardown.php');
- $test->useFixture($fixture);
- return $test;
+ //set this fixture to be the first one
+ $test->addFixture($fixture);
}
protected function _getDirectoryLabel()
Modified: 3.x/trunk/limb/tests_runner/src/lmbTestWebUI.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/src/lmbTestWebUI.class.php 2007-08-06 11:48:22 UTC (rev 6217)
+++ 3.x/trunk/limb/tests_runner/src/lmbTestWebUI.class.php 2007-08-06 12:16:32 UTC (rev 6218)
@@ -189,4 +189,4 @@
}
}
-?>
\ No newline at end of file
+?>
Modified: 3.x/trunk/limb/tests_runner/tests/cases/lmbTestGroupTest.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/tests/cases/lmbTestGroupTest.class.php 2007-08-06 11:48:22 UTC (rev 6217)
+++ 3.x/trunk/limb/tests_runner/tests/cases/lmbTestGroupTest.class.php 2007-08-06 12:16:32 UTC (rev 6218)
@@ -12,6 +12,26 @@
Mock :: generate('lmbDetachedFixture', 'MockDetachedFixture');
+class DetachedFixtureStub
+{
+ protected $me;
+
+ function __construct($name)
+ {
+ $this->me = $name;
+ }
+
+ function setUp()
+ {
+ echo 'setup ' . $this->me;
+ }
+
+ function tearDown()
+ {
+ echo 'teardown ' . $this->me;
+ }
+}
+
class lmbTestGroupTest extends lmbTestRunnerBase
{
function setUp()
@@ -25,7 +45,7 @@
$this->_rmdir(LIMB_VAR_DIR);
}
- function testUseFixture()
+ function testAddFixture()
{
$fixture = new MockDetachedFixture();
@@ -33,12 +53,29 @@
$fixture->expectOnce('tearDown');
$group = new lmbTestGroup(LIMB_VAR_DIR);
- $group->useFixture($fixture);
+ $group->addFixture($fixture);
ob_start();
$group->run(new SimpleReporter());
ob_end_clean();
}
+
+ function testSeveralFixtures()
+ {
+ $fixture1 = new DetachedFixtureStub('1');
+ $fixture2 = new DetachedFixtureStub('2');
+
+ $group = new lmbTestGroup(LIMB_VAR_DIR);
+
+ //fixture is setup once added
+ ob_start();
+ $group->addFixture($fixture1);
+ $group->addFixture($fixture2);
+
+ $group->run(new SimpleReporter());
+ $str = ob_get_contents();
+ ob_end_clean();
+ $this->assertEqual($str, 'setup 1setup 2teardown 2teardown 1');
+ }
}
-
?>
Modified: 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeDirNodeTest.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeDirNodeTest.class.php 2007-08-06 11:48:22 UTC (rev 6217)
+++ 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeDirNodeTest.class.php 2007-08-06 12:16:32 UTC (rev 6218)
@@ -239,6 +239,28 @@
$this->_runNodeAndAssertOutput($root_node, '');
}
+
+ function testParentFixturesAreExecuted()
+ {
+ mkdir($this->var_dir . '/a');
+ mkdir($this->var_dir . '/a/b');
+
+ file_put_contents($this->var_dir . '/a/.setup.php', '<?php echo "setup"; ?>');
+ file_put_contents($this->var_dir . '/a/.teardown.php', '<?php echo "teardown"; ?>');
+
+ file_put_contents($this->var_dir . '/a/b/.setup.php', '<?php echo "setup2"; ?>');
+ file_put_contents($this->var_dir . '/a/b/.teardown.php', '<?php echo "teardown2"; ?>');
+
+ $test1 = new GeneratedTestClass();
+ $test2 = new GeneratedTestClass();
+
+ file_put_contents($this->var_dir . '/a/b/bar_test.php', $test1->generate());
+ file_put_contents($this->var_dir . '/a/b/foo_test.php', $test2->generate());
+
+ $node = new lmbTestTreeDirNode($this->var_dir);
+ $child = $node->findChildByPath('/0/0/1');
+ $this->_runNodeAndAssertOutput($child, "setupsetup2" . $test2->getOutput() . "teardown2teardown");
+ }
}
?>
Modified: 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeFilePathNodeTest.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeFilePathNodeTest.class.php 2007-08-06 11:48:22 UTC (rev 6217)
+++ 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeFilePathNodeTest.class.php 2007-08-06 12:16:32 UTC (rev 6218)
@@ -142,6 +142,28 @@
$this->assertIsA($kids[0], 'lmbTestTreeDirNode');
$this->assertEqual($kids[0]->getDir(), realpath($this->var_dir . '/a/b'));
}
+
+ function testParentFixturesAreExecuted()
+ {
+ mkdir($this->var_dir . '/a');
+ mkdir($this->var_dir . '/a/b');
+
+ file_put_contents($this->var_dir . '/a/.setup.php', '<?php echo "setup"; ?>');
+ file_put_contents($this->var_dir . '/a/.teardown.php', '<?php echo "teardown"; ?>');
+
+ file_put_contents($this->var_dir . '/a/b/.setup.php', '<?php echo "setup2"; ?>');
+ file_put_contents($this->var_dir . '/a/b/.teardown.php', '<?php echo "teardown2"; ?>');
+
+ $test1 = new GeneratedTestClass();
+ $test2 = new GeneratedTestClass();
+
+ file_put_contents($this->var_dir . '/a/b/bar_test.php', $test1->generate());
+ file_put_contents($this->var_dir . '/a/b/foo_test.php', $test2->generate());
+
+ $node = new lmbTestTreeFilePathNode($this->var_dir . '/a', -1);
+ $child = $node->findChildByPath('/0/0/1');
+ $this->_runNodeAndAssertOutput($child, "setupsetup2" . $test2->getOutput() . "teardown2teardown");
+ }
}
?>
Modified: 3.x/trunk/limb/tests_runner/tests/test_self.php
===================================================================
--- 3.x/trunk/limb/tests_runner/tests/test_self.php 2007-08-06 11:48:22 UTC (rev 6217)
+++ 3.x/trunk/limb/tests_runner/tests/test_self.php 2007-08-06 12:16:32 UTC (rev 6218)
@@ -9,7 +9,6 @@
if(isset($argv[1]))
define('SIMPLE_TEST', $argv[1]);
-
require_once(dirname(__FILE__) . '/cases/.setup.php');
$group = new TestSuite();
@@ -19,4 +18,4 @@
if(!$res = $group->run(new TextReporter()))
exit(1);
-?>
\ No newline at end of file
+?>
More information about the limb-svn
mailing list