Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
13532 anikendra 1
<?php
2
/**
3
 * TestSuiteShell test case
4
 *
5
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
6
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
7
 *
8
 * Licensed under The MIT License
9
 * For full copyright and license information, please see the LICENSE.txt
10
 * Redistributions of files must retain the above copyright notice.
11
 *
12
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
13
 * @link          http://cakephp.org CakePHP(tm) Project
14
 * @package       Cake.Test.Case.Console.Command
15
 * @since         CakePHP(tm) v 2.0
16
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
17
 */
18
 
19
App::uses('ShellDispatcher', 'Console');
20
App::uses('TestShell', 'Console/Command');
21
 
22
/**
23
 * Class TestTestShell
24
 *
25
 * @package       Cake.Test.Case.Console.Command
26
 */
27
class TestTestShell extends TestShell {
28
 
29
	public function mapFileToCase($file, $category, $throwOnMissingFile = true) {
30
		return $this->_mapFileToCase($file, $category, $throwOnMissingFile);
31
	}
32
 
33
	public function mapFileToCategory($file) {
34
		return $this->_mapFileToCategory($file);
35
	}
36
 
37
}
38
 
39
/**
40
 * Class TestShellTest
41
 *
42
 * @package       Cake.Test.Case.Console.Command
43
 */
44
class TestShellTest extends CakeTestCase {
45
 
46
/**
47
 * setUp test case
48
 *
49
 * @return void
50
 */
51
	public function setUp() {
52
		parent::setUp();
53
		$out = $this->getMock('ConsoleOutput', array(), array(), '', false);
54
		$in = $this->getMock('ConsoleInput', array(), array(), '', false);
55
 
56
		$this->Shell = $this->getMock(
57
			'TestTestShell',
58
			array('in', 'out', 'hr', 'help', 'error', 'err', '_stop', 'initialize', '_run', 'clear'),
59
			array($out, $out, $in)
60
		);
61
		$this->Shell->OptionParser = $this->getMock('ConsoleOptionParser', array(), array(null, false));
62
	}
63
 
64
/**
65
 * tearDown method
66
 *
67
 * @return void
68
 */
69
	public function tearDown() {
70
		parent::tearDown();
71
		unset($this->Dispatch, $this->Shell);
72
	}
73
 
74
/**
75
 * testMapCoreFileToCategory
76
 *
77
 * @return void
78
 */
79
	public function testMapCoreFileToCategory() {
80
		$this->Shell->startup();
81
 
82
		$return = $this->Shell->mapFileToCategory('lib/Cake/basics.php');
83
		$this->assertSame('core', $return);
84
 
85
		$return = $this->Shell->mapFileToCategory('lib/Cake/Core/App.php');
86
		$this->assertSame('core', $return);
87
 
88
		$return = $this->Shell->mapFileToCategory('lib/Cake/Some/Deeply/Nested/Structure.php');
89
		$this->assertSame('core', $return);
90
	}
91
 
92
/**
93
 * testMapCoreFileToCase
94
 *
95
 * basics.php is a slightly special case - it's the only file in the core with a test that isn't Capitalized
96
 *
97
 * @return void
98
 */
99
	public function testMapCoreFileToCase() {
100
		$this->Shell->startup();
101
 
102
		$return = $this->Shell->mapFileToCase('lib/Cake/basics.php', 'core');
103
		$this->assertSame('Basics', $return);
104
 
105
		$return = $this->Shell->mapFileToCase('lib/Cake/Core/App.php', 'core');
106
		$this->assertSame('Core/App', $return);
107
 
108
		$return = $this->Shell->mapFileToCase('lib/Cake/Some/Deeply/Nested/Structure.php', 'core', false);
109
		$this->assertSame('Some/Deeply/Nested/Structure', $return);
110
	}
111
 
112
/**
113
 * testMapAppFileToCategory
114
 *
115
 * @return void
116
 */
117
	public function testMapAppFileToCategory() {
118
		$this->Shell->startup();
119
 
120
		$return = $this->Shell->mapFileToCategory(APP . 'Controller/ExampleController.php');
121
		$this->assertSame('app', $return);
122
 
123
		$return = $this->Shell->mapFileToCategory(APP . 'My/File/Is/Here.php');
124
		$this->assertSame('app', $return);
125
	}
126
 
127
/**
128
 * testMapAppFileToCase
129
 *
130
 * @return void
131
 */
132
	public function testMapAppFileToCase() {
133
		$this->Shell->startup();
134
 
135
		$return = $this->Shell->mapFileToCase(APP . 'Controller/ExampleController.php', 'app', false);
136
		$this->assertSame('Controller/ExampleController', $return);
137
 
138
		$return = $this->Shell->mapFileToCase(APP . 'My/File/Is/Here.php', 'app', false);
139
		$this->assertSame('My/File/Is/Here', $return);
140
	}
141
 
142
/**
143
 * testMapPluginFileToCategory
144
 *
145
 * @return void
146
 */
147
	public function testMapPluginFileToCategory() {
148
		$this->Shell->startup();
149
 
150
		$return = $this->Shell->mapFileToCategory(APP . 'Plugin/awesome/Controller/ExampleController.php');
151
		$this->assertSame('awesome', $return);
152
 
153
		$return = $this->Shell->mapFileToCategory(dirname(CAKE) . 'plugins/awesome/Controller/ExampleController.php');
154
		$this->assertSame('awesome', $return);
155
	}
156
 
157
/**
158
 * testMapPluginFileToCase
159
 *
160
 * @return void
161
 */
162
	public function testMapPluginFileToCase() {
163
		$this->Shell->startup();
164
 
165
		$return = $this->Shell->mapFileToCase(APP . 'Plugin/awesome/Controller/ExampleController.php', 'awesome', false);
166
		$this->assertSame('Controller/ExampleController', $return);
167
 
168
		$return = $this->Shell->mapFileToCase(dirname(CAKE) . 'plugins/awesome/Controller/ExampleController.php', 'awesome', false);
169
		$this->assertSame('Controller/ExampleController', $return);
170
	}
171
 
172
/**
173
 * testMapCoreTestToCategory
174
 *
175
 * @return void
176
 */
177
	public function testMapCoreTestToCategory() {
178
		$this->Shell->startup();
179
 
180
		$return = $this->Shell->mapFileToCategory('lib/Cake/Test/Case/BasicsTest.php');
181
		$this->assertSame('core', $return);
182
 
183
		$return = $this->Shell->mapFileToCategory('lib/Cake/Test/Case/BasicsTest.php');
184
		$this->assertSame('core', $return);
185
 
186
		$return = $this->Shell->mapFileToCategory('lib/Cake/Test/Case/Some/Deeply/Nested/StructureTest.php');
187
		$this->assertSame('core', $return);
188
	}
189
 
190
/**
191
 * testMapCoreTestToCase
192
 *
193
 * basics.php is a slightly special case - it's the only file in the core with a test that isn't Capitalized
194
 *
195
 * @return void
196
 */
197
	public function testMapCoreTestToCase() {
198
		$this->Shell->startup();
199
 
200
		$return = $this->Shell->mapFileToCase('lib/Cake/Test/Case/BasicsTest.php', 'core');
201
		$this->assertSame('Basics', $return);
202
 
203
		$return = $this->Shell->mapFileToCase('lib/Cake/Test/Case/Core/AppTest.php', 'core');
204
		$this->assertSame('Core/App', $return);
205
 
206
		$return = $this->Shell->mapFileToCase('lib/Cake/Test/Case/Some/Deeply/Nested/StructureTest.php', 'core', false);
207
		$this->assertSame('Some/Deeply/Nested/Structure', $return);
208
	}
209
 
210
/**
211
 * testMapAppTestToCategory
212
 *
213
 * @return void
214
 */
215
	public function testMapAppTestToCategory() {
216
		$this->Shell->startup();
217
 
218
		$return = $this->Shell->mapFileToCategory(APP . 'Test/Case/Controller/ExampleControllerTest.php');
219
		$this->assertSame('app', $return);
220
 
221
		$return = $this->Shell->mapFileToCategory(APP . 'Test/Case/My/File/Is/HereTest.php');
222
		$this->assertSame('app', $return);
223
	}
224
 
225
/**
226
 * testMapAppTestToCase
227
 *
228
 * @return void
229
 */
230
	public function testMapAppTestToCase() {
231
		$this->Shell->startup();
232
 
233
		$return = $this->Shell->mapFileToCase(APP . 'Test/Case/Controller/ExampleControllerTest.php', 'app', false);
234
		$this->assertSame('Controller/ExampleController', $return);
235
 
236
		$return = $this->Shell->mapFileToCase(APP . 'Test/Case/My/File/Is/HereTest.php', 'app', false);
237
		$this->assertSame('My/File/Is/Here', $return);
238
	}
239
 
240
/**
241
 * testMapPluginTestToCategory
242
 *
243
 * @return void
244
 */
245
	public function testMapPluginTestToCategory() {
246
		$this->Shell->startup();
247
 
248
		$return = $this->Shell->mapFileToCategory(APP . 'Plugin/awesome/Test/Case/Controller/ExampleControllerTest.php');
249
		$this->assertSame('awesome', $return);
250
 
251
		$return = $this->Shell->mapFileToCategory(dirname(CAKE) . 'plugins/awesome/Test/Case/Controller/ExampleControllerTest.php');
252
		$this->assertSame('awesome', $return);
253
	}
254
 
255
/**
256
 * testMapPluginTestToCase
257
 *
258
 * @return void
259
 */
260
	public function testMapPluginTestToCase() {
261
		$this->Shell->startup();
262
 
263
		$return = $this->Shell->mapFileToCase(APP . 'Plugin/awesome/Test/Case/Controller/ExampleControllerTest.php', 'awesome', false);
264
		$this->assertSame('Controller/ExampleController', $return);
265
 
266
		$return = $this->Shell->mapFileToCase(dirname(CAKE) . 'plugins/awesome/Test/Case/Controller/ExampleControllerTest.php', 'awesome', false);
267
		$this->assertSame('Controller/ExampleController', $return);
268
	}
269
 
270
/**
271
 * testMapNotTestToNothing
272
 *
273
 * @return void
274
 */
275
	public function testMapNotTestToNothing() {
276
		$this->Shell->startup();
277
 
278
		$return = $this->Shell->mapFileToCategory(APP . 'Test/Case/NotATestFile.php');
279
		$this->assertSame('app', $return);
280
 
281
		$return = $this->Shell->mapFileToCase(APP . 'Test/Case/NotATestFile.php', false, false);
282
		$this->assertFalse($return);
283
 
284
		$return = $this->Shell->mapFileToCategory(APP . 'Test/Fixture/SomeTest.php');
285
		$this->assertSame('app', $return);
286
 
287
		$return = $this->Shell->mapFileToCase(APP . 'Test/Fixture/SomeTest.php', false, false);
288
		$this->assertFalse($return);
289
	}
290
 
291
/**
292
 * test available list of test cases for an empty category
293
 *
294
 * @return void
295
 */
296
	public function testAvailableWithEmptyList() {
297
		$this->Shell->startup();
298
		$this->Shell->args = array('unexistant-category');
299
		$this->Shell->expects($this->at(0))->method('out')->with(__d('cake_console', "No test cases available \n\n"));
300
		$this->Shell->OptionParser->expects($this->once())->method('help');
301
		$this->Shell->available();
302
	}
303
 
304
/**
305
 * test available list of test cases for core category
306
 *
307
 * @return void
308
 */
309
	public function testAvailableCoreCategory() {
310
		$this->Shell->startup();
311
		$this->Shell->args = array('core');
312
		$this->Shell->expects($this->at(0))->method('out')->with('Core Test Cases:');
313
		$this->Shell->expects($this->at(1))->method('out')
314
			->with($this->stringContains('[1]'));
315
		$this->Shell->expects($this->at(2))->method('out')
316
			->with($this->stringContains('[2]'));
317
 
318
		$this->Shell->expects($this->once())->method('in')
319
			->with(__d('cake_console', 'What test case would you like to run?'), null, 'q')
320
			->will($this->returnValue('1'));
321
 
322
		$this->Shell->expects($this->once())->method('_run');
323
		$this->Shell->available();
324
		$this->assertEquals(array('core', 'AllBehaviors'), $this->Shell->args);
325
	}
326
 
327
/**
328
 * Tests that correct option for test runner are passed
329
 *
330
 * @return void
331
 */
332
	public function testRunnerOptions() {
333
		$this->Shell->startup();
334
		$this->Shell->args = array('core', 'Basics');
335
		$this->Shell->params = array('filter' => 'myFilter', 'colors' => true, 'verbose' => true);
336
 
337
		$this->Shell->expects($this->once())->method('_run')
338
			->with(
339
				array('app' => false, 'plugin' => null, 'core' => true, 'output' => 'text', 'case' => 'Basics'),
340
				array('--filter', 'myFilter', '--colors', '--verbose')
341
			);
342
		$this->Shell->main();
343
	}
344
}