You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
330 lines
10 KiB
330 lines
10 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yiiunit\framework; |
|
|
|
use Psr\Log\LogLevel; |
|
use Yii; |
|
use yii\base\InvalidArgumentException; |
|
use yii\BaseYii; |
|
use yii\di\Container; |
|
use yii\log\Logger; |
|
use yii\profile\Profiler; |
|
use yiiunit\data\base\Singer; |
|
use yiiunit\TestCase; |
|
|
|
/** |
|
* BaseYiiTest. |
|
* @group base |
|
*/ |
|
class BaseYiiTest extends TestCase |
|
{ |
|
public $aliases; |
|
|
|
protected function setUp() |
|
{ |
|
parent::setUp(); |
|
$this->aliases = Yii::$aliases; |
|
} |
|
|
|
protected function tearDown() |
|
{ |
|
parent::tearDown(); |
|
Yii::$aliases = $this->aliases; |
|
Yii::setLogger(null); |
|
Yii::setProfiler(null); |
|
} |
|
|
|
public function testAlias() |
|
{ |
|
$this->assertEquals(YII2_PATH, Yii::getAlias('@yii')); |
|
|
|
Yii::$aliases = []; |
|
$this->assertFalse(Yii::getAlias('@yii', false)); |
|
|
|
$aliasNotBeginsWithAt = 'alias not begins with @'; |
|
$this->assertEquals($aliasNotBeginsWithAt, Yii::getAlias($aliasNotBeginsWithAt)); |
|
|
|
Yii::setAlias('@yii', '/yii/framework'); |
|
$this->assertEquals('/yii/framework', Yii::getAlias('@yii')); |
|
$this->assertEquals('/yii/framework/test/file', Yii::getAlias('@yii/test/file')); |
|
Yii::setAlias('yii/gii', '/yii/gii'); |
|
$this->assertEquals('/yii/framework', Yii::getAlias('@yii')); |
|
$this->assertEquals('/yii/framework/test/file', Yii::getAlias('@yii/test/file')); |
|
$this->assertEquals('/yii/gii', Yii::getAlias('@yii/gii')); |
|
$this->assertEquals('/yii/gii/file', Yii::getAlias('@yii/gii/file')); |
|
|
|
Yii::setAlias('@tii', '@yii/test'); |
|
$this->assertEquals('/yii/framework/test', Yii::getAlias('@tii')); |
|
|
|
Yii::setAlias('@yii', null); |
|
$this->assertFalse(Yii::getAlias('@yii', false)); |
|
$this->assertEquals('/yii/gii/file', Yii::getAlias('@yii/gii/file')); |
|
|
|
Yii::setAlias('@some/alias', '/www'); |
|
$this->assertEquals('/www', Yii::getAlias('@some/alias')); |
|
|
|
$erroneousAlias = '@alias_not_exists'; |
|
$this->expectException(InvalidArgumentException::class); |
|
$this->expectExceptionMessage(sprintf('Invalid path alias: %s', $erroneousAlias)); |
|
Yii::getAlias($erroneousAlias, true); |
|
|
|
} |
|
|
|
public function testGetRootAlias() |
|
{ |
|
Yii::$aliases = []; |
|
Yii::setAlias('@yii', '/yii/framework'); |
|
$this->assertEquals('@yii', Yii::getRootAlias('@yii')); |
|
$this->assertEquals('@yii', Yii::getRootAlias('@yii/test/file')); |
|
Yii::setAlias('@yii/gii', '/yii/gii'); |
|
$this->assertEquals('@yii/gii', Yii::getRootAlias('@yii/gii')); |
|
} |
|
|
|
/* |
|
* Phpunit calculate coverage better in case of small tests |
|
*/ |
|
public function testSetAlias() |
|
{ |
|
Yii::$aliases = []; |
|
Yii::setAlias('@yii/gii', '/yii/gii'); |
|
$this->assertEquals('/yii/gii', Yii::getAlias('@yii/gii')); |
|
Yii::setAlias('@yii/tii', '/yii/tii'); |
|
$this->assertEquals('/yii/tii', Yii::getAlias('@yii/tii')); |
|
|
|
} |
|
|
|
public function testGetVersion() |
|
{ |
|
$this->assertTrue((bool) preg_match('~\d+\.\d+(?:\.\d+)?(?:-\w+)?~', \Yii::getVersion())); |
|
} |
|
|
|
public function testCreateObjectCallable() |
|
{ |
|
Yii::$container = new Container(); |
|
|
|
// Test passing in of normal params combined with DI params. |
|
$this->assertTrue(Yii::createObject(function (Singer $singer, $a) { |
|
return $a === 'a'; |
|
}, ['a'])); |
|
|
|
|
|
$singer = new Singer(); |
|
$singer->firstName = 'Bob'; |
|
$this->assertTrue(Yii::createObject(function (Singer $singer, $a) { |
|
return $singer->firstName === 'Bob'; |
|
}, [$singer, 'a'])); |
|
|
|
|
|
$this->assertTrue(Yii::createObject(function (Singer $singer, $a = 3) { |
|
return true; |
|
})); |
|
} |
|
|
|
public function testCreateObjectEmptyArrayException() |
|
{ |
|
$this->expectException('yii\base\InvalidConfigException'); |
|
$this->expectExceptionMessage('Object configuration must be an array containing a "class" element.'); |
|
|
|
Yii::createObject([]); |
|
} |
|
|
|
public function testCreateObjectInvalidConfigException() |
|
{ |
|
$this->expectException('yii\base\InvalidConfigException'); |
|
$this->expectExceptionMessage('Unsupported configuration type: ' . gettype(null)); |
|
|
|
Yii::createObject(null); |
|
} |
|
|
|
/** |
|
* @covers \yii\BaseYii::setLogger() |
|
* @covers \yii\BaseYii::getLogger() |
|
*/ |
|
public function testSetupLogger() |
|
{ |
|
$logger = new Logger(); |
|
BaseYii::setLogger($logger); |
|
|
|
$this->assertSame($logger, BaseYii::getLogger()); |
|
|
|
BaseYii::setLogger(null); |
|
$defaultLogger = BaseYii::getLogger(); |
|
$this->assertInstanceOf(Logger::class, $defaultLogger); |
|
|
|
BaseYii::setLogger(['flushInterval' => 789]); |
|
$logger = BaseYii::getLogger(); |
|
$this->assertSame($defaultLogger, $logger); |
|
$this->assertEquals(789, $logger->flushInterval); |
|
|
|
BaseYii::setLogger(function() { |
|
return new Logger(); |
|
}); |
|
$this->assertNotSame($defaultLogger, BaseYii::getLogger()); |
|
|
|
BaseYii::setLogger(null); |
|
$defaultLogger = BaseYii::getLogger(); |
|
BaseYii::setLogger([ |
|
'class' => Logger::class, |
|
'flushInterval' => 987, |
|
]); |
|
$logger = BaseYii::getLogger(); |
|
$this->assertNotSame($defaultLogger, $logger); |
|
$this->assertEquals(987, $logger->flushInterval); |
|
} |
|
|
|
/** |
|
* @covers \yii\BaseYii::setProfiler() |
|
* @covers \yii\BaseYii::getProfiler() |
|
*/ |
|
public function testSetupProfiler() |
|
{ |
|
$profiler = new Profiler(); |
|
BaseYii::setProfiler($profiler); |
|
|
|
$this->assertSame($profiler, BaseYii::getProfiler()); |
|
|
|
$this->assertEmpty($profiler->messages); |
|
$messages = ['test' => 1, 'test2'=> 'test']; |
|
BaseYii::setProfiler(['messages' => $messages]); |
|
$this->assertSame($profiler, BaseYii::getProfiler()); |
|
$this->assertEquals(1, $profiler->messages['test']); |
|
$this->assertEquals('test', $profiler->messages['test2']); |
|
|
|
|
|
BaseYii::setProfiler(null); |
|
$defaultProfiler = BaseYii::getProfiler(); |
|
$this->assertInstanceOf(Profiler::class, $defaultProfiler); |
|
|
|
BaseYii::setProfiler(function() { |
|
return new Profiler(); |
|
}); |
|
$this->assertNotSame($defaultProfiler, BaseYii::getProfiler()); |
|
|
|
BaseYii::setProfiler(null); |
|
$defaultProfiler = BaseYii::getProfiler(); |
|
BaseYii::setProfiler([ |
|
'class' => Profiler::class, |
|
]); |
|
$profiler = BaseYii::getProfiler(); |
|
$this->assertNotSame($defaultProfiler, $profiler); |
|
} |
|
|
|
/** |
|
* @depends testSetupLogger |
|
* |
|
* @covers \yii\BaseYii::info() |
|
* @covers \yii\BaseYii::warning() |
|
* @covers \yii\BaseYii::debug() |
|
* @covers \yii\BaseYii::error() |
|
*/ |
|
public function testLog() |
|
{ |
|
$logger = $this->getMockBuilder(Logger::class) |
|
->setMethods(['log']) |
|
->getMock(); |
|
BaseYii::setLogger($logger); |
|
|
|
$logger->expects($this->exactly(4)) |
|
->method('log') |
|
->withConsecutive( |
|
[ |
|
$this->equalTo(LogLevel::INFO), |
|
$this->equalTo('info message'), |
|
$this->equalTo(['category' => 'info category']) |
|
], |
|
[ |
|
$this->equalTo(LogLevel::WARNING), |
|
$this->equalTo('warning message'), |
|
$this->equalTo(['category' => 'warning category']), |
|
], |
|
[ |
|
$this->equalTo(LogLevel::DEBUG), |
|
$this->equalTo('trace message'), |
|
$this->equalTo(['category' => 'trace category']) |
|
], |
|
[ |
|
$this->equalTo(LogLevel::ERROR), |
|
$this->equalTo('error message'), |
|
$this->equalTo(['category' => 'error category']) |
|
] |
|
); |
|
|
|
BaseYii::info('info message', 'info category'); |
|
BaseYii::warning('warning message', 'warning category'); |
|
BaseYii::debug('trace message', 'trace category'); |
|
BaseYii::error('error message', 'error category'); |
|
|
|
} |
|
|
|
/* |
|
* Phpunit calculate coverage better in case of small tests |
|
*/ |
|
public function testLoggerWithException() |
|
{ |
|
$logger = $this->getMockBuilder(Logger::class) |
|
->setMethods(['log']) |
|
->getMock(); |
|
BaseYii::setLogger($logger); |
|
$throwable = new \Exception('test'); |
|
|
|
$logger |
|
->expects($this->once()) |
|
->method('log')->with( |
|
$this->equalTo(LogLevel::ERROR), |
|
$this->equalTo($throwable), |
|
$this->equalTo(['category' => 'error category', 'exception' => $throwable]) |
|
); |
|
|
|
BaseYii::error($throwable, 'error category'); |
|
} |
|
|
|
/** |
|
* @depends testSetupProfiler |
|
* |
|
* @covers \yii\BaseYii::beginProfile() |
|
* @covers \yii\BaseYii::endProfile() |
|
*/ |
|
public function testProfile() |
|
{ |
|
$profiler = $this->getMockBuilder('yii\profile\Profiler') |
|
->setMethods(['begin', 'end']) |
|
->getMock(); |
|
BaseYii::setProfiler($profiler); |
|
|
|
$profiler->expects($this->exactly(2)) |
|
->method('begin') |
|
->withConsecutive( |
|
[ |
|
$this->equalTo('Profile message 1'), |
|
$this->equalTo(['category' => 'Profile category 1']) |
|
], |
|
[ |
|
$this->equalTo('Profile message 2'), |
|
$this->equalTo(['category' => 'Profile category 2']), |
|
] |
|
); |
|
|
|
$profiler->expects($this->exactly(2)) |
|
->method('end') |
|
->withConsecutive( |
|
[ |
|
$this->equalTo('Profile message 1'), |
|
$this->equalTo(['category' => 'Profile category 1']) |
|
], |
|
[ |
|
$this->equalTo('Profile message 2'), |
|
$this->equalTo(['category' => 'Profile category 2']), |
|
] |
|
); |
|
|
|
BaseYii::beginProfile('Profile message 1', 'Profile category 1'); |
|
BaseYii::endProfile('Profile message 1', 'Profile category 1'); |
|
BaseYii::beginProfile('Profile message 2', 'Profile category 2'); |
|
BaseYii::endProfile('Profile message 2', 'Profile category 2'); |
|
} |
|
}
|
|
|