Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
12345 anikendra 1
<?php
2
/**
3
 * ConsoleErrorHandler 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
15
 * @since         CakePHP(tm) v 2.0
16
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
17
 */
18
 
19
App::uses('ConsoleErrorHandler', 'Console');
20
 
21
/**
22
 * ConsoleErrorHandler Test case.
23
 *
24
 * @package       Cake.Test.Case.Console
25
 */
26
class ConsoleErrorHandlerTest extends CakeTestCase {
27
 
28
/**
29
 * setup, create mocks
30
 *
31
 * @return Mock object
32
 */
33
	public function setUp() {
34
		parent::setUp();
35
		$this->Error = $this->getMock('ConsoleErrorHandler', array('_stop'));
36
		ConsoleErrorHandler::$stderr = $this->getMock('ConsoleOutput', array(), array(), '', false);
37
	}
38
 
39
/**
40
 * tearDown
41
 *
42
 * @return void
43
 */
44
	public function tearDown() {
45
		unset($this->Error);
46
		parent::tearDown();
47
	}
48
 
49
/**
50
 * test that the console error handler can deal with CakeExceptions.
51
 *
52
 * @return void
53
 */
54
	public function testHandleError() {
55
		$content = "<error>Notice Error:</error> This is a notice error in [/some/file, line 275]\n";
56
		ConsoleErrorHandler::$stderr->expects($this->once())->method('write')
57
			->with($content);
58
 
59
		$this->Error->handleError(E_NOTICE, 'This is a notice error', '/some/file', 275);
60
	}
61
 
62
/**
63
 * test that the console error handler can deal with fatal errors.
64
 *
65
 * @return void
66
 */
67
	public function testHandleFatalError() {
68
		$content = "<error>Fatal Error Error:</error> This is a fatal error in [/some/file, line 275]\n";
69
		ConsoleErrorHandler::$stderr->expects($this->once())->method('write')
70
			->with($content);
71
 
72
		$this->Error->expects($this->once())
73
			->method('_stop')
74
			->with(1);
75
 
76
		$this->Error->handleError(E_USER_ERROR, 'This is a fatal error', '/some/file', 275);
77
	}
78
 
79
/**
80
 * test that the console error handler can deal with CakeExceptions.
81
 *
82
 * @return void
83
 */
84
	public function testCakeErrors() {
85
		$exception = new MissingActionException('Missing action');
86
		ConsoleErrorHandler::$stderr->expects($this->once())->method('write')
87
			->with($this->stringContains('Missing action'));
88
 
89
		$this->Error->expects($this->once())
90
			->method('_stop')
91
			->with(404);
92
 
93
		$this->Error->handleException($exception);
94
	}
95
 
96
/**
97
 * test a non CakeException exception.
98
 *
99
 * @return void
100
 */
101
	public function testNonCakeExceptions() {
102
		$exception = new InvalidArgumentException('Too many parameters.');
103
 
104
		ConsoleErrorHandler::$stderr->expects($this->once())->method('write')
105
			->with($this->stringContains('Too many parameters.'));
106
 
107
		$this->Error->expects($this->once())
108
			->method('_stop')
109
			->with(1);
110
 
111
		$this->Error->handleException($exception);
112
	}
113
 
114
/**
115
 * test a Error404 exception.
116
 *
117
 * @return void
118
 */
119
	public function testError404Exception() {
120
		$exception = new NotFoundException('dont use me in cli.');
121
 
122
		ConsoleErrorHandler::$stderr->expects($this->once())->method('write')
123
			->with($this->stringContains('dont use me in cli.'));
124
 
125
		$this->Error->expects($this->once())
126
			->method('_stop')
127
			->with(404);
128
 
129
		$this->Error->handleException($exception);
130
	}
131
 
132
/**
133
 * test a Error500 exception.
134
 *
135
 * @return void
136
 */
137
	public function testError500Exception() {
138
		$exception = new InternalErrorException('dont use me in cli.');
139
 
140
		ConsoleErrorHandler::$stderr->expects($this->once())->method('write')
141
			->with($this->stringContains('dont use me in cli.'));
142
 
143
		$this->Error->expects($this->once())
144
			->method('_stop')
145
			->with(500);
146
 
147
		$this->Error->handleException($exception);
148
	}
149
 
150
/**
151
 * test a exception with non-integer code
152
 *
153
 * @return void
154
 */
155
	public function testNonIntegerExceptionCode() {
156
		if (PHP_VERSION_ID < 50300) {
157
			$this->markTestSkipped('ReflectionProperty::setAccessible() is available since 5.3');
158
		}
159
 
160
		$exception = new Exception('Non-integer exception code');
161
 
162
		$class = new ReflectionClass('Exception');
163
		$property = $class->getProperty('code');
164
		$property->setAccessible(true);
165
		$property->setValue($exception, '42S22');
166
 
167
		ConsoleErrorHandler::$stderr->expects($this->once())->method('write')
168
			->with($this->stringContains('Non-integer exception code'));
169
 
170
		$this->Error->expects($this->once())
171
			->method('_stop')
172
			->with(1);
173
 
174
		$this->Error->handleException($exception);
175
	}
176
 
177
}