This is the default persistence adapter for a Context. TRICKY: This memory adapter only functions during the execution of one (1) php process. Therefore, it is best used in a runtime environment such as a php daemon program or an interactive command line php script.
Author: Rolf Vreijdenberger
Inheritance: extends Adapter
 /**
  * @test
  */
 public function shouldLoadAndWriteViaDelegator()
 {
     $loader = XML::createFromFile(__DIR__ . '/../loader/fixture-example.xml');
     $writer = new Memory();
     $identifier = new Identifier('readerwriter-test', 'test-machine');
     $delegator = new ReaderWriterDelegator($loader, $writer);
     $context = new Context($identifier, null, $delegator);
     $machine = new StateMachine($context);
     $this->assertCount(0, $machine->getTransitions());
     $count = $delegator->load($machine);
     //add to the backend
     $this->assertTrue($context->add('a'));
     $this->assertCount(4, $machine->getTransitions(), 'there is a regex transition that adds 2 transitions (a-c and b-c)');
     $this->assertEquals(4, $count);
     $this->assertTrue($machine->ab());
     //get the data from the memory storage facility
     $data = $writer->getStorageFromRegistry($machine->getContext()->getIdentifier());
     $this->assertEquals('b', $data->state);
     $this->assertEquals('b', $machine->getCurrentState()->getName());
     $this->assertTrue($machine->bdone());
     $data = $writer->getStorageFromRegistry($machine->getContext()->getIdentifier());
     $this->assertEquals('done', $data->state);
 }
 /**
  * @test
  */
 public function shouldBehave()
 {
     $loader = XML::createFromFile(__DIR__ . '/../../../../assets/xml/example.xml');
     $writer = new Memory();
     Memory::clear();
     $delegator = new ReaderWriterDelegator($loader, $writer);
     $this->assertSame($loader, $delegator->getReader());
     $this->assertSame($writer, $delegator->getWriter());
     $this->assertContains('Memory', $delegator->toString());
     $this->assertContains('XML', $delegator->toString());
     $this->assertContains('Memory', $delegator . '');
     $this->assertContains('XML', $delegator . '');
     $this->assertCount(0, $delegator->getEntityIds('test'));
     $this->assertFalse($delegator->isPersisted(new Identifier('123', 'bogus')));
     $delegator->setFailedTransition(new Identifier('foo', 'bar'), new Transition(new State('foo'), new State('bar')), new \Exception('bogus'));
 }
 protected function createAdapter()
 {
     $io = new Memory();
     $io->clear();
     return $io;
 }