*/ class ProcedureValidatorTest extends \PHPUnit_Framework_TestCase { /** +++++++++++++++++++++++++++++++++++ **/ /** ++++++++++++++ TESTS ++++++++++++++ **/ /** +++++++++++++++++++++++++++++++++++ **/ /** * Test syntax exception is * thrown if procedure contains * syntax error. * * @access public * @return void */ public function testProcedureSyntaxExceptionIsThrownIfProcedureContainsSyntaxError() { $this->setExpectedException('\JonnyW\PhantomJs\Exception\SyntaxException'); $procedureLoader = $this->getProcedureLoader(); $esprima = $this->getEsprima(); $validator = $this->getValidator($procedureLoader, $esprima); $validator->validate('return false; var'); } /** * Test syntax exception contains errors. * * @access public * @return void */ public function testSyntaxExceptionContainsErrors() { $procedureLoader = $this->getProcedureLoader(); $esprima = $this->getEsprima(); try { $validator = $this->getValidator($procedureLoader, $esprima); $validator->validate('return false; var'); } catch (\JonnyW\PhantomJs\Exception\SyntaxException $e) { $this->assertNotEmpty($e->getErrors()); } } /** * Test requirement exception is thrown * if procedure does not contain phantom * exit statement. * * @access public * @return void */ public function testRequirementExceptionIsThrownIfProcedureDoesNotContainPhanomtExitStatement() { $this->setExpectedException('\JonnyW\PhantomJs\Exception\RequirementException'); $procedureLoader = $this->getProcedureLoader(); $esprima = $this->getEsprima(); $validator = $this->getValidator($procedureLoader, $esprima); $validator->validate('var test = function () { console.log("ok"); }'); } /** * Test true is returned if procedure is valid * * @access public * @return void */ public function testTrueIsReturnedIfProcedureIsValid() { $procedureLoader = $this->getProcedureLoader(); $esprima = $this->getEsprima(); $validator = $this->getValidator($procedureLoader, $esprima); $this->assertTrue($validator->validate('var test = function () { console.log("ok"); }; phantom.exit(1);')); } /** * Test procedure is valid if procedure * has comments. * * @access public * @return void */ public function testProcedureIsValidIfProcedureHasComments() { $procedureLoader = $this->getProcedureLoader(); $esprima = $this->getEsprima(); $validator = $this->getValidator($procedureLoader, $esprima); $this->assertTrue($validator->validate('/** * Test comment **/ var test = function () { console.log("ok"); }; phantom.exit(1);')); } /** +++++++++++++++++++++++++++++++++++ **/ /** ++++++++++ TEST ENTITIES ++++++++++ **/ /** +++++++++++++++++++++++++++++++++++ **/ /** * Get procedure validator. * * @access protected * @param \JonnyW\PhantomJs\Procedure\ProcedureLoaderInterface $procedureLoader * @param \JonnyW\PhantomJs\Validator\EngineInterface $engine * @return \JonnyW\PhantomJs\Procedure\ProcedureValidator */ protected function getValidator(ProcedureLoaderInterface $procedureLoader, EngineInterface $engine) { $validator = new ProcedureValidator($procedureLoader, $engine); return $validator; } /** * Get procedure loader. * * @access protected * @return \JonnyW\PhantomJs\Procedure\ProcedureLoader */ protected function getProcedureLoader() { return Client::getInstance()->getProcedureLoader(); } /** * Get esprima. * * @access protected * @return \JonnyW\PhantomJs\Validator\Esprima */ protected function getEsprima() { $fileLocator = new FileLocator( sprintf('%s/../../../Resources/validators/', __DIR__) ); $esprima = new Esprima($fileLocator, 'esprima-2.0.0.js'); return $esprima; } }