pictcode / lib / Cake / Test / Case / TestSuite / CakeTestCaseTest.php @ 0b1b8047
履歴 | 表示 | アノテート | ダウンロード (12.672 KB)
1 |
<?php
|
---|---|
2 |
/**
|
3 |
* CakeTestCaseTest file
|
4 |
*
|
5 |
* Test Case for CakeTestCase class
|
6 |
*
|
7 |
* CakePHP : Rapid Development Framework (http://cakephp.org)
|
8 |
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
9 |
*
|
10 |
* Licensed under The MIT License
|
11 |
* For full copyright and license information, please see the LICENSE.txt
|
12 |
* Redistributions of files must retain the above copyright notice.
|
13 |
*
|
14 |
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
15 |
* @link http://cakephp.org CakePHP Project
|
16 |
* @package Cake.Test.Case.TestSuite
|
17 |
* @since CakePHP v 1.2.0.4487
|
18 |
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
19 |
*/
|
20 |
App::uses('CakePlugin', 'Core'); |
21 |
App::uses('Controller', 'Controller'); |
22 |
App::uses('CakeHtmlReporter', 'TestSuite/Reporter'); |
23 |
App::uses('Model', 'Model'); |
24 |
|
25 |
/**
|
26 |
* Secondary Post stub class.
|
27 |
*/
|
28 |
class SecondaryPost extends Model { |
29 |
|
30 |
/**
|
31 |
* @var string
|
32 |
*/
|
33 |
public $useTable = 'posts'; |
34 |
|
35 |
/**
|
36 |
* @var string
|
37 |
*/
|
38 |
public $useDbConfig = 'secondary'; |
39 |
|
40 |
} |
41 |
|
42 |
/**
|
43 |
* CakeTestCaseTest
|
44 |
*
|
45 |
* @package Cake.Test.Case.TestSuite
|
46 |
*/
|
47 |
class CakeTestCaseTest extends CakeTestCase { |
48 |
|
49 |
/**
|
50 |
* fixtures property
|
51 |
*
|
52 |
* @var array
|
53 |
*/
|
54 |
public $fixtures = array('core.post', 'core.author', 'core.test_plugin_comment'); |
55 |
|
56 |
/**
|
57 |
* CakeTestCaseTest::setUpBeforeClass()
|
58 |
*
|
59 |
* @return void
|
60 |
*/
|
61 |
public static function setUpBeforeClass() { |
62 |
require_once CAKE . 'Test' . DS . 'Fixture' . DS . 'AssertTagsTestCase.php'; |
63 |
require_once CAKE . 'Test' . DS . 'Fixture' . DS . 'FixturizedTestCase.php'; |
64 |
} |
65 |
|
66 |
/**
|
67 |
* setUp
|
68 |
*
|
69 |
* @return void
|
70 |
*/
|
71 |
public function setUp() { |
72 |
parent::setUp();
|
73 |
$this->Reporter = $this->getMock('CakeHtmlReporter'); |
74 |
} |
75 |
|
76 |
/**
|
77 |
* tearDown
|
78 |
*
|
79 |
* @return void
|
80 |
*/
|
81 |
public function tearDown() { |
82 |
parent::tearDown();
|
83 |
unset($this->Result); |
84 |
unset($this->Reporter); |
85 |
} |
86 |
|
87 |
/**
|
88 |
* testAssertTags
|
89 |
*
|
90 |
* @return void
|
91 |
*/
|
92 |
public function testAssertTagsBasic() { |
93 |
$test = new AssertTagsTestCase('testAssertTagsQuotes'); |
94 |
$result = $test->run(); |
95 |
$this->assertEquals(0, $result->errorCount()); |
96 |
$this->assertTrue($result->wasSuccessful()); |
97 |
$this->assertEquals(0, $result->failureCount()); |
98 |
} |
99 |
|
100 |
/**
|
101 |
* test assertTags works with single and double quotes
|
102 |
*
|
103 |
* @return void
|
104 |
*/
|
105 |
public function testAssertTagsQuoting() { |
106 |
$input = '<a href="/test.html" class="active">My link</a>'; |
107 |
$pattern = array( |
108 |
'a' => array('href' => '/test.html', 'class' => 'active'), |
109 |
'My link',
|
110 |
'/a'
|
111 |
); |
112 |
$this->assertTags($input, $pattern); |
113 |
|
114 |
$input = "<a href='/test.html' class='active'>My link</a>"; |
115 |
$pattern = array( |
116 |
'a' => array('href' => '/test.html', 'class' => 'active'), |
117 |
'My link',
|
118 |
'/a'
|
119 |
); |
120 |
$this->assertTags($input, $pattern); |
121 |
|
122 |
$input = "<a href='/test.html' class='active'>My link</a>"; |
123 |
$pattern = array( |
124 |
'a' => array('href' => 'preg:/.*\.html/', 'class' => 'active'), |
125 |
'My link',
|
126 |
'/a'
|
127 |
); |
128 |
$this->assertTags($input, $pattern); |
129 |
|
130 |
$input = "<span><strong>Text</strong></span>"; |
131 |
$pattern = array( |
132 |
'<span',
|
133 |
'<strong',
|
134 |
'Text',
|
135 |
'/strong',
|
136 |
'/span'
|
137 |
); |
138 |
$this->assertTags($input, $pattern); |
139 |
|
140 |
$input = "<span class='active'><strong>Text</strong></span>"; |
141 |
$pattern = array( |
142 |
'span' => array('class'), |
143 |
'<strong',
|
144 |
'Text',
|
145 |
'/strong',
|
146 |
'/span'
|
147 |
); |
148 |
$this->assertTags($input, $pattern); |
149 |
} |
150 |
|
151 |
/**
|
152 |
* Test that assertTags runs quickly.
|
153 |
*
|
154 |
* @return void
|
155 |
*/
|
156 |
public function testAssertTagsRuntimeComplexity() { |
157 |
$pattern = array( |
158 |
'div' => array( |
159 |
'attr1' => 'val1', |
160 |
'attr2' => 'val2', |
161 |
'attr3' => 'val3', |
162 |
'attr4' => 'val4', |
163 |
'attr5' => 'val5', |
164 |
'attr6' => 'val6', |
165 |
'attr7' => 'val7', |
166 |
'attr8' => 'val8', |
167 |
), |
168 |
'My div',
|
169 |
'/div'
|
170 |
); |
171 |
$input = '<div attr8="val8" attr6="val6" attr4="val4" attr2="val2"' . |
172 |
' attr1="val1" attr3="val3" attr5="val5" attr7="val7" />' .
|
173 |
'My div' .
|
174 |
'</div>';
|
175 |
$this->assertTags($input, $pattern); |
176 |
} |
177 |
|
178 |
/**
|
179 |
* testNumericValuesInExpectationForAssertTags
|
180 |
*
|
181 |
* @return void
|
182 |
*/
|
183 |
public function testNumericValuesInExpectationForAssertTags() { |
184 |
$test = new AssertTagsTestCase('testNumericValuesInExpectationForAssertTags'); |
185 |
$result = $test->run(); |
186 |
$this->assertEquals(0, $result->errorCount()); |
187 |
$this->assertTrue($result->wasSuccessful()); |
188 |
$this->assertEquals(0, $result->failureCount()); |
189 |
} |
190 |
|
191 |
/**
|
192 |
* testBadAssertTags
|
193 |
*
|
194 |
* @return void
|
195 |
*/
|
196 |
public function testBadAssertTags() { |
197 |
$test = new AssertTagsTestCase('testBadAssertTags'); |
198 |
$result = $test->run(); |
199 |
$this->assertEquals(0, $result->errorCount()); |
200 |
$this->assertFalse($result->wasSuccessful()); |
201 |
$this->assertEquals(1, $result->failureCount()); |
202 |
|
203 |
$test = new AssertTagsTestCase('testBadAssertTags2'); |
204 |
$result = $test->run(); |
205 |
$this->assertEquals(0, $result->errorCount()); |
206 |
$this->assertFalse($result->wasSuccessful()); |
207 |
$this->assertEquals(1, $result->failureCount()); |
208 |
} |
209 |
|
210 |
/**
|
211 |
* testLoadFixtures
|
212 |
*
|
213 |
* @return void
|
214 |
*/
|
215 |
public function testLoadFixtures() { |
216 |
$test = new FixturizedTestCase('testFixturePresent'); |
217 |
$manager = $this->getMock('CakeFixtureManager'); |
218 |
$manager->fixturize($test); |
219 |
$test->fixtureManager = $manager; |
220 |
$manager->expects($this->once())->method('load'); |
221 |
$manager->expects($this->once())->method('unload'); |
222 |
$result = $test->run(); |
223 |
$this->assertEquals(0, $result->errorCount()); |
224 |
$this->assertTrue($result->wasSuccessful()); |
225 |
$this->assertEquals(0, $result->failureCount()); |
226 |
} |
227 |
|
228 |
/**
|
229 |
* testLoadFixturesOnDemand
|
230 |
*
|
231 |
* @return void
|
232 |
*/
|
233 |
public function testLoadFixturesOnDemand() { |
234 |
$test = new FixturizedTestCase('testFixtureLoadOnDemand'); |
235 |
$test->autoFixtures = false; |
236 |
$manager = $this->getMock('CakeFixtureManager'); |
237 |
$manager->fixturize($test); |
238 |
$test->fixtureManager = $manager; |
239 |
$manager->expects($this->once())->method('loadSingle'); |
240 |
$result = $test->run(); |
241 |
$this->assertEquals(0, $result->errorCount()); |
242 |
} |
243 |
|
244 |
/**
|
245 |
* testLoadFixturesOnDemand
|
246 |
*
|
247 |
* @return void
|
248 |
*/
|
249 |
public function testUnoadFixturesAfterFailure() { |
250 |
$test = new FixturizedTestCase('testFixtureLoadOnDemand'); |
251 |
$test->autoFixtures = false; |
252 |
$manager = $this->getMock('CakeFixtureManager'); |
253 |
$manager->fixturize($test); |
254 |
$test->fixtureManager = $manager; |
255 |
$manager->expects($this->once())->method('loadSingle'); |
256 |
$result = $test->run(); |
257 |
$this->assertEquals(0, $result->errorCount()); |
258 |
} |
259 |
|
260 |
/**
|
261 |
* testThrowException
|
262 |
*
|
263 |
* @return void
|
264 |
*/
|
265 |
public function testThrowException() { |
266 |
$test = new FixturizedTestCase('testThrowException'); |
267 |
$test->autoFixtures = false; |
268 |
$manager = $this->getMock('CakeFixtureManager'); |
269 |
$manager->fixturize($test); |
270 |
$test->fixtureManager = $manager; |
271 |
$manager->expects($this->once())->method('unload'); |
272 |
$result = $test->run(); |
273 |
$this->assertEquals(1, $result->errorCount()); |
274 |
} |
275 |
|
276 |
/**
|
277 |
* testSkipIf
|
278 |
*
|
279 |
* @return void
|
280 |
*/
|
281 |
public function testSkipIf() { |
282 |
$test = new FixturizedTestCase('testSkipIfTrue'); |
283 |
$result = $test->run(); |
284 |
$this->assertEquals(1, $result->skippedCount()); |
285 |
|
286 |
$test = new FixturizedTestCase('testSkipIfFalse'); |
287 |
$result = $test->run(); |
288 |
$this->assertEquals(0, $result->skippedCount()); |
289 |
} |
290 |
|
291 |
/**
|
292 |
* Test that CakeTestCase::setUp() backs up values.
|
293 |
*
|
294 |
* @return void
|
295 |
*/
|
296 |
public function testSetupBackUpValues() { |
297 |
$this->assertArrayHasKey('debug', $this->_configure); |
298 |
$this->assertArrayHasKey('Plugin', $this->_pathRestore); |
299 |
} |
300 |
|
301 |
/**
|
302 |
* test assertTextNotEquals()
|
303 |
*
|
304 |
* @return void
|
305 |
*/
|
306 |
public function testAssertTextNotEquals() { |
307 |
$one = "\r\nOne\rTwooo"; |
308 |
$two = "\nOne\nTwo"; |
309 |
$this->assertTextNotEquals($one, $two); |
310 |
} |
311 |
|
312 |
/**
|
313 |
* test assertTextEquals()
|
314 |
*
|
315 |
* @return void
|
316 |
*/
|
317 |
public function testAssertTextEquals() { |
318 |
$one = "\r\nOne\rTwo"; |
319 |
$two = "\nOne\nTwo"; |
320 |
$this->assertTextEquals($one, $two); |
321 |
} |
322 |
|
323 |
/**
|
324 |
* test assertTextStartsWith()
|
325 |
*
|
326 |
* @return void
|
327 |
*/
|
328 |
public function testAssertTextStartsWith() { |
329 |
$stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!"; |
330 |
|
331 |
$this->assertStringStartsWith("some\nstring", $stringDirty); |
332 |
$this->assertStringStartsNotWith("some\r\nstring\r\nwith", $stringDirty); |
333 |
$this->assertStringStartsNotWith("some\nstring\nwith", $stringDirty); |
334 |
|
335 |
$this->assertTextStartsWith("some\nstring\nwith", $stringDirty); |
336 |
$this->assertTextStartsWith("some\r\nstring\r\nwith", $stringDirty); |
337 |
} |
338 |
|
339 |
/**
|
340 |
* test assertTextStartsNotWith()
|
341 |
*
|
342 |
* @return void
|
343 |
*/
|
344 |
public function testAssertTextStartsNotWith() { |
345 |
$stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!"; |
346 |
$this->assertTextStartsNotWith("some\nstring\nwithout", $stringDirty); |
347 |
} |
348 |
|
349 |
/**
|
350 |
* test assertTextEndsWith()
|
351 |
*
|
352 |
* @return void
|
353 |
*/
|
354 |
public function testAssertTextEndsWith() { |
355 |
$stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!"; |
356 |
$this->assertTextEndsWith("string\nwith\r\ndifferent\rline endings!", $stringDirty); |
357 |
$this->assertTextEndsWith("string\r\nwith\ndifferent\nline endings!", $stringDirty); |
358 |
} |
359 |
|
360 |
/**
|
361 |
* test assertTextEndsNotWith()
|
362 |
*
|
363 |
* @return void
|
364 |
*/
|
365 |
public function testAssertTextEndsNotWith() { |
366 |
$stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!"; |
367 |
$this->assertStringEndsNotWith("different\nline endings", $stringDirty); |
368 |
$this->assertTextEndsNotWith("different\rline endings", $stringDirty); |
369 |
} |
370 |
|
371 |
/**
|
372 |
* test assertTextContains()
|
373 |
*
|
374 |
* @return void
|
375 |
*/
|
376 |
public function testAssertTextContains() { |
377 |
$stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!"; |
378 |
$this->assertContains("different", $stringDirty); |
379 |
$this->assertNotContains("different\rline", $stringDirty); |
380 |
$this->assertTextContains("different\rline", $stringDirty); |
381 |
} |
382 |
|
383 |
/**
|
384 |
* test assertTextNotContains()
|
385 |
*
|
386 |
* @return void
|
387 |
*/
|
388 |
public function testAssertTextNotContains() { |
389 |
$stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!"; |
390 |
$this->assertTextNotContains("different\rlines", $stringDirty); |
391 |
} |
392 |
|
393 |
/**
|
394 |
* test getMockForModel()
|
395 |
*
|
396 |
* @return void
|
397 |
*/
|
398 |
public function testGetMockForModel() { |
399 |
App::build(array( |
400 |
'Model' => array( |
401 |
CAKE . 'Test' . DS . 'test_app' . DS . 'Model' . DS |
402 |
) |
403 |
), App::RESET); |
404 |
$Post = $this->getMockForModel('Post'); |
405 |
$this->assertEquals('test', $Post->useDbConfig); |
406 |
$this->assertInstanceOf('Post', $Post); |
407 |
$this->assertNull($Post->save(array())); |
408 |
$this->assertNull($Post->find('all')); |
409 |
$this->assertEquals('posts', $Post->useTable); |
410 |
|
411 |
$Post = $this->getMockForModel('Post', array('save')); |
412 |
|
413 |
$this->assertNull($Post->save(array())); |
414 |
$this->assertInternalType('array', $Post->find('all')); |
415 |
} |
416 |
|
417 |
/**
|
418 |
* Test getMockForModel on secondary datasources.
|
419 |
*
|
420 |
* @return void
|
421 |
*/
|
422 |
public function testGetMockForModelSecondaryDatasource() { |
423 |
App::build(array( |
424 |
'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS), |
425 |
'Model/Datasource/Database' => array( |
426 |
CAKE . 'Test' . DS . 'test_app' . DS . 'Model' . DS . 'Datasource' . DS . 'Database' . DS |
427 |
) |
428 |
), App::RESET); |
429 |
CakePlugin::load('TestPlugin'); |
430 |
ConnectionManager::create('test_secondary', array( |
431 |
'datasource' => 'Database/TestLocalDriver' |
432 |
)); |
433 |
$post = $this->getMockForModel('SecondaryPost', array('save')); |
434 |
$this->assertEquals('test_secondary', $post->useDbConfig); |
435 |
ConnectionManager::drop('test_secondary'); |
436 |
} |
437 |
|
438 |
/**
|
439 |
* test getMockForModel() with plugin models
|
440 |
*
|
441 |
* @return void
|
442 |
*/
|
443 |
public function testGetMockForModelWithPlugin() { |
444 |
App::build(array( |
445 |
'Plugin' => array( |
446 |
CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS |
447 |
) |
448 |
), App::RESET); |
449 |
CakePlugin::load('TestPlugin'); |
450 |
$this->getMockForModel('TestPlugin.TestPluginAppModel'); |
451 |
$this->getMockForModel('TestPlugin.TestPluginComment'); |
452 |
|
453 |
$result = ClassRegistry::init('TestPlugin.TestPluginComment'); |
454 |
$this->assertInstanceOf('TestPluginComment', $result); |
455 |
$this->assertEquals('test', $result->useDbConfig); |
456 |
|
457 |
$TestPluginComment = $this->getMockForModel('TestPlugin.TestPluginComment', array('save')); |
458 |
|
459 |
$this->assertInstanceOf('TestPluginComment', $TestPluginComment); |
460 |
$TestPluginComment->expects($this->at(0)) |
461 |
->method('save')
|
462 |
->will($this->returnValue(true)); |
463 |
$TestPluginComment->expects($this->at(1)) |
464 |
->method('save')
|
465 |
->will($this->returnValue(false)); |
466 |
$this->assertTrue($TestPluginComment->save(array())); |
467 |
$this->assertFalse($TestPluginComment->save(array())); |
468 |
} |
469 |
|
470 |
/**
|
471 |
* testGetMockForModelModel
|
472 |
*
|
473 |
* @return void
|
474 |
*/
|
475 |
public function testGetMockForModelModel() { |
476 |
$Mock = $this->getMockForModel('Model', array('save', 'setDataSource'), array('name' => 'Comment')); |
477 |
|
478 |
$result = ClassRegistry::init('Comment'); |
479 |
$this->assertInstanceOf('Model', $result); |
480 |
|
481 |
$Mock->expects($this->at(0)) |
482 |
->method('save')
|
483 |
->will($this->returnValue(true)); |
484 |
$Mock->expects($this->at(1)) |
485 |
->method('save')
|
486 |
->will($this->returnValue(false)); |
487 |
|
488 |
$this->assertTrue($Mock->save(array())); |
489 |
$this->assertFalse($Mock->save(array())); |
490 |
} |
491 |
|
492 |
/**
|
493 |
* testGetMockForModelDoesNotExist
|
494 |
*
|
495 |
* @expectedException MissingModelException
|
496 |
* @expectedExceptionMessage Model IDoNotExist could not be found
|
497 |
* @return void
|
498 |
*/
|
499 |
public function testGetMockForModelDoesNotExist() { |
500 |
$this->getMockForModel('IDoNotExist'); |
501 |
} |
502 |
} |