| [ Index ] |
PHP Cross Reference of Limb3 |
[Summary view] [Print] [Text view]
1 <?php 2 /* 3 * Limb PHP Framework 4 * 5 * @link http://limb-project.com 6 * @copyright Copyright © 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 ?>