[ Index ]

PHP Cross Reference of Limb3

title

Body

[close]

/tests_runner/tests/cases/ -> lmbTestTreeDirNodeTest.class.php (source)

   1  <?php
   2  /*

   3   * Limb PHP Framework

   4   *

   5   * @link http://limb-project.com

   6   * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)

   7   * @license    LGPL http://www.gnu.org/copyleft/lesser.html

   8   */
   9  require_once(dirname(__FILE__) . '/../common.inc.php');
  10  require_once(dirname(__FILE__) . '/../../src/lmbTestTreeDirNode.class.php');
  11  require_once(dirname(__FILE__) . '/../../src/lmbTestFileFilter.class.php');
  12  
  13  class lmbTestTreeDirNodeTest extends lmbTestRunnerBase
  14  {
  15    protected $var_dir;
  16  
  17    function setUp()
  18    {
  19      $this->_rmdir(LIMB_VAR_DIR);
  20      //we need unique temporary dir since test modules are included once

  21      $this->var_dir = LIMB_VAR_DIR . '/' . mt_rand();
  22      mkdir(LIMB_VAR_DIR);
  23      mkdir($this->var_dir);
  24    }
  25  
  26    function tearDown()
  27    {
  28      $this->_rmdir(LIMB_VAR_DIR);
  29    }
  30  
  31    function testGetChildren()
  32    {
  33      mkdir($this->var_dir . '/a');
  34      mkdir($this->var_dir . '/a/b');
  35      touch($this->var_dir . '/a/b/bar_test.php');
  36      touch($this->var_dir . '/a/b/foo_test.php');
  37  
  38      $node = new lmbTestTreeDirNode($this->var_dir);
  39      $child_nodes = $node->getChildren();
  40      $this->assertEqual(sizeof($child_nodes), 1);
  41      $this->assertEqual($child_nodes[0]->getDir(), $this->var_dir . '/a');
  42      $this->assertFalse($child_nodes[0]->isTerminal());
  43  
  44      $sub_child_nodes = $child_nodes[0]->getChildren();
  45      $this->assertEqual(sizeof($sub_child_nodes), 1);
  46      $this->assertEqual($sub_child_nodes[0]->getDir(), $this->var_dir . '/a/b');
  47      $this->assertFalse($sub_child_nodes[0]->isTerminal());
  48  
  49      $terminal_nodes = $sub_child_nodes[0]->getChildren();
  50  
  51      $this->assertTrue($terminal_nodes[0]->getFile(), $this->var_dir . '/a/b/bar_test.php');
  52      $this->assertTrue($terminal_nodes[0]->isTerminal());
  53      $this->assertTrue($terminal_nodes[1]->getFile(), $this->var_dir . '/a/b/foo_test.php');
  54      $this->assertTrue($terminal_nodes[1]->isTerminal());
  55    }
  56  
  57    function testUseFileFilter()
  58    {
  59      touch($this->var_dir . '/bar_test.php');
  60      touch($this->var_dir . '/bah.php');
  61      touch($this->var_dir . '/junk.php');
  62      touch($this->var_dir . '/FooYo.class.php');
  63  
  64      $prev_filter = lmbTestTreeDirNode :: setFileFilter(array('*test.php', '*Yo.class.php'));
  65  
  66      $node = new lmbTestTreeDirNode($this->var_dir);
  67      $nodes = $node->getChildren();
  68      $this->assertEqual(sizeof($nodes), 2);
  69      $this->assertEqual($nodes[0]->getFile(), $this->var_dir . '/FooYo.class.php');
  70      $this->assertEqual($nodes[1]->getFile(), $this->var_dir . '/bar_test.php');
  71  
  72      lmbTestTreeDirNode :: setFileFilter($prev_filter);
  73    }
  74  
  75    function testUseFileFilterAndClassFormat()
  76    {
  77      $foo = new GeneratedTestClass();
  78      touch($this->var_dir . '/junk.php');
  79      touch($this->var_dir . '/' . $foo->getFileName() . '.yo');
  80  
  81      $prev_filter = lmbTestTreeDirNode :: setFileFilter('*.class.php.yo');
  82      $prev_format = lmbTestTreeFileNode :: setClassFormat('%s.class.php.yo');
  83  
  84      $node = new lmbTestTreeDirNode($this->var_dir);
  85      $nodes = $node->getChildren();
  86      $this->assertEqual(sizeof($nodes), 1);
  87      $this->assertEqual($nodes[0]->getFile(), $this->var_dir . '/' . $foo->getFileName() . '.yo');
  88      $this->assertEqual($nodes[0]->getClass(), $foo->getClass());
  89  
  90      lmbTestTreeDirNode :: setFileFilter($prev_filter);
  91      lmbTestTreeFileNode :: setClassFormat($prev_format);
  92    }
  93  
  94    function testFindChildByPath()
  95    {
  96      mkdir($this->var_dir . '/a');
  97  
  98      touch($this->var_dir . '/a/bar_test.php');
  99      touch($this->var_dir . '/a/foo_test.php');
 100  
 101      $node = new lmbTestTreeDirNode($this->var_dir);
 102      $child_node = $node->findChildByPath('/0/1');
 103      $this->assertTrue($child_node->isTerminal());
 104      $this->assertEqual($child_node->getFile(), $this->var_dir . '/a/foo_test.php');
 105    }
 106  
 107    function testFindNonTerminalGroupByPath()
 108    {
 109      mkdir($this->var_dir . '/a');
 110      mkdir($this->var_dir . '/a/b');
 111      touch($this->var_dir . '/a/b/bar_test.php');
 112      touch($this->var_dir . '/a/b/foo_test.php');
 113  
 114      $node = new lmbTestTreeDirNode($this->var_dir);
 115      $child_node = $node->findChildByPath('/0/0');
 116      $this->assertFalse($child_node->isTerminal());
 117      $this->assertEqual($child_node->getDir(), $this->var_dir . '/a/b');
 118    }
 119  
 120    function testFindChildByOnlySlashPath()
 121    {
 122      $node = new lmbTestTreeDirNode($this->var_dir);
 123      $child_node = $node->findChildByPath('/');
 124      $this->assertEqual($child_node, $node);
 125    }
 126  
 127    function testCreateTestGroup()
 128    {
 129      mkdir($this->var_dir . '/a');
 130  
 131      $test1 = new GeneratedTestClass();
 132      $test2 = new GeneratedTestClass();
 133  
 134      file_put_contents($this->var_dir . '/a/.setup.php', '<?php echo "wow"; ?>');
 135      file_put_contents($this->var_dir . '/a/.teardown.php', '<?php echo "hey"; ?>');
 136  
 137      file_put_contents($this->var_dir . '/a/bar_test.php', $test1->generate());
 138      file_put_contents($this->var_dir . '/a/foo_test.php', $test2->generate());
 139  
 140      $node = new lmbTestTreeDirNode($this->var_dir);
 141  
 142      //we check for any possible garbage during php includes

 143      ob_start();
 144      $group = $node->createTestCase();
 145      $group->run(new SimpleReporter());
 146      $str = ob_get_contents();
 147      ob_end_clean();
 148      $this->assertEqual($str, "wow" . $test1->getOutput() . $test2->getOutput() . "hey");
 149    }
 150  
 151    function testUseExternalTestLabel()
 152    {
 153      file_put_contents($this->var_dir . '/.description', 'Foo');
 154  
 155      $node = new lmbTestTreeDirNode($this->var_dir);
 156      $this->assertEqual($node->getTestLabel(), 'Foo');
 157      $group = $node->createTestCase();
 158      $this->assertEqual($group->getLabel(), 'Foo');
 159    }
 160  
 161    function testGetDefaultTestLabel()
 162    {
 163      $node = new lmbTestTreeDirNode($this->var_dir);
 164      $this->assertEqual($node->getTestLabel(), 'Group test in "' . $this->var_dir . '"');
 165      $group = $node->createTestCase();
 166      $this->assertEqual($group->getLabel(), 'Group test in "' . $this->var_dir . '"');
 167    }
 168  
 169    function testInit()
 170    {
 171      file_put_contents($this->var_dir . '/.init.php', '<?php echo "hey!"; ?>');
 172  
 173      $node = new lmbTestTreeDirNode($this->var_dir);
 174      ob_start();
 175      $group = $node->init();
 176      $str = ob_get_contents();
 177      ob_end_clean();
 178      $this->assertEqual($str, "hey!");
 179    }
 180  
 181    function testSkipTestsDirectory()
 182    {
 183      mkdir($this->var_dir . '/a');
 184      mkdir($this->var_dir . '/a/b');
 185  
 186      $test1 = new GeneratedTestClass();
 187      $test2 = new GeneratedTestClass();
 188  
 189      file_put_contents($this->var_dir . '/a/bar_test.php', $test1->generate());
 190      file_put_contents($this->var_dir . '/a/b/foo_test.php', $test2->generate());
 191  
 192      file_put_contents($this->var_dir . '/a/b/.skipif.php', '<?php return true; ?>');
 193  
 194      $root_node = new lmbTestTreeDirNode($this->var_dir);
 195      $group = $root_node->createTestCase();
 196  
 197      ob_start();
 198      $group->run(new SimpleReporter());
 199      $str = ob_get_contents();
 200      ob_end_clean();
 201      $this->assertEqual($str, $test1->getOutput());
 202    }
 203  
 204    function testDontSkipTestsDirectory()
 205    {
 206      mkdir($this->var_dir . '/a');
 207      mkdir($this->var_dir . '/a/b');
 208  
 209      $test1 = new GeneratedTestClass();
 210      $test2 = new GeneratedTestClass();
 211  
 212      file_put_contents($this->var_dir . '/a/bar_test.php', $test1->generate());
 213      file_put_contents($this->var_dir . '/a/b/foo_test.php', $test2->generate());
 214  
 215      file_put_contents($this->var_dir . '/a/b/.skipif.php', '<?php return false; ?>');
 216  
 217      $root_node = new lmbTestTreeDirNode($this->var_dir);
 218      $group = $root_node->createTestCase();
 219  
 220      ob_start();
 221      $group->run(new SimpleReporter());
 222      $str = ob_get_contents();
 223      ob_end_clean();
 224      $this->assertEqual($str, $test2->getOutput() . $test1->getOutput());
 225    }
 226  
 227    function testInitDoesntHappenIfDirIsSkipped()
 228    {
 229      mkdir($this->var_dir . '/a');
 230      mkdir($this->var_dir . '/a/b');
 231  
 232      $test1 = new GeneratedTestClass();
 233      $test2 = new GeneratedTestClass();
 234  
 235      file_put_contents($this->var_dir . '/a/bar_test.php', $test1->generate());
 236      file_put_contents($this->var_dir . '/a/b/foo_test.php', $test2->generate());
 237  
 238      file_put_contents($this->var_dir . '/a/b/.init.php', '<?php echo "wow" ?>');
 239      file_put_contents($this->var_dir . '/a/b/.skipif.php', '<?php return true; ?>');
 240  
 241      $root_node = new lmbTestTreeDirNode($this->var_dir);
 242      $group = $root_node->createTestCase();
 243  
 244      ob_start();
 245      $group->run(new SimpleReporter());
 246      $str = ob_get_contents();
 247      ob_end_clean();
 248      $this->assertEqual($str, $test1->getOutput());
 249    }
 250  
 251    function testSkippedDirFixtureSkippedToo()
 252    {
 253      mkdir($this->var_dir . '/a');
 254      $test = new GeneratedTestClass();
 255  
 256      file_put_contents($this->var_dir . '/a/.setup.php', '<?php echo "No!" ?>');
 257      file_put_contents($this->var_dir . '/a/bar_test.php', $test->generate());
 258  
 259      file_put_contents($this->var_dir . '/a/.skipif.php', '<?php return true; ?>');
 260  
 261      $root_node = new lmbTestTreeDirNode($this->var_dir);
 262      $group = $root_node->createTestCase();
 263  
 264      ob_start();
 265      $group->run(new SimpleReporter());
 266      $str = ob_get_contents();
 267      ob_end_clean();
 268      $this->assertEqual($str, '');
 269    }
 270  }
 271  
 272  ?>