CommitOrderCalculatorTest.php 1.75 KB
Newer Older
1
<?php
2 3 4

namespace Doctrine\Tests\ORM;

5 6
use Doctrine\ORM\Mapping\ClassMetadata;

7
require_once __DIR__ . '/../TestInit.php';
8 9 10 11 12 13 14 15

/**
 * Tests of the commit order calculation.
 *
 * IMPORTANT: When writing tests here consider that a lot of graph constellations
 * can have many valid orderings, so you may want to build a graph that has only
 * 1 valid order to simplify your tests.
 */
16
class CommitOrderCalculatorTest extends \Doctrine\Tests\OrmTestCase
17 18 19 20 21
{
    private $_calc;
    
    protected function setUp()
    {
22
        $this->_calc = new \Doctrine\ORM\Internal\CommitOrderCalculator();
23 24 25 26
    }
    
    public function testCommitOrdering1()
    {
27 28 29 30 31
        $class1 = new ClassMetadata(__NAMESPACE__ . '\NodeClass1');
        $class2 = new ClassMetadata(__NAMESPACE__ . '\NodeClass2');
        $class3 = new ClassMetadata(__NAMESPACE__ . '\NodeClass3');
        $class4 = new ClassMetadata(__NAMESPACE__ . '\NodeClass4');
        $class5 = new ClassMetadata(__NAMESPACE__ . '\NodeClass5');
32
        
33 34 35 36 37
        $this->_calc->addClass($class1);
        $this->_calc->addClass($class2);
        $this->_calc->addClass($class3);
        $this->_calc->addClass($class4);
        $this->_calc->addClass($class5);
38
        
39 40 41 42
        $this->_calc->addDependency($class1, $class2);
        $this->_calc->addDependency($class2, $class3);
        $this->_calc->addDependency($class3, $class4);
        $this->_calc->addDependency($class5, $class1);
43 44 45 46

        $sorted = $this->_calc->getCommitOrder();
        
        // There is only 1 valid ordering for this constellation
47
        $correctOrder = array($class5, $class1, $class2, $class3, $class4);
48 49
        $this->assertSame($correctOrder, $sorted);
    }
50 51 52 53 54 55 56
}

class NodeClass1 {}
class NodeClass2 {}
class NodeClass3 {}
class NodeClass4 {}
class NodeClass5 {}