/**
* @test
*/
public function shouldAddRegexesLoaderOnlyWhenStatesAreSet()
{
$context = new Context(new Identifier(Identifier::NULL_ENTITY_ID, Identifier::NULL_STATEMACHINE));
$machine = new StateMachine($context);
$transitions = array();
$s1 = new State("1");
$s2 = new State("2");
$s3 = new State("3");
//many to many
$transitions[] = new Transition(new State('regex:/.*/'), new State('regex:/.*/'));
$loader = new LoaderArray($transitions);
$this->assertEquals(count($transitions), $loader->count());
$this->assertEquals(1, $loader->count());
$this->assertEquals(0, count($machine->getStates()));
$this->assertEquals(0, count($machine->getTransitions()));
$count = $loader->load($machine);
$this->assertEquals(0, $count, 'nothing because there are no known states');
$this->assertTrue($machine->addState($s1));
$this->assertTrue($machine->addState($s2));
$this->assertTrue($machine->addState($s3));
$this->assertEquals(3, count($machine->getStates()));
$this->assertFalse($machine->addState($s1));
$this->assertFalse($machine->addState($s2));
$this->assertFalse($machine->addState($s3));
$this->assertEquals(3, count($machine->getStates()));
$count = $loader->load($machine);
$this->assertEquals(6, count($machine->getTransitions()));
$this->assertEquals(6, $count, 'regexes have matched all states and created a mesh');
$count = $loader->load($machine);
$this->assertEquals(0, $count, 'transitions are not added since they have already been added');
$this->assertEquals(3, count($machine->getStates()));
$this->assertEquals(6, count($machine->getTransitions()));
}