public function testUndoingCommand()
 {
     $cmd2 = $this->createUndoableCommand();
     $cmd2->expects($this->exactly(1))->method('undo');
     $this->dispatcher->handleCommands(array($cmd2));
     $this->dispatcher->undo($cmd2);
 }
            }
        }
    }
    private function getRandomKenoNumber()
    {
        return rand(1, 70);
    }
    public function preLog(LoggerInterface $logger)
    {
        $logger->info(sprintf('Will generate %s keno numbers...', $this->numberAmount));
    }
    public function postLog(LoggerInterface $logger)
    {
        sort($this->kenoNumbers);
        $logger->info(sprintf('...generated %s numbers: %s.', ucwords(self::NAME), implode(', ', $this->kenoNumbers)));
    }
}
$logger = new Logger('test', array(new TestHandler()));
$dispatcher = new Dispatcher();
$dispatcher->addPreCommandHandler(function (CommandInterface $command) use($logger) {
    $command->preLog($logger);
});
$dispatcher->addPostCommandHandler(function (CommandInterface $command) use($logger) {
    $command->postLog($logger);
});
$commands = array(GenerateLotteryNumbersCommand::create(array(7)), GenerateKenoNumbersCommand::create(array(10)));
$dispatcher->handleCommands($commands);
$records = $logger->popHandler()->getRecords();
foreach ($records as $record) {
    print_r($record['message'] . "\n");
}