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.
169 lines
4.4 KiB
169 lines
4.4 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yiiunit\framework\test; |
|
|
|
use yii\test\Fixture; |
|
use yii\test\FixtureTrait; |
|
use yiiunit\TestCase; |
|
|
|
class Fixture1 extends Fixture |
|
{ |
|
public $depends = ['yiiunit\framework\test\Fixture2']; |
|
|
|
public function load() |
|
{ |
|
MyTestCase::$load .= '1'; |
|
} |
|
|
|
public function unload() |
|
{ |
|
MyTestCase::$unload .= '1'; |
|
} |
|
} |
|
|
|
class Fixture2 extends Fixture |
|
{ |
|
public $depends = ['yiiunit\framework\test\Fixture3']; |
|
public function load() |
|
{ |
|
MyTestCase::$load .= '2'; |
|
} |
|
|
|
public function unload() |
|
{ |
|
MyTestCase::$unload .= '2'; |
|
} |
|
} |
|
|
|
class Fixture3 extends Fixture |
|
{ |
|
public function load() |
|
{ |
|
MyTestCase::$load .= '3'; |
|
} |
|
|
|
public function unload() |
|
{ |
|
MyTestCase::$unload .= '3'; |
|
} |
|
} |
|
|
|
class MyTestCase |
|
{ |
|
use FixtureTrait; |
|
|
|
public $scenario = 1; |
|
public static $load; |
|
public static $unload; |
|
|
|
public function setUp() |
|
{ |
|
$this->loadFixtures(); |
|
} |
|
|
|
public function tearDown() |
|
{ |
|
$this->unloadFixtures(); |
|
} |
|
|
|
public function fetchFixture($name) |
|
{ |
|
return $this->getFixture($name); |
|
} |
|
|
|
public function fixtures() |
|
{ |
|
switch ($this->scenario) { |
|
case 0: return []; |
|
case 1: return [ |
|
'fixture1' => Fixture1::className(), |
|
]; |
|
case 2: return [ |
|
'fixture2' => Fixture2::className(), |
|
]; |
|
case 3: return [ |
|
'fixture3' => Fixture3::className(), |
|
]; |
|
case 4: return [ |
|
'fixture1' => Fixture1::className(), |
|
'fixture2' => Fixture2::className(), |
|
]; |
|
case 5: return [ |
|
'fixture2' => Fixture2::className(), |
|
'fixture3' => Fixture3::className(), |
|
]; |
|
case 6: return [ |
|
'fixture1' => Fixture1::className(), |
|
'fixture3' => Fixture3::className(), |
|
]; |
|
case 7: |
|
default: return [ |
|
'fixture1' => Fixture1::className(), |
|
'fixture2' => Fixture2::className(), |
|
'fixture3' => Fixture3::className(), |
|
]; |
|
} |
|
} |
|
} |
|
|
|
class FixtureTest extends TestCase |
|
{ |
|
public function testDependencies() |
|
{ |
|
foreach ($this->getDependencyTests() as $scenario => $result) { |
|
$test = new MyTestCase(); |
|
$test->scenario = $scenario; |
|
$test->setUp(); |
|
foreach ($result as $name => $loaded) { |
|
$this->assertEquals($loaded, $test->fetchFixture($name) !== null, "Verifying scenario $scenario fixture $name"); |
|
} |
|
} |
|
} |
|
|
|
public function testLoadSequence() |
|
{ |
|
foreach ($this->getLoadSequenceTests() as $scenario => $result) { |
|
$test = new MyTestCase(); |
|
$test->scenario = $scenario; |
|
MyTestCase::$load = ''; |
|
MyTestCase::$unload = ''; |
|
$test->setUp(); |
|
$this->assertEquals($result[0], MyTestCase::$load, "Verifying scenario $scenario load sequence"); |
|
$test->tearDown(); |
|
$this->assertEquals($result[1], MyTestCase::$unload, "Verifying scenario $scenario unload sequence"); |
|
} |
|
} |
|
|
|
protected function getDependencyTests() |
|
{ |
|
return [ |
|
0 => ['fixture1' => false, 'fixture2' => false, 'fixture3' => false], |
|
1 => ['fixture1' => true, 'fixture2' => false, 'fixture3' => false], |
|
2 => ['fixture1' => false, 'fixture2' => true, 'fixture3' => false], |
|
3 => ['fixture1' => false, 'fixture2' => false, 'fixture3' => true], |
|
4 => ['fixture1' => true, 'fixture2' => true, 'fixture3' => false], |
|
5 => ['fixture1' => false, 'fixture2' => true, 'fixture3' => true], |
|
6 => ['fixture1' => true, 'fixture2' => false, 'fixture3' => true], |
|
7 => ['fixture1' => true, 'fixture2' => true, 'fixture3' => true], |
|
]; |
|
} |
|
|
|
protected function getLoadSequenceTests() |
|
{ |
|
return [ |
|
0 => ['', ''], |
|
1 => ['321', '123'], |
|
2 => ['32', '23'], |
|
3 => ['3', '3'], |
|
4 => ['321', '123'], |
|
5 => ['32', '23'], |
|
6 => ['321', '123'], |
|
7 => ['321', '123'], |
|
]; |
|
} |
|
}
|
|
|