コード例 #1
0
 /**
  * @param ExerciseDispatcher $exerciseDispatcher
  */
 public function configure(ExerciseDispatcher $exerciseDispatcher)
 {
     $eventDispatcher = $exerciseDispatcher->getEventDispatcher();
     $appendArgsListener = function (CliExecuteEvent $event) {
         $event->appendArg('127.0.0.1');
         $event->appendArg($this->getRandomPort());
     };
     $eventDispatcher->listen('cli.verify.reference-execute.pre', $appendArgsListener);
     $eventDispatcher->listen('cli.verify.student-execute.pre', $appendArgsListener);
     $eventDispatcher->listen('cli.run.student-execute.pre', $appendArgsListener);
     $eventDispatcher->listen('cli.verify.reference.executing', function (CliExecuteEvent $event) {
         $args = $event->getArgs()->getArrayCopy();
         $client = $this->socketFactory->createClient(...$args);
         //wait for server to boot
         usleep(100000);
         $client->connect();
         $client->readAll();
         //wait for shutdown
         usleep(100000);
     });
     $eventDispatcher->insertVerifier('cli.verify.student.executing', function (CliExecuteEvent $event) {
         $args = $event->getArgs()->getArrayCopy();
         $client = $this->socketFactory->createClient(...$args);
         //wait for server to boot
         usleep(100000);
         try {
             $client->connect();
         } catch (Exception $e) {
             return Failure::fromNameAndReason($this->getName(), $e->getMessage());
         }
         $out = $client->readAll();
         //wait for shutdown
         usleep(100000);
         $date = new \DateTime();
         //match the current date but any seconds
         //since we can't mock time in PHP easily
         if (!preg_match(sprintf('/^%s:([0-5][0-9]|60)\\n$/', $date->format('Y-m-d H:i')), $out)) {
             return new StdOutFailure($this->getName(), $date->format("Y-m-d H:i:s\n"), $out);
         }
         return new Success($this->getName());
     });
     $eventDispatcher->listen('cli.run.student.executing', function (CliExecuteEvent $event) {
         /** @var OutputInterface $output */
         $output = $event->getParameter('output');
         $args = $event->getArgs()->getArrayCopy();
         $client = $this->socketFactory->createClient(...$args);
         //wait for server to boot
         usleep(100000);
         $client->connect();
         $out = $client->readAll();
         //wait for shutdown
         usleep(100000);
         $output->write($out);
     });
 }
コード例 #2
0
 public function setUp()
 {
     $this->filesystem = new Filesystem();
     $this->check = $this->getMock(SimpleCheckInterface::class);
     $this->check->expects($this->any())->method('getName')->will($this->returnValue('Some Check'));
     $this->checkRepository = new CheckRepository([$this->check]);
     $this->runner = $this->getMock(ExerciseRunnerInterface::class);
     $this->runnerFactory = $this->getMock(RunnerFactory::class);
     $this->results = new ResultAggregator();
     $this->eventDispatcher = $this->getMockBuilder(EventDispatcher::class)->disableOriginalConstructor()->getMock();
     $this->exerciseDispatcher = new ExerciseDispatcher($this->runnerFactory, $this->results, $this->eventDispatcher, $this->checkRepository);
     $this->assertSame($this->eventDispatcher, $this->exerciseDispatcher->getEventDispatcher());
     $this->file = sprintf('%s/%s/submission.php', str_replace('\\', '/', sys_get_temp_dir()), $this->getName());
     mkdir(dirname($this->file), 0775, true);
     touch($this->file);
 }
コード例 #3
0
 public function testGetEventDispatcher()
 {
     $eventDispatcher = new EventDispatcher($results = new ResultAggregator());
     $exerciseDispatcher = new ExerciseDispatcher($this->prophesize(RunnerManager::class)->reveal(), $results, $eventDispatcher, new CheckRepository());
     $this->assertSame($eventDispatcher, $exerciseDispatcher->getEventDispatcher());
 }