diff --git a/library/think/App.php b/library/think/App.php index ea01abaa..6f88a9ab 100644 --- a/library/think/App.php +++ b/library/think/App.php @@ -212,11 +212,11 @@ class App // 获取控制器名 $controllerName = strip_tags($result[1] ?: Config::get('default_controller')); - define('CONTROLLER_NAME', Config::get('url_controller_convert') ? strtolower($controllerName) : $controllerName); + defined('CONTROLLER_NAME') or define('CONTROLLER_NAME', Config::get('url_controller_convert') ? strtolower($controllerName) : $controllerName); // 获取操作名 $actionName = strip_tags($result[2] ?: Config::get('default_action')); - define('ACTION_NAME', Config::get('url_action_convert') ? strtolower($actionName) : $actionName); + defined('ACTION_NAME') or define('ACTION_NAME', Config::get('url_action_convert') ? strtolower($actionName) : $actionName); // 执行操作 if (!preg_match('/^[A-Za-z](\/|\.|\w)*$/', CONTROLLER_NAME)) { diff --git a/tests/README.md b/tests/README.md index 8de71e33..5bba9a74 100644 --- a/tests/README.md +++ b/tests/README.md @@ -108,7 +108,7 @@ thinkphp5 的测试的主要流程是跟 thinkphp 的系统流程是相似的, |模块|认领人|进度| |---|---|---| |Base||| -|App|Haotong Lin|| +|App|Haotong Lin|√| |Build|刘志淳|| |Config|Haotong Lin|√| |Cache||| @@ -117,6 +117,7 @@ thinkphp5 的测试的主要流程是跟 thinkphp 的系统流程是相似的, |Db||| |Debug|大漠|√| |Error|大漠|| +|Exception|Haotong Lin|√| |Hook|流年|√| |Input|Haotong Lin|√| |Lang|流年|√| diff --git a/tests/thinkphp/library/think/appTest.php b/tests/thinkphp/library/think/appTest.php index 490832a8..a38e9d04 100644 --- a/tests/thinkphp/library/think/appTest.php +++ b/tests/thinkphp/library/think/appTest.php @@ -16,12 +16,82 @@ namespace tests\thinkphp\library\think; +use ReflectionClass; +use think\App; +use think\Config; + +function func_trim($value) +{ + return trim($value); +} + +function func_strpos($haystack, $needle) +{ + return strpos($haystack, $needle); +} + +class AppInvokeMethodTestClass +{ + public static function staticRun($string) + { + return $string; + } + + public function run($string) + { + return $string; + } +} + class appTest extends \PHPUnit_Framework_TestCase { public function testRun() { - //\think\App::run(); - //$this->expectOutputString('

:)

欢迎使用 ThinkPHP5

'); - // todo... + Config::set('root_namespace', ['/path/']); + + App::run(); + + $expectOutputString = '

:)

欢迎使用 ThinkPHP5

'; + $this->expectOutputString($expectOutputString); + + $rc = new ReflectionClass('\think\Loader'); + $ns = $rc->getProperty('namespace'); + $ns->setAccessible(true); + $this->assertEquals(true, in_array('/path/', $ns->getValue())); + + $this->assertEquals(true, function_exists('L')); + $this->assertEquals(true, function_exists('C')); + $this->assertEquals(true, function_exists('I')); + + $this->assertEquals(Config::get('default_timezone'), date_default_timezone_get()); + + } + + // function调度 + public function testInvokeFunction() + { + $args1 = ['a b c ']; + $this->assertEquals( + trim($args1[0]), + App::invokeFunction('tests\thinkphp\library\think\func_trim', $args1) + ); + + $args2 = ['abcdefg', 'g']; + $this->assertEquals( + strpos($args2[0], $args2[1]), + App::invokeFunction('tests\thinkphp\library\think\func_strpos', $args2) + ); + } + + // 类method调度 + public function testInvokeMethod() + { + $_GET = ['thinkphp']; + $result = App::invokeMethod(['tests\thinkphp\library\think\AppInvokeMethodTestClass', 'run']); + $this->assertEquals('thinkphp', $result); + + $_GET = ['thinkphp']; + $result = App::invokeMethod('tests\thinkphp\library\think\AppInvokeMethodTestClass::staticRun'); + $this->assertEquals('thinkphp', $result); } } diff --git a/tests/thinkphp/library/think/exceptionTest.php b/tests/thinkphp/library/think/exceptionTest.php new file mode 100644 index 00000000..e6aa13f8 --- /dev/null +++ b/tests/thinkphp/library/think/exceptionTest.php @@ -0,0 +1,51 @@ + +// +---------------------------------------------------------------------- + +/** + * exception类测试 + * @author Haotong Lin + */ + +namespace tests\thinkphp\library\think; + +use ReflectionMethod; +use think\Exception as ThinkException; + +class MyException extends ThinkException +{ + +} + +class exceptionTest extends \PHPUnit_Framework_TestCase +{ + public function testGetHttpStatus() + { + try { + throw new ThinkException("Error Processing Request", 1); + } catch (ThinkException $e) { + $this->assertEquals(500, $e->getHttpStatus()); + } + } + + public function testDebugData() + { + $data = ['a' => 'b', 'c' => 'd']; + try { + $e = new MyException("Error Processing Request", 1); + $method = new ReflectionMethod($e, 'setData'); + $method->setAccessible(true); + $method->invokeArgs($e, ['test', $data]); + throw $e; + } catch (MyException $e) { + $this->assertEquals(['test' => $data], $e->getData()); + } + } +} diff --git a/tests/thinkphp/library/think/routeTest.php b/tests/thinkphp/library/think/routeTest.php index 6aaf2ec2..44a9385d 100644 --- a/tests/thinkphp/library/think/routeTest.php +++ b/tests/thinkphp/library/think/routeTest.php @@ -94,7 +94,8 @@ class routeTest extends \PHPUnit_Framework_TestCase { Route::pattern(['id' => '\d+', 'name' => '\w{6,25}']); Route::group('group', [':id' => 'index/hello', ':name' => 'index/say']); - $this->assertEquals(false, Route::check('group/think')); + $this->assertEquals(false, Route::check('empty/think')); + $this->assertEquals(['type' => 'module', 'module' => [null, 'index', 'say']], Route::check('group/think')); $this->assertEquals(['type' => 'module', 'module' => [null, 'index', 'hello']], Route::check('group/10')); $this->assertEquals(['type' => 'module', 'module' => [null, 'index', 'say']], Route::check('group/thinkphp')); } diff --git a/tests/thinkphp/library/think/viewTest.php b/tests/thinkphp/library/think/viewTest.php index 9ebcd906..efb377f3 100644 --- a/tests/thinkphp/library/think/viewTest.php +++ b/tests/thinkphp/library/think/viewTest.php @@ -124,7 +124,12 @@ class viewTest extends \PHPUnit_Framework_TestCase $view_instance = \think\View::instance(); $method = new \ReflectionMethod('\think\View', 'ParseTemplate'); $method->setAccessible(true); - $this->assertEquals(DS . 'theme_name' . DS . 'template_name.html', $method->invoke($view_instance, 'template_name')); + if (defined('CONTROLLER_NAME')) { + $expect_data = DS . 'theme_name' . DS . CONTROLLER_NAME . DS . 'template_name.html'; + } else { + $expect_data = DS . 'theme_name' . DS . 'template_name.html'; + } + $this->assertEquals($expect_data, $method->invoke($view_instance, 'template_name')); } /**