Mercurial > hg > Members > shoshi > webvirt
comparison cake/tests/cases/libs/cake_test_case.test.php @ 0:261e66bd5a0c
hg init
author | Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 24 Jul 2011 21:08:31 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:261e66bd5a0c |
---|---|
1 <?php | |
2 /** | |
3 * CakeTestCaseTest file | |
4 * | |
5 * Test Case for CakeTestCase class | |
6 * | |
7 * PHP versions 4 and 5 | |
8 * | |
9 * CakePHP : Rapid Development Framework (http://cakephp.org) | |
10 * Copyright 2006-2010, Cake Software Foundation, Inc. | |
11 * | |
12 * Licensed under The MIT License | |
13 * Redistributions of files must retain the above copyright notice. | |
14 * | |
15 * @copyright Copyright 2006-2010, Cake Software Foundation, Inc. | |
16 * @link http://cakephp.org CakePHP Project | |
17 * @package cake | |
18 * @subpackage cake.cake.libs. | |
19 * @since CakePHP v 1.2.0.4487 | |
20 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) | |
21 */ | |
22 App::import('Core', 'CakeTestCase'); | |
23 | |
24 if (!class_exists('AppController')) { | |
25 require_once LIBS . 'controller' . DS . 'app_controller.php'; | |
26 } elseif (!defined('APP_CONTROLLER_EXISTS')) { | |
27 define('APP_CONTROLLER_EXISTS', true); | |
28 } | |
29 | |
30 Mock::generate('CakeHtmlReporter'); | |
31 Mock::generate('CakeTestCase', 'CakeDispatcherMockTestCase'); | |
32 | |
33 SimpleTest::ignore('SubjectCakeTestCase'); | |
34 SimpleTest::ignore('CakeDispatcherMockTestCase'); | |
35 | |
36 /** | |
37 * SubjectCakeTestCase | |
38 * | |
39 * @package cake | |
40 * @subpackage cake.tests.cases.libs | |
41 */ | |
42 class SubjectCakeTestCase extends CakeTestCase { | |
43 | |
44 /** | |
45 * Feed a Mocked Reporter to the subject case | |
46 * prevents its pass/fails from affecting the real test | |
47 * | |
48 * @param string $reporter | |
49 * @access public | |
50 * @return void | |
51 */ | |
52 function setReporter(&$reporter) { | |
53 $this->_reporter = &$reporter; | |
54 } | |
55 | |
56 /** | |
57 * testDummy method | |
58 * | |
59 * @return void | |
60 * @access public | |
61 */ | |
62 function testDummy() { | |
63 } | |
64 } | |
65 | |
66 /** | |
67 * CakeTestCaseTest | |
68 * | |
69 * @package cake | |
70 * @subpackage cake.tests.cases.libs | |
71 */ | |
72 class CakeTestCaseTest extends CakeTestCase { | |
73 | |
74 /** | |
75 * setUp | |
76 * | |
77 * @access public | |
78 * @return void | |
79 */ | |
80 function setUp() { | |
81 $this->_debug = Configure::read('debug'); | |
82 $this->Case =& new SubjectCakeTestCase(); | |
83 $reporter =& new MockCakeHtmlReporter(); | |
84 $this->Case->setReporter($reporter); | |
85 $this->Reporter = $reporter; | |
86 } | |
87 | |
88 /** | |
89 * tearDown | |
90 * | |
91 * @access public | |
92 * @return void | |
93 */ | |
94 function tearDown() { | |
95 Configure::write('debug', $this->_debug); | |
96 unset($this->Case); | |
97 unset($this->Reporter); | |
98 } | |
99 | |
100 /** | |
101 * endTest | |
102 * | |
103 * @access public | |
104 * @return void | |
105 */ | |
106 function endTest() { | |
107 App::build(); | |
108 } | |
109 | |
110 /** | |
111 * testAssertGoodTags | |
112 * | |
113 * @access public | |
114 * @return void | |
115 */ | |
116 function testAssertGoodTags() { | |
117 $this->Reporter->expectAtLeastOnce('paintPass'); | |
118 $this->Reporter->expectNever('paintFail'); | |
119 | |
120 $input = '<p>Text</p>'; | |
121 $pattern = array( | |
122 '<p', | |
123 'Text', | |
124 '/p', | |
125 ); | |
126 $this->assertTrue($this->Case->assertTags($input, $pattern)); | |
127 | |
128 $input = '<a href="/test.html" class="active">My link</a>'; | |
129 $pattern = array( | |
130 'a' => array('href' => '/test.html', 'class' => 'active'), | |
131 'My link', | |
132 '/a' | |
133 ); | |
134 $this->assertTrue($this->Case->assertTags($input, $pattern)); | |
135 | |
136 $pattern = array( | |
137 'a' => array('class' => 'active', 'href' => '/test.html'), | |
138 'My link', | |
139 '/a' | |
140 ); | |
141 $this->assertTrue($this->Case->assertTags($input, $pattern), 'Attributes in wrong order. %s'); | |
142 | |
143 $input = "<a href=\"/test.html\"\t\n\tclass=\"active\"\tid=\"primary\">\t<span>My link</span></a>"; | |
144 $pattern = array( | |
145 'a' => array('id' => 'primary', 'href' => '/test.html', 'class' => 'active'), | |
146 '<span', | |
147 'My link', | |
148 '/span', | |
149 '/a' | |
150 ); | |
151 $this->assertTrue($this->Case->assertTags($input, $pattern), 'Whitespace consumption %s'); | |
152 | |
153 $input = '<p class="info"><a href="/test.html" class="active"><strong onClick="alert(\'hey\');">My link</strong></a></p>'; | |
154 $pattern = array( | |
155 'p' => array('class' => 'info'), | |
156 'a' => array('class' => 'active', 'href' => '/test.html' ), | |
157 'strong' => array('onClick' => 'alert(\'hey\');'), | |
158 'My link', | |
159 '/strong', | |
160 '/a', | |
161 '/p' | |
162 ); | |
163 $this->assertTrue($this->Case->assertTags($input, $pattern)); | |
164 } | |
165 | |
166 /** | |
167 * test that assertTags knows how to handle correct quoting. | |
168 * | |
169 * @return void | |
170 */ | |
171 function testAssertTagsQuotes() { | |
172 $input = '<a href="/test.html" class="active">My link</a>'; | |
173 $pattern = array( | |
174 'a' => array('href' => '/test.html', 'class' => 'active'), | |
175 'My link', | |
176 '/a' | |
177 ); | |
178 $this->assertTrue($this->Case->assertTags($input, $pattern), 'Double quoted attributes %s'); | |
179 | |
180 $input = "<a href='/test.html' class='active'>My link</a>"; | |
181 $pattern = array( | |
182 'a' => array('href' => '/test.html', 'class' => 'active'), | |
183 'My link', | |
184 '/a' | |
185 ); | |
186 $this->assertTrue($this->Case->assertTags($input, $pattern), 'Single quoted attributes %s'); | |
187 | |
188 $input = "<a href='/test.html' class='active'>My link</a>"; | |
189 $pattern = array( | |
190 'a' => array('href' => 'preg:/.*\.html/', 'class' => 'active'), | |
191 'My link', | |
192 '/a' | |
193 ); | |
194 $this->assertTrue($this->Case->assertTags($input, $pattern), 'Single quoted attributes %s'); | |
195 } | |
196 | |
197 /** | |
198 * testNumericValuesInExpectationForAssertTags | |
199 * | |
200 * @access public | |
201 * @return void | |
202 */ | |
203 function testNumericValuesInExpectationForAssertTags() { | |
204 $value = 220985; | |
205 | |
206 $input = '<p><strong>' . $value . '</strong></p>'; | |
207 $pattern = array( | |
208 '<p', | |
209 '<strong', | |
210 $value, | |
211 '/strong', | |
212 '/p' | |
213 ); | |
214 $this->assertTrue($this->Case->assertTags($input, $pattern)); | |
215 | |
216 $input = '<p><strong>' . $value . '</strong></p><p><strong>' . $value . '</strong></p>'; | |
217 $pattern = array( | |
218 '<p', | |
219 '<strong', | |
220 $value, | |
221 '/strong', | |
222 '/p', | |
223 '<p', | |
224 '<strong', | |
225 $value, | |
226 '/strong', | |
227 '/p', | |
228 ); | |
229 $this->assertTrue($this->Case->assertTags($input, $pattern)); | |
230 | |
231 $input = '<p><strong>' . $value . '</strong></p><p id="' . $value . '"><strong>' . $value . '</strong></p>'; | |
232 $pattern = array( | |
233 '<p', | |
234 '<strong', | |
235 $value, | |
236 '/strong', | |
237 '/p', | |
238 'p' => array('id' => $value), | |
239 '<strong', | |
240 $value, | |
241 '/strong', | |
242 '/p', | |
243 ); | |
244 $this->assertTrue($this->Case->assertTags($input, $pattern)); | |
245 } | |
246 | |
247 /** | |
248 * testBadAssertTags | |
249 * | |
250 * @access public | |
251 * @return void | |
252 */ | |
253 function testBadAssertTags() { | |
254 $this->Reporter->expectAtLeastOnce('paintFail'); | |
255 $this->Reporter->expectNever('paintPass'); | |
256 | |
257 $input = '<a href="/test.html" class="active">My link</a>'; | |
258 $pattern = array( | |
259 'a' => array('hRef' => '/test.html', 'clAss' => 'active'), | |
260 'My link', | |
261 '/a' | |
262 ); | |
263 $this->assertFalse($this->Case->assertTags($input, $pattern)); | |
264 | |
265 $input = '<a href="/test.html" class="active">My link</a>'; | |
266 $pattern = array( | |
267 '<a' => array('href' => '/test.html', 'class' => 'active'), | |
268 'My link', | |
269 '/a' | |
270 ); | |
271 $this->assertFalse($this->Case->assertTags($input, $pattern)); | |
272 } | |
273 | |
274 /** | |
275 * testBefore | |
276 * | |
277 * @access public | |
278 * @return void | |
279 */ | |
280 function testBefore() { | |
281 $this->Case->before('testDummy'); | |
282 $this->assertFalse(isset($this->Case->db)); | |
283 | |
284 $this->Case->fixtures = array('core.post'); | |
285 $this->Case->before('start'); | |
286 $this->assertTrue(isset($this->Case->db)); | |
287 $this->assertTrue(isset($this->Case->_fixtures['core.post'])); | |
288 $this->assertTrue(is_a($this->Case->_fixtures['core.post'], 'CakeTestFixture')); | |
289 $this->assertEqual($this->Case->_fixtureClassMap['Post'], 'core.post'); | |
290 } | |
291 | |
292 /** | |
293 * testAfter | |
294 * | |
295 * @access public | |
296 * @return void | |
297 */ | |
298 function testAfter() { | |
299 $this->Case->after('testDummy'); | |
300 $this->assertFalse($this->Case->__truncated); | |
301 | |
302 $this->Case->fixtures = array('core.post'); | |
303 $this->Case->before('start'); | |
304 $this->Case->start(); | |
305 $this->Case->after('testDummy'); | |
306 $this->assertTrue($this->Case->__truncated); | |
307 } | |
308 | |
309 /** | |
310 * testLoadFixtures | |
311 * | |
312 * @access public | |
313 * @return void | |
314 */ | |
315 function testLoadFixtures() { | |
316 $this->Case->fixtures = array('core.post'); | |
317 $this->Case->autoFixtures = false; | |
318 $this->Case->before('start'); | |
319 $this->expectError(); | |
320 $this->Case->loadFixtures('Wrong!'); | |
321 $this->Case->end(); | |
322 } | |
323 | |
324 /** | |
325 * testGetTests Method | |
326 * | |
327 * @return void | |
328 * @access public | |
329 */ | |
330 function testGetTests() { | |
331 $result = $this->Case->getTests(); | |
332 $this->assertEqual(array_slice($result, 0, 2), array('start', 'startCase')); | |
333 $this->assertEqual(array_slice($result, -2), array('endCase', 'end')); | |
334 } | |
335 | |
336 /** | |
337 * TestTestAction | |
338 * | |
339 * @access public | |
340 * @return void | |
341 */ | |
342 function testTestAction() { | |
343 App::build(array( | |
344 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS), | |
345 'models' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'models' . DS), | |
346 'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS), | |
347 'controllers' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'controllers' . DS) | |
348 ), true); | |
349 | |
350 $result = $this->Case->testAction('/tests_apps/index', array('return' => 'view')); | |
351 $this->assertPattern('/^\s*This is the TestsAppsController index view\s*$/i', $result); | |
352 | |
353 $result = $this->Case->testAction('/tests_apps/index', array('return' => 'contents')); | |
354 $this->assertPattern('/\bThis is the TestsAppsController index view\b/i', $result); | |
355 $this->assertPattern('/<html/', $result); | |
356 $this->assertPattern('/<\/html>/', $result); | |
357 | |
358 $result = $this->Case->testAction('/tests_apps/some_method', array('return' => 'result')); | |
359 $this->assertEqual($result, 5); | |
360 | |
361 $result = $this->Case->testAction('/tests_apps/set_action', array('return' => 'vars')); | |
362 $this->assertEqual($result, array('var' => 'string')); | |
363 | |
364 $db =& ConnectionManager::getDataSource('test_suite'); | |
365 $fixture =& new PostFixture(); | |
366 $fixture->create($db); | |
367 | |
368 $result = $this->Case->testAction('/tests_apps_posts/add', array('return' => 'vars')); | |
369 $this->assertTrue(array_key_exists('posts', $result)); | |
370 $this->assertEqual(count($result['posts']), 1); | |
371 | |
372 $result = $this->Case->testAction('/tests_apps_posts/url_var/var1:value1/var2:val2', array( | |
373 'return' => 'vars', | |
374 'method' => 'get', | |
375 )); | |
376 $this->assertTrue(isset($result['params']['url']['url'])); | |
377 $this->assertEqual(array_keys($result['params']['named']), array('var1', 'var2')); | |
378 | |
379 $result = $this->Case->testAction('/tests_apps_posts/url_var/gogo/val2', array( | |
380 'return' => 'vars', | |
381 'method' => 'get', | |
382 )); | |
383 $this->assertEqual($result['params']['pass'], array('gogo', 'val2')); | |
384 | |
385 | |
386 $result = $this->Case->testAction('/tests_apps_posts/url_var', array( | |
387 'return' => 'vars', | |
388 'method' => 'get', | |
389 'data' => array( | |
390 'red' => 'health', | |
391 'blue' => 'mana' | |
392 ) | |
393 )); | |
394 $this->assertTrue(isset($result['params']['url']['red'])); | |
395 $this->assertTrue(isset($result['params']['url']['blue'])); | |
396 $this->assertTrue(isset($result['params']['url']['url'])); | |
397 | |
398 $result = $this->Case->testAction('/tests_apps_posts/post_var', array( | |
399 'return' => 'vars', | |
400 'method' => 'post', | |
401 'data' => array( | |
402 'name' => 'is jonas', | |
403 'pork' => 'and beans', | |
404 ) | |
405 )); | |
406 $this->assertEqual(array_keys($result['data']), array('name', 'pork')); | |
407 $fixture->drop($db); | |
408 | |
409 $db =& ConnectionManager::getDataSource('test_suite'); | |
410 $_backPrefix = $db->config['prefix']; | |
411 $db->config['prefix'] = 'cake_testaction_test_suite_'; | |
412 | |
413 $config = $db->config; | |
414 $config['prefix'] = 'cake_testcase_test_'; | |
415 | |
416 ConnectionManager::create('cake_test_case', $config); | |
417 $db2 =& ConnectionManager::getDataSource('cake_test_case'); | |
418 | |
419 $fixture =& new PostFixture($db2); | |
420 $fixture->create($db2); | |
421 $fixture->insert($db2); | |
422 | |
423 $result = $this->Case->testAction('/tests_apps_posts/fixtured', array( | |
424 'return' => 'vars', | |
425 'fixturize' => true, | |
426 'connection' => 'cake_test_case', | |
427 )); | |
428 $this->assertTrue(isset($result['posts'])); | |
429 $this->assertEqual(count($result['posts']), 3); | |
430 $tables = $db2->listSources(); | |
431 $this->assertFalse(in_array('cake_testaction_test_suite_posts', $tables)); | |
432 | |
433 $fixture->drop($db2); | |
434 | |
435 $db =& ConnectionManager::getDataSource('test_suite'); | |
436 | |
437 //test that drop tables behaves as exepected with testAction | |
438 $db =& ConnectionManager::getDataSource('test_suite'); | |
439 $_backPrefix = $db->config['prefix']; | |
440 $db->config['prefix'] = 'cake_testaction_test_suite_'; | |
441 | |
442 $config = $db->config; | |
443 $config['prefix'] = 'cake_testcase_test_'; | |
444 | |
445 ConnectionManager::create('cake_test_case', $config); | |
446 $db =& ConnectionManager::getDataSource('cake_test_case'); | |
447 $fixture =& new PostFixture($db); | |
448 $fixture->create($db); | |
449 $fixture->insert($db); | |
450 | |
451 $this->Case->dropTables = false; | |
452 $result = $this->Case->testAction('/tests_apps_posts/fixtured', array( | |
453 'return' => 'vars', | |
454 'fixturize' => true, | |
455 'connection' => 'cake_test_case', | |
456 )); | |
457 | |
458 $tables = $db->listSources(); | |
459 $this->assertTrue(in_array('cake_testaction_test_suite_posts', $tables)); | |
460 | |
461 $fixture->drop($db); | |
462 $db =& ConnectionManager::getDataSource('test_suite'); | |
463 $db->config['prefix'] = $_backPrefix; | |
464 $fixture->drop($db); | |
465 } | |
466 | |
467 /** | |
468 * testSkipIf | |
469 * | |
470 * @return void | |
471 */ | |
472 function testSkipIf() { | |
473 $this->assertTrue($this->Case->skipIf(true)); | |
474 $this->assertFalse($this->Case->skipIf(false)); | |
475 } | |
476 | |
477 /** | |
478 * testTestDispatcher | |
479 * | |
480 * @access public | |
481 * @return void | |
482 */ | |
483 function testTestDispatcher() { | |
484 App::build(array( | |
485 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS), | |
486 'models' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'models' . DS), | |
487 'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS), | |
488 'controllers' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'controllers' . DS) | |
489 ), true); | |
490 | |
491 $Dispatcher =& new CakeTestDispatcher(); | |
492 $Case =& new CakeDispatcherMockTestCase(); | |
493 | |
494 $Case->expectOnce('startController'); | |
495 $Case->expectOnce('endController'); | |
496 | |
497 $Dispatcher->testCase($Case); | |
498 $this->assertTrue(isset($Dispatcher->testCase)); | |
499 | |
500 $return = $Dispatcher->dispatch('/tests_apps/index', array('autoRender' => 0, 'return' => 1, 'requested' => 1)); | |
501 } | |
502 } |