Browse Source

Removed PHPUnit6 compatibility polyfill, fixed some tests

tags/3.0.0-alpha1
Alexander Makarov 7 years ago committed by GitHub
parent
commit
6100194bf7
  1. 2
      composer.json
  2. 1072
      composer.lock
  3. 1
      tests/bootstrap.php
  4. 62
      tests/compatibility.php
  5. 2
      tests/framework/db/GetTablesAliasTestTrait.php
  6. 63
      tests/framework/di/InstanceTest.php
  7. 2
      tests/framework/filters/RateLimiterTest.php
  8. 6
      tests/framework/helpers/ArrayHelperTest.php
  9. 11
      tests/framework/helpers/HtmlTest.php
  10. 2
      tests/framework/helpers/JsonTest.php
  11. 6
      tests/framework/i18n/MessageFormatterTest.php
  12. 8
      tests/framework/validators/UniqueValidatorTest.php
  13. 2
      tests/framework/widgets/ActiveFormTest.php
  14. 4
      tests/framework/widgets/ListViewTest.php

2
composer.json

@ -81,7 +81,7 @@
"bower-asset/yii2-pjax": "~2.0.1" "bower-asset/yii2-pjax": "~2.0.1"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "4.8.34", "phpunit/phpunit": "~6.2.3",
"cebe/indent": "~1.0.2", "cebe/indent": "~1.0.2",
"friendsofphp/php-cs-fixer": "~2.2.3" "friendsofphp/php-cs-fixer": "~2.2.3"
}, },

1072
composer.lock generated

File diff suppressed because it is too large Load Diff

1
tests/bootstrap.php

@ -23,5 +23,4 @@ require_once __DIR__ . '/../framework/Yii.php';
Yii::setAlias('@yiiunit', __DIR__); Yii::setAlias('@yiiunit', __DIR__);
require_once __DIR__ . '/compatibility.php';
require_once __DIR__ . '/TestCase.php'; require_once __DIR__ . '/TestCase.php';

62
tests/compatibility.php

@ -1,62 +0,0 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
/*
* Ensures compatibility with PHPUnit < 6.x
*/
namespace PHPUnit\Framework\Constraint {
if (!class_exists('PHPUnit\Framework\Constraint\Constraint') && class_exists('PHPUnit_Framework_Constraint')) {
abstract class Constraint extends \PHPUnit_Framework_Constraint
{
}
}
}
namespace PHPUnit\Framework {
if (!class_exists('PHPUnit\Framework\TestCase') && class_exists('PHPUnit_Framework_TestCase')) {
echo "Applying compatibility patch for PHPUnit 6...\n";
abstract class TestCase extends \PHPUnit_Framework_TestCase
{
/**
* @param string $exception
*/
public function expectException($exception)
{
$this->setExpectedException($exception);
}
/**
* @param string $message
*/
public function expectExceptionMessage($message)
{
$parentClassMethods = get_class_methods('PHPUnit_Framework_TestCase');
if (in_array('expectExceptionMessage', $parentClassMethods)) {
parent::expectExceptionMessage($message);
return;
}
$this->setExpectedException($this->getExpectedException(), $message);
}
/**
* @param string $messageRegExp
*/
public function expectExceptionMessageRegExp($messageRegExp)
{
$parentClassMethods = get_class_methods('PHPUnit_Framework_TestCase');
if (in_array('expectExceptionMessageRegExp', $parentClassMethods)) {
parent::expectExceptionMessageRegExp($messageRegExp);
return;
}
$this->setExpectedExceptionRegExp($this->getExpectedException(), $messageRegExp);
}
}
}
}

2
tests/framework/db/GetTablesAliasTestTrait.php

@ -51,7 +51,7 @@ trait GetTablesAliasTestTrait
$query = $this->createQuery(); $query = $this->createQuery();
$query->from = new \stdClass(); $query->from = new \stdClass();
$this->setExpectedException('\yii\base\InvalidConfigException'); $this->expectException(\yii\base\InvalidConfigException::class);
$query->getTablesUsedInFrom(); $query->getTablesUsedInFrom();
} }

63
tests/framework/di/InstanceTest.php

@ -9,6 +9,10 @@ namespace yiiunit\framework\di;
use Yii; use Yii;
use yii\base\Component; use yii\base\Component;
use yii\base\InvalidConfigException;
use yii\base\Widget;
use yii\caching\CacheInterface;
use yii\caching\DbCache;
use yii\db\Connection; use yii\db\Connection;
use yii\di\Container; use yii\di\Container;
use yii\di\Instance; use yii\di\Instance;
@ -33,7 +37,7 @@ class InstanceTest extends TestCase
$className = Component::class; $className = Component::class;
$instance = Instance::of($className); $instance = Instance::of($className);
$this->assertInstanceOf('\\yii\\di\\Instance', $instance); $this->assertInstanceOf(Instance::class, $instance);
$this->assertInstanceOf(Component::class, $instance->get($container)); $this->assertInstanceOf(Component::class, $instance->get($container));
$this->assertInstanceOf(Component::class, Instance::ensure($instance, $className, $container)); $this->assertInstanceOf(Component::class, Instance::ensure($instance, $className, $container));
$this->assertNotSame($instance->get($container), Instance::ensure($instance, $className, $container)); $this->assertNotSame($instance->get($container), Instance::ensure($instance, $className, $container));
@ -43,13 +47,13 @@ class InstanceTest extends TestCase
{ {
$container = new Container(); $container = new Container();
$container->set('db', [ $container->set('db', [
'class' => 'yii\db\Connection', 'class' => Connection::class,
'dsn' => 'test', 'dsn' => 'test',
]); ]);
$this->assertInstanceOf(Connection::class, Instance::ensure('db', 'yii\db\Connection', $container)); $this->assertInstanceOf(Connection::class, Instance::ensure('db', Connection::class, $container));
$this->assertInstanceOf(Connection::class, Instance::ensure(new Connection(), 'yii\db\Connection', $container)); $this->assertInstanceOf(Connection::class, Instance::ensure(new Connection(), Connection::class, $container));
$this->assertInstanceOf('\\yii\\db\\Connection', Instance::ensure(['class' => 'yii\db\Connection', 'dsn' => 'test'], 'yii\db\Connection', $container)); $this->assertInstanceOf(Connection::class, Instance::ensure(['class' => Connection::class, 'dsn' => 'test'], Connection::class, $container));
} }
/** /**
@ -58,9 +62,9 @@ class InstanceTest extends TestCase
public function testEnsure_NonExistingComponentException() public function testEnsure_NonExistingComponentException()
{ {
$container = new Container(); $container = new Container();
$this->expectException('yii\base\InvalidConfigException'); $this->expectException(InvalidConfigException::class);
$this->expectExceptionMessageRegExp('/^Failed to instantiate component or class/i'); $this->expectExceptionMessageRegExp('/^Failed to instantiate component or class/i');
Instance::ensure('cache', 'yii\cache\Cache', $container); Instance::ensure('cache', CacheInterface::class, $container);
} }
/** /**
@ -69,34 +73,34 @@ class InstanceTest extends TestCase
public function testEnsure_NonExistingClassException() public function testEnsure_NonExistingClassException()
{ {
$container = new Container(); $container = new Container();
$this->expectException('yii\base\InvalidConfigException'); $this->expectException(InvalidConfigException::class);
$this->expectExceptionMessageRegExp('/^Failed to instantiate component or class/i'); $this->expectExceptionMessageRegExp('/^Failed to instantiate component or class/i');
Instance::ensure('yii\cache\DoesNotExist', 'yii\cache\Cache', $container); Instance::ensure('yii\cache\DoesNotExist', CacheInterface::class, $container);
} }
public function testEnsure_WithoutType() public function testEnsure_WithoutType()
{ {
$container = new Container(); $container = new Container();
$container->set('db', [ $container->set('db', [
'class' => 'yii\db\Connection', 'class' => Connection::class,
'dsn' => 'test', 'dsn' => 'test',
]); ]);
$this->assertInstanceOf(Connection::class, Instance::ensure('db', null, $container)); $this->assertInstanceOf(Connection::class, Instance::ensure('db', null, $container));
$this->assertInstanceOf(Connection::class, Instance::ensure(new Connection, null, $container)); $this->assertInstanceOf(Connection::class, Instance::ensure(new Connection, null, $container));
$this->assertInstanceOf('\\yii\\db\\Connection', Instance::ensure(['class' => 'yii\db\Connection', 'dsn' => 'test'], null, $container)); $this->assertInstanceOf(Connection::class, Instance::ensure(['class' => Connection::class, 'dsn' => 'test'], null, $container));
} }
public function testEnsure_MinimalSettings() public function testEnsure_MinimalSettings()
{ {
Yii::$container->set('db', [ Yii::$container->set('db', [
'class' => 'yii\db\Connection', 'class' => Connection::class,
'dsn' => 'test', 'dsn' => 'test',
]); ]);
$this->assertInstanceOf(Connection::class, Instance::ensure('db')); $this->assertInstanceOf(Connection::class, Instance::ensure('db'));
$this->assertInstanceOf(Connection::class, Instance::ensure(new Connection())); $this->assertInstanceOf(Connection::class, Instance::ensure(new Connection()));
$this->assertInstanceOf(Connection::class, Instance::ensure(['class' => 'yii\db\Connection', 'dsn' => 'test'])); $this->assertInstanceOf(Connection::class, Instance::ensure(['class' => Connection::class, 'dsn' => 'test']));
Yii::$container = new Container(); Yii::$container = new Container();
} }
@ -104,26 +108,26 @@ class InstanceTest extends TestCase
{ {
$container = new Container(); $container = new Container();
$container->set('db', [ $container->set('db', [
'class' => 'yii\db\Connection', 'class' => Connection::class,
'dsn' => 'test', 'dsn' => 'test',
]); ]);
$this->expectException('yii\base\InvalidConfigException'); $this->expectException(InvalidConfigException::class);
$this->expectExceptionMessage('"db" refers to a yii\db\Connection component. yii\base\Widget is expected.'); $this->expectExceptionMessage('"db" refers to a yii\db\Connection component. yii\base\Widget is expected.');
Instance::ensure('db', 'yii\base\Widget', $container); Instance::ensure('db', Widget::class, $container);
} }
public function testExceptionInvalidDataType() public function testExceptionInvalidDataType()
{ {
$this->expectException('yii\base\InvalidConfigException'); $this->expectException(InvalidConfigException::class);
$this->expectExceptionMessage('Invalid data type: yii\db\Connection. yii\base\Widget is expected.'); $this->expectExceptionMessage('Invalid data type: yii\db\Connection. yii\base\Widget is expected.');
Instance::ensure(new Connection(), 'yii\base\Widget'); Instance::ensure(new Connection(), Widget::class);
} }
public function testExceptionComponentIsNotSpecified() public function testExceptionComponentIsNotSpecified()
{ {
$this->expectException('yii\base\InvalidConfigException'); $this->expectException(InvalidConfigException::class);
$this->expectExceptionMessage('The required component is not specified.'); $this->expectExceptionMessage('The required component is not specified.');
Instance::ensure(''); Instance::ensure('');
} }
@ -133,7 +137,7 @@ class InstanceTest extends TestCase
$this->mockApplication([ $this->mockApplication([
'components' => [ 'components' => [
'db' => [ 'db' => [
'class' => 'yii\db\Connection', 'class' => Connection::class,
'dsn' => 'test', 'dsn' => 'test',
], ],
], ],
@ -153,16 +157,16 @@ class InstanceTest extends TestCase
{ {
Yii::$container = new Container(); Yii::$container = new Container();
Yii::$container->set('cache', [ Yii::$container->set('cache', [
'class' => 'yii\caching\DbCache', 'class' => DbCache::class,
'db' => Instance::of('db'), 'db' => Instance::of('db'),
]); ]);
Yii::$container->set('db', [ Yii::$container->set('db', [
'class' => 'yii\db\Connection', 'class' => Connection::class,
'dsn' => 'sqlite:path/to/file.db', 'dsn' => 'sqlite:path/to/file.db',
]); ]);
$this->assertInstanceOf('yii\caching\DbCache', $cache = Yii::$container->get('cache')); $this->assertInstanceOf(DbCache::class, $cache = Yii::$container->get('cache'));
$this->assertInstanceOf('yii\db\Connection', $db = $cache->db); $this->assertInstanceOf(Connection::class, $db = $cache->db);
$this->assertEquals('sqlite:path/to/file.db', $db->dsn); $this->assertEquals('sqlite:path/to/file.db', $db->dsn);
} }
@ -172,9 +176,7 @@ class InstanceTest extends TestCase
$export = var_export($instance, true); $export = var_export($instance, true);
$this->assertRegExp(<<<'PHP' $this->assertRegExp(<<<'PHP'
@yii\\di\\Instance::__set_state\(array\( @yii\\di\\Instance::__set_state\(array\(\s+'id' => 'something',\s+\)\)@
\s+'id' => 'something',
\)\)@
PHP PHP
, $export); , $export);
@ -185,7 +187,7 @@ PHP
public function testRestoreAfterVarExportRequiresId() public function testRestoreAfterVarExportRequiresId()
{ {
$this->expectException('yii\base\InvalidConfigException'); $this->expectException(InvalidConfigException::class);
$this->expectExceptionMessage('Failed to instantiate class "Instance". Required parameter "id" is missing'); $this->expectExceptionMessage('Failed to instantiate class "Instance". Required parameter "id" is missing');
Instance::__set_state([]); Instance::__set_state([]);
@ -193,9 +195,10 @@ PHP
public function testExceptionInvalidDataTypeInArray() public function testExceptionInvalidDataTypeInArray()
{ {
$this->setExpectedException('yii\base\InvalidConfigException', 'Invalid data type: yii\db\Connection. yii\base\Widget is expected.'); $this->expectException(InvalidConfigException::class);
$this->expectExceptionMessage('Invalid data type: yii\db\Connection. yii\base\Widget is expected.');
Instance::ensure([ Instance::ensure([
'class' => Connection::class, 'class' => Connection::class,
], 'yii\base\Widget'); ], Widget::class);
} }
} }

2
tests/framework/filters/RateLimiterTest.php

@ -117,7 +117,7 @@ class RateLimiterTest extends TestCase
->setAllowance([1, time() + 2]); ->setAllowance([1, time() + 2]);
$rateLimiter = new RateLimiter(); $rateLimiter = new RateLimiter();
$this->setExpectedException('yii\web\TooManyRequestsHttpException'); $this->expectException(\yii\web\TooManyRequestsHttpException::class);
$rateLimiter->checkRateLimit($rateLimit, Yii::$app->request, Yii::$app->response, 'testAction'); $rateLimiter->checkRateLimit($rateLimit, Yii::$app->request, Yii::$app->response, 'testAction');
} }

6
tests/framework/helpers/ArrayHelperTest.php

@ -56,7 +56,7 @@ class ArrayHelperTest extends TestCase
public function testToArray() public function testToArray()
{ {
$dataArrayable = $this->getMock('yii\\base\\Arrayable'); $dataArrayable = $this->createMock(\yii\base\Arrayable::class);
$dataArrayable->method('toArray')->willReturn([]); $dataArrayable->method('toArray')->willReturn([]);
$this->assertEquals([], ArrayHelper::toArray($dataArrayable)); $this->assertEquals([], ArrayHelper::toArray($dataArrayable));
$this->assertEquals(['foo'], ArrayHelper::toArray('foo')); $this->assertEquals(['foo'], ArrayHelper::toArray('foo'));
@ -803,20 +803,20 @@ class ArrayHelperTest extends TestCase
/** /**
* This is expected to result in a PHP error * This is expected to result in a PHP error
* @expectedException \PHPUnit_Framework_Error
*/ */
public function testGetValueNonexistingProperties1() public function testGetValueNonexistingProperties1()
{ {
$this->expectException(\PHPUnit\Framework\Error\Error::class);
$object = new Post1(); $object = new Post1();
$this->assertEquals(null, ArrayHelper::getValue($object, 'nonExisting')); $this->assertEquals(null, ArrayHelper::getValue($object, 'nonExisting'));
} }
/** /**
* This is expected to result in a PHP error * This is expected to result in a PHP error
* @expectedException \PHPUnit_Framework_Error
*/ */
public function testGetValueNonexistingProperties2() public function testGetValueNonexistingProperties2()
{ {
$this->expectException(\PHPUnit\Framework\Error\Error::class);
$arrayObject = new \ArrayObject(['id' => 23], \ArrayObject::ARRAY_AS_PROPS); $arrayObject = new \ArrayObject(['id' => 23], \ArrayObject::ARRAY_AS_PROPS);
$this->assertEquals(23, ArrayHelper::getValue($arrayObject, 'nonExisting')); $this->assertEquals(23, ArrayHelper::getValue($arrayObject, 'nonExisting'));
} }

11
tests/framework/helpers/HtmlTest.php

@ -140,7 +140,8 @@ class HtmlTest extends TestCase
public function testCsrfMetaTagsEnableCsrfValidationWithoutCookieValidationKey() public function testCsrfMetaTagsEnableCsrfValidationWithoutCookieValidationKey()
{ {
$request = $this->getMock('yii\\web\\Request'); $request = $this->getMockBuilder(\yii\web\Request::class)
->setMethods(['enableCsrfValidation'])->getMock();
$request->method('enableCsrfValidation')->willReturn(true); $request->method('enableCsrfValidation')->willReturn(true);
Yii::$app->set('request', $request); Yii::$app->set('request', $request);
$pattern = '<meta name="csrf-param" content="_csrf">%A<meta name="csrf-token">'; $pattern = '<meta name="csrf-param" content="_csrf">%A<meta name="csrf-token">';
@ -1199,7 +1200,7 @@ EOD;
} }
$model->validate(null, false); $model->validate(null, false);
$this->assertEquals($expectedHtml, Html::errorSummary($model, $options)); $this->assertEqualsWithoutLE($expectedHtml, Html::errorSummary($model, $options));
} }
/** /**
@ -1451,7 +1452,7 @@ EOD;
$actual = Html::getAttributeValue($model, 'types'); $actual = Html::getAttributeValue($model, 'types');
$this->assertSame($expected, $actual); $this->assertSame($expected, $actual);
$activeRecord = $this->getMock('yii\\db\\ActiveRecordInterface'); $activeRecord = $this->createMock(\yii\db\ActiveRecordInterface::class);
$activeRecord->method('getPrimaryKey')->willReturn(1); $activeRecord->method('getPrimaryKey')->willReturn(1);
$model->types = $activeRecord; $model->types = $activeRecord;
@ -1484,14 +1485,14 @@ EOD;
*/ */
public function testGetInputNameInvalidArgumentExceptionFormName() public function testGetInputNameInvalidArgumentExceptionFormName()
{ {
$model = $this->getMock('yii\\base\\Model'); $model = $this->createMock(\yii\base\Model::class);
$model->method('formName')->willReturn(''); $model->method('formName')->willReturn('');
Html::getInputName($model, '[foo]bar'); Html::getInputName($model, '[foo]bar');
} }
public function testGetInputName() public function testGetInputName()
{ {
$model = $this->getMock('yii\\base\\Model'); $model = $this->createMock(\yii\base\Model::class);
$model->method('formName')->willReturn(''); $model->method('formName')->willReturn('');
$expected = 'types'; $expected = 'types';
$actual = Html::getInputName($model, 'types'); $actual = Html::getInputName($model, 'types');

2
tests/framework/helpers/JsonTest.php

@ -30,7 +30,7 @@ class JsonTest extends TestCase
public function testEncode() public function testEncode()
{ {
// Arrayable data encoding // Arrayable data encoding
$dataArrayable = $this->getMock('yii\\base\\Arrayable'); $dataArrayable = $this->createMock(\yii\base\Arrayable::class);
$dataArrayable->method('toArray')->willReturn([]); $dataArrayable->method('toArray')->willReturn([]);
$actual = Json::encode($dataArrayable); $actual = Json::encode($dataArrayable);
$this->assertSame('{}', $actual); $this->assertSame('{}', $actual);

6
tests/framework/i18n/MessageFormatterTest.php

@ -388,10 +388,6 @@ _MSG_
$result = $formatter->format('{word,umber}', ['word' => 'test'], 'en-US'); // typo is intentional, message pattern should be invalid $result = $formatter->format('{word,umber}', ['word' => 'test'], 'en-US'); // typo is intentional, message pattern should be invalid
$this->assertFalse($result); $this->assertFalse($result);
$this->assertNotEmpty($formatter->getErrorMessage()); $this->assertNotEmpty($formatter->getErrorMessage());
if (PHP_MAJOR_VERSION < 7) { $this->assertContains('Message pattern is invalid', $formatter->getErrorMessage());
$this->assertContains('message formatter creation failed', $formatter->getErrorMessage());
} else {
$this->assertContains('Constructor failed', $formatter->getErrorMessage());
}
} }
} }

8
tests/framework/validators/UniqueValidatorTest.php

@ -246,12 +246,12 @@ abstract class UniqueValidatorTest extends DatabaseTestCase
$this->assertTrue($profileModel->hasErrors('description')); $this->assertTrue($profileModel->hasErrors('description'));
$profileModel->clearErrors(); $profileModel->clearErrors();
$validator->targetClass = 'yiiunit\data\ar\Profile'; $validator->targetClass = Profile::class;
$validator->validateAttribute($profileModel, 'description'); $validator->validateAttribute($profileModel, 'description');
$this->assertTrue($profileModel->hasErrors('description')); $this->assertTrue($profileModel->hasErrors('description'));
$profileModel->clearErrors(); $profileModel->clearErrors();
$validator->targetClass = '\yiiunit\data\ar\Profile'; $validator->targetClass = Profile::class;
$validator->validateAttribute($profileModel, 'description'); $validator->validateAttribute($profileModel, 'description');
$this->assertTrue($profileModel->hasErrors('description')); $this->assertTrue($profileModel->hasErrors('description'));
} }
@ -266,12 +266,12 @@ abstract class UniqueValidatorTest extends DatabaseTestCase
$this->assertFalse($profileModel->hasErrors('description')); $this->assertFalse($profileModel->hasErrors('description'));
$profileModel->clearErrors(); $profileModel->clearErrors();
$validator->targetClass = 'yiiunit\data\ar\Profile'; $validator->targetClass = Profile::class;
$validator->validateAttribute($profileModel, 'description'); $validator->validateAttribute($profileModel, 'description');
$this->assertFalse($profileModel->hasErrors('description')); $this->assertFalse($profileModel->hasErrors('description'));
$profileModel->clearErrors(); $profileModel->clearErrors();
$validator->targetClass = '\yiiunit\data\ar\Profile'; $validator->targetClass = Profile::class;
$validator->validateAttribute($profileModel, 'description'); $validator->validateAttribute($profileModel, 'description');
$this->assertFalse($profileModel->hasErrors('description')); $this->assertFalse($profileModel->hasErrors('description'));
} }

2
tests/framework/widgets/ActiveFormTest.php

@ -116,7 +116,7 @@ HTML
$model = new DynamicModel(['name']); $model = new DynamicModel(['name']);
$model->addRule(['name'], 'required'); $model->addRule(['name'], 'required');
$view = $this->getMock(View::class); $view = $this->createMock(View::class);
$view->method('registerJs')->with($this->matches("jQuery('#w0').yiiActiveForm([], {\"validateOnSubmit\":false});")); $view->method('registerJs')->with($this->matches("jQuery('#w0').yiiActiveForm([], {\"validateOnSubmit\":false});"));
$view->method('registerAssetBundle')->willReturn(true); $view->method('registerAssetBundle')->willReturn(true);

4
tests/framework/widgets/ListViewTest.php

@ -35,12 +35,12 @@ class ListViewTest extends TestCase
public function testEmpty() public function testEmpty()
{ {
$this->getListView([ $actual = $this->getListView([
'dataProvider' => new ArrayDataProvider(['allModels' => []]), 'dataProvider' => new ArrayDataProvider(['allModels' => []]),
'emptyText' => false, 'emptyText' => false,
])->run(); ])->run();
$this->expectOutputString('<div id="w0" class="list-view"></div>'); $this->assertEqualsWithoutLE('<div id="w0" class="list-view"></div>', $actual);
} }
public function testEmptyListNotShown() public function testEmptyListNotShown()

Loading…
Cancel
Save