[limb-svn] r6065 - in 3.x/trunk/limb/tests_runner: src tests tests/cases

svn at limb-project.com svn at limb-project.com
Wed Jul 4 14:35:31 MSD 2007


Author: pachanga
Date: 2007-07-04 14:35:31 +0400 (Wed, 04 Jul 2007)
New Revision: 6065
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6065

Added:
   3.x/trunk/limb/tests_runner/tests/cases/.setup.php
   3.x/trunk/limb/tests_runner/tests/cases/.skipif.php
Removed:
   3.x/trunk/limb/tests_runner/tests/cases/.ignore.php
   3.x/trunk/limb/tests_runner/tests/cases/.init.php
Modified:
   3.x/trunk/limb/tests_runner/src/lmbTestTreeFileNode.class.php
   3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeDirNodeTest.class.php
   3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeFileNodeTest.class.php
   3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeGlobNodeTest.class.php
   3.x/trunk/limb/tests_runner/tests/common.inc.php
Log:
-- lmbTestTreeFileNode includes files in a more general manner using regex in order to extract classes from source file. Class format thus is removed and not necessary anymore.
-- tests cleanup and refactoring
-- .init.php => .setup.php(.init.php is considered deprecated now)
-- .ignore.php => .skipif.php(.ignore.php is considered deprecated as well)

Modified: 3.x/trunk/limb/tests_runner/src/lmbTestTreeFileNode.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/src/lmbTestTreeFileNode.class.php	2007-07-04 08:58:58 UTC (rev 6064)
+++ 3.x/trunk/limb/tests_runner/src/lmbTestTreeFileNode.class.php	2007-07-04 10:35:31 UTC (rev 6065)
@@ -9,8 +9,6 @@
 require_once(dirname(__FILE__). '/lmbTestTreeTerminalNode.class.php');
 require_once(dirname(__FILE__). '/lmbTestUserException.class.php');
 
- at define('LIMB_TESTS_RUNNER_FILE_CLASS_FORMAT', '%s.class.php');
-
 /**
  * class lmbTestTreeFileNode.
  *
@@ -19,65 +17,34 @@
  */
 class lmbTestTreeFileNode extends lmbTestTreeTerminalNode
 {
-  protected static $class_format;
   protected $file;
-  protected $class;
 
   function __construct($file)
   {
     $this->file = $file;
-    $this->class = $this->_extractClassName($file);
   }
 
-  static function getClassFormat()
-  {
-    if(!self :: $class_format)
-      self :: $class_format = LIMB_TESTS_RUNNER_FILE_CLASS_FORMAT;
-    return self :: $class_format;
-  }
-
-  static function setClassFormat($format)
-  {
-    $prev = self :: $class_format;
-    self :: $class_format = $format;
-    return $prev;
-  }
-
   function getFile()
   {
     return $this->file;
   }
 
-  function getClass()
+  protected function _getClassesDefinedInFile()
   {
-    return $this->class;
+     if(!preg_match_all('~\Wclass\s+(\w+)~', file_get_contents($this->file), $matches))
+       return array();
+     return $matches[1];
   }
 
-  protected function _extractClassName($file)
-  {
-    $regex = preg_quote(self :: $class_format);
-    $regex = '~^' . str_replace('%s', '(.*)', $regex) . '$~';
-
-    if(preg_match($regex, basename($file), $m))
-      return $m[1];
-  }
-
   protected function _doCreateTestCase()
   {
+    require_once($this->file);
     $suite = new TestSuite(basename($this->file));
+    $candidates = $this->_getClassesDefinedInFile();
+    $loader = new SimpleFileLoader();
+    foreach($loader->selectRunnableTests($candidates) as $class)
+      $suite->addTestCase(new $class());
 
-    if(!is_null($this->class))
-    {
-      require_once($this->file);
-      if(!class_exists($this->class))
-        throw new lmbTestUserException("Class '{$this->class}' not found in '{$this->file}' file!");
-
-      $test = new $this->class();
-      $suite->addTestCase($test);
-    }
-    else
-      $suite->addFile($this->file);
-
     return $suite;
   }
 }

Deleted: 3.x/trunk/limb/tests_runner/tests/cases/.ignore.php
===================================================================
--- 3.x/trunk/limb/tests_runner/tests/cases/.ignore.php	2007-07-04 08:58:58 UTC (rev 6064)
+++ 3.x/trunk/limb/tests_runner/tests/cases/.ignore.php	2007-07-04 10:35:31 UTC (rev 6065)
@@ -1,13 +0,0 @@
-<?php
-if(!class_exists('lmbTestGroup'))
-  return false;
-
-$file = realpath(dirname(__FILE__) . '/../../src/lmbTestGroup.class.php');
-if($res = !in_array($file, get_included_files()))
-{
-  echo "\nRunning tests using another installation of TESTS_RUNNER is restricted!\n";
-  echo "No tests will be executed(use ../test_self.php instead).\n\n";
-}
-
-return $res;
-?>
\ No newline at end of file

Deleted: 3.x/trunk/limb/tests_runner/tests/cases/.init.php
===================================================================
--- 3.x/trunk/limb/tests_runner/tests/cases/.init.php	2007-07-04 08:58:58 UTC (rev 6064)
+++ 3.x/trunk/limb/tests_runner/tests/cases/.init.php	2007-07-04 10:35:31 UTC (rev 6065)
@@ -1,4 +0,0 @@
-<?php
- at define('LIMB_VAR_DIR', dirname(__FILE__) . '/../var');
-require_once(dirname(__FILE__) . '/../../common.inc.php');
-?>

Copied: 3.x/trunk/limb/tests_runner/tests/cases/.setup.php (from rev 6053, 3.x/trunk/limb/tests_runner/tests/cases/.init.php)
===================================================================
--- 3.x/trunk/limb/tests_runner/tests/cases/.setup.php	                        (rev 0)
+++ 3.x/trunk/limb/tests_runner/tests/cases/.setup.php	2007-07-04 10:35:31 UTC (rev 6065)
@@ -0,0 +1,4 @@
+<?php
+ at define('LIMB_VAR_DIR', dirname(__FILE__) . '/../var');
+require_once(dirname(__FILE__) . '/../../common.inc.php');
+?>

Copied: 3.x/trunk/limb/tests_runner/tests/cases/.skipif.php (from rev 6053, 3.x/trunk/limb/tests_runner/tests/cases/.ignore.php)
===================================================================
--- 3.x/trunk/limb/tests_runner/tests/cases/.skipif.php	                        (rev 0)
+++ 3.x/trunk/limb/tests_runner/tests/cases/.skipif.php	2007-07-04 10:35:31 UTC (rev 6065)
@@ -0,0 +1,13 @@
+<?php
+if(!class_exists('lmbTestGroup'))
+  return false;
+
+$file = realpath(dirname(__FILE__) . '/../../src/lmbTestGroup.class.php');
+if($res = !in_array($file, get_included_files()))
+{
+  echo "\nRunning tests using another installation of TESTS_RUNNER is restricted!\n";
+  echo "No tests will be executed(use ../test_self.php instead).\n\n";
+}
+
+return $res;
+?>
\ No newline at end of file

Modified: 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeDirNodeTest.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeDirNodeTest.class.php	2007-07-04 08:58:58 UTC (rev 6064)
+++ 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeDirNodeTest.class.php	2007-07-04 10:35:31 UTC (rev 6065)
@@ -79,16 +79,13 @@
     touch($this->var_dir . '/' . $foo->getFileName() . '.yo');
 
     $prev_filter = lmbTestTreeDirNode :: setFileFilter('*.class.php.yo');
-    $prev_format = lmbTestTreeFileNode :: setClassFormat('%s.class.php.yo');
 
     $node = new lmbTestTreeDirNode($this->var_dir);
     $nodes = $node->getChildren();
     $this->assertEqual(sizeof($nodes), 1);
     $this->assertEqual($nodes[0]->getFile(), $this->var_dir . '/' . $foo->getFileName() . '.yo');
-    $this->assertEqual($nodes[0]->getClass(), $foo->getClass());
 
     lmbTestTreeDirNode :: setFileFilter($prev_filter);
-    lmbTestTreeFileNode :: setClassFormat($prev_format);
   }
 
   function testFindChildByPath()
@@ -124,7 +121,7 @@
     $this->assertEqual($child_node, $node);
   }
 
-  function testCreateTestGroup()
+  function testCreateTestCase()
   {
     mkdir($this->var_dir . '/a');
 
@@ -139,13 +136,7 @@
 
     $node = new lmbTestTreeDirNode($this->var_dir);
 
-    //we check for any possible garbage during php includes
-    ob_start();
-    $group = $node->createTestCase();
-    $group->run(new SimpleReporter());
-    $str = ob_get_contents();
-    ob_end_clean();
-    $this->assertEqual($str, "wow" . $test1->getOutput() . $test2->getOutput() . "hey");
+    $this->_runNodeAndAssertOutput($node, "wow" . $test1->getOutput() . $test2->getOutput() . "hey");
   }
 
   function testUseExternalTestLabel()
@@ -171,6 +162,7 @@
     file_put_contents($this->var_dir . '/.init.php', '<?php echo "hey!"; ?>');
 
     $node = new lmbTestTreeDirNode($this->var_dir);
+
     ob_start();
     $group = $node->init();
     $str = ob_get_contents();
@@ -192,13 +184,8 @@
     file_put_contents($this->var_dir . '/a/b/.skipif.php', '<?php return true; ?>');
 
     $root_node = new lmbTestTreeDirNode($this->var_dir);
-    $group = $root_node->createTestCase();
 
-    ob_start();
-    $group->run(new SimpleReporter());
-    $str = ob_get_contents();
-    ob_end_clean();
-    $this->assertEqual($str, $test1->getOutput());
+    $this->_runNodeAndAssertOutput($root_node, $test1->getOutput());
   }
 
   function testDontSkipTestsDirectory()
@@ -215,13 +202,8 @@
     file_put_contents($this->var_dir . '/a/b/.skipif.php', '<?php return false; ?>');
 
     $root_node = new lmbTestTreeDirNode($this->var_dir);
-    $group = $root_node->createTestCase();
 
-    ob_start();
-    $group->run(new SimpleReporter());
-    $str = ob_get_contents();
-    ob_end_clean();
-    $this->assertEqual($str, $test2->getOutput() . $test1->getOutput());
+    $this->_runNodeAndAssertOutput($root_node, $test2->getOutput() . $test1->getOutput());
   }
 
   function testInitDoesntHappenIfDirIsSkipped()
@@ -239,13 +221,8 @@
     file_put_contents($this->var_dir . '/a/b/.skipif.php', '<?php return true; ?>');
 
     $root_node = new lmbTestTreeDirNode($this->var_dir);
-    $group = $root_node->createTestCase();
 
-    ob_start();
-    $group->run(new SimpleReporter());
-    $str = ob_get_contents();
-    ob_end_clean();
-    $this->assertEqual($str, $test1->getOutput());
+    $this->_runNodeAndAssertOutput($root_node, $test1->getOutput());
   }
 
   function testSkippedDirFixtureSkippedToo()
@@ -259,13 +236,8 @@
     file_put_contents($this->var_dir . '/a/.skipif.php', '<?php return true; ?>');
 
     $root_node = new lmbTestTreeDirNode($this->var_dir);
-    $group = $root_node->createTestCase();
 
-    ob_start();
-    $group->run(new SimpleReporter());
-    $str = ob_get_contents();
-    ob_end_clean();
-    $this->assertEqual($str, '');
+    $this->_runNodeAndAssertOutput($root_node, '');
   }
 }
 

Modified: 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeFileNodeTest.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeFileNodeTest.class.php	2007-07-04 08:58:58 UTC (rev 6064)
+++ 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeFileNodeTest.class.php	2007-07-04 10:35:31 UTC (rev 6065)
@@ -22,41 +22,52 @@
     $this->_rmdir(LIMB_VAR_DIR);
   }
 
-  function testCreateTestGroupUsingFileModule()
+  function testCreateTestCase()
   {
     $foo = new GeneratedTestClass();
     $bar = new GeneratedTestClass();
-    file_put_contents(LIMB_VAR_DIR . '/module.php',
+    file_put_contents(LIMB_VAR_DIR . '/module1.php',
     "<?php\n" . $foo->generateClass() . "\n" . $bar->generateClass() . "\n?>");
 
-    $node = new lmbTestTreeFileNode(LIMB_VAR_DIR . '/module.php');
+    $node = new lmbTestTreeFileNode(LIMB_VAR_DIR . '/module1.php');
 
-    ob_start();
-    $group = $node->createTestCase();
-    $group->run(new SimpleReporter());
-    $str = ob_get_contents();
-    ob_end_clean();
-    $this->assertEqual($str, $foo->getOutput() . $bar->getOutput());
+    $this->_runNodeAndAssertOutput($node, $foo->getOutput() . $bar->getOutput());
   }
 
-  function testCreateTestGroupUsingClass()
+  function testCreateTestCaseIgnoreJunkClasses()
   {
     $foo = new GeneratedTestClass();
     $bar = new GeneratedTestClass();
-    //module must be unique across test cases since require_once is used
-    file_put_contents(LIMB_VAR_DIR . '/unique_module_name.php',
-    "<?php\n" . $foo->generateClass() . "\n" . $bar->generateClass() . "\n?>");
+    file_put_contents(LIMB_VAR_DIR . '/module2.php',
+    "<?php\n" .
+    "//class Foo extends UnitTestCase\n" .
+    "\$a = 'class Junky';\n" .
+    $foo->generateClass() . "\n" .
+    $bar->generateClass() . "\n?>");
 
-    $node = new lmbTestTreeFileNode(LIMB_VAR_DIR . '/unique_module_name.php');
+    $node = new lmbTestTreeFileNode(LIMB_VAR_DIR . '/module2.php');
 
-    ob_start();
-    $group = $node->createTestCase();
-    $group->run(new SimpleReporter());
-    $str = ob_get_contents();
-    ob_end_clean();
-    $this->assertEqual($str, $foo->getOutput() . $bar->getOutput());
+    $this->_runNodeAndAssertOutput($node, $foo->getOutput() . $bar->getOutput());
   }
 
+  function testCreateTestClassesWithSomeClassesAlreadyIncluded()
+  {
+    $foo = new GeneratedTestClass();
+    $bar = new GeneratedTestClass();
+    file_put_contents($foo_file = LIMB_VAR_DIR . '/foo.php', $foo->generate());
+    file_put_contents($bar_file = LIMB_VAR_DIR . '/bar.php',
+    "<?php\n" .
+    "require_once('$foo_file');\n" .
+    $bar->generateClass() .
+    "\n?>");
+
+    $node_bar = new lmbTestTreeFileNode(LIMB_VAR_DIR . '/bar.php');
+    $this->_runNodeAndAssertOutput($node_bar, $bar->getOutput());
+
+    $node_foo = new lmbTestTreeFileNode(LIMB_VAR_DIR . '/foo.php');
+    $this->_runNodeAndAssertOutput($node_foo, $foo->getOutput());
+  }
+
   function testGetTestLabel()
   {
     $foo = new GeneratedTestClass();

Modified: 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeGlobNodeTest.class.php
===================================================================
--- 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeGlobNodeTest.class.php	2007-07-04 08:58:58 UTC (rev 6064)
+++ 3.x/trunk/limb/tests_runner/tests/cases/lmbTestTreeGlobNodeTest.class.php	2007-07-04 10:35:31 UTC (rev 6065)
@@ -38,13 +38,8 @@
     file_put_contents(LIMB_VAR_DIR . '/b/junk_test.php', $junk->generate()); //should be ignored
 
     $root_node = new lmbTestTreeGlobNode(LIMB_VAR_DIR . '/*/tests');
-    $group = $root_node->createTestCase();
 
-    ob_start();
-    $group->run(new SimpleReporter());
-    $str = ob_get_contents();
-    ob_end_clean();
-    $this->assertEqual($str, $test1->getOutput() . $test2->getOutput());
+    $this->_runNodeAndAssertOutput($root_node, $test1->getOutput() . $test2->getOutput());
   }
 
   function testNotAGlobMatch()
@@ -59,13 +54,7 @@
 
     $root_node = new lmbTestTreeGlobNode(LIMB_VAR_DIR . '/a');
 
-    $group = $root_node->createTestCase();
-
-    ob_start();
-    $group->run(new SimpleReporter());
-    $str = ob_get_contents();
-    ob_end_clean();
-    $this->assertEqual($str, $test1->getOutput() . $test2->getOutput());
+    $this->_runNodeAndAssertOutput($root_node, $test1->getOutput() . $test2->getOutput());
   }
 }
 

Modified: 3.x/trunk/limb/tests_runner/tests/common.inc.php
===================================================================
--- 3.x/trunk/limb/tests_runner/tests/common.inc.php	2007-07-04 08:58:58 UTC (rev 6064)
+++ 3.x/trunk/limb/tests_runner/tests/common.inc.php	2007-07-04 10:35:31 UTC (rev 6065)
@@ -108,5 +108,15 @@
     file_put_contents($file, "<?php\n" . $generated->generateClassFailing() . $extra . "\n?>");
     return $generated;
   }
+
+  function _runNodeAndAssertOutput($node, $expected)
+  {
+    ob_start();
+    $group = $node->createTestCase();
+    $group->run(new SimpleReporter());
+    $str = ob_get_contents();
+    ob_end_clean();
+    $this->assertEqual($str, $expected);
+  }
 }
 ?>
\ No newline at end of file



More information about the limb-svn mailing list