public function testFull()
{
$entity_id = "id";
$machine = "test machine";
$identifier = new Identifier($entity_id, $machine);
$builder = new EntityBuilder();
$io = new Memory();
// all parameters
$o = new Context($identifier, $builder, $io);
$this->assertEquals($entity_id, $o->getEntityId());
$this->assertEquals($machine, $o->getMachine());
$this->assertNull($o->getStateMachine());
$this->assertTrue(is_a($o->getPersistenceAdapter(), 'izzum\\statemachine\\persistence\\Memory'));
$this->assertTrue(is_a($o->getBuilder(), 'izzum\\statemachine\\EntityBuilder'));
$this->assertEquals($o->getIdentifier(), $o->getEntity());
$this->assertTrue(is_string($o->getEntityId()));
$this->assertTrue(is_string($o->toString()));
$this->assertContains($entity_id, $o->toString());
$this->assertContains($machine, $o->toString());
$this->assertContains('izzum\\statemachine\\Context', $o->toString());
// even though we have a valid reader, the state machine does not exist.
$this->assertEquals(State::STATE_UNKNOWN, $o->getState());
$this->assertTrue($o->setState('lala'));
$this->assertEquals('lala', $o->getState());
// for coverage.
$this->assertNotNull($o->getId());
$this->assertNotNull($o->getId(true));
$this->assertNotNull($o->getId(false));
$this->assertNotNull($o->getId(true, true));
$this->assertNotNull($o->getId(false, true));
// adding
$machine = 'add-experiment-machine';
$context = new Context(new Identifier('add-experiment-id', $machine), $builder, $io);
$sm = new StateMachine($context);
$sm->addTransition(new Transition(new State('c', State::TYPE_FINAL), new State('d'), State::TYPE_NORMAL));
$sm->addTransition(new Transition(new State('a', State::TYPE_INITIAL), new State('b')));
$this->assertCount(0, $context->getPersistenceAdapter()->getEntityIds($machine));
$state = $sm->getInitialState()->getName();
$this->assertEquals('a', $state);
$this->assertTrue($context->add($state));
// var_dump( Memory::get());
$this->assertCount(1, $context->getPersistenceAdapter()->getEntityIds($machine));
}