ProcedureTest.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. /*
  3. * This file is part of the php-phantomjs.
  4. *
  5. * For the full copyright and license information, please view the LICENSE
  6. * file that was distributed with this source code.
  7. */
  8. namespace JonnyW\PhantomJs\Tests\Unit\Procedure;
  9. use Twig_Environment;
  10. use Twig_Loader_String;
  11. use JonnyW\PhantomJs\Engine;
  12. use JonnyW\PhantomJs\Cache\FileCache;
  13. use JonnyW\PhantomJs\Cache\CacheInterface;
  14. use JonnyW\PhantomJs\Parser\JsonParser;
  15. use JonnyW\PhantomJs\Parser\ParserInterface;
  16. use JonnyW\PhantomJs\Template\TemplateRenderer;
  17. use JonnyW\PhantomJs\Template\TemplateRendererInterface;
  18. use JonnyW\PhantomJs\Procedure\Input;
  19. use JonnyW\PhantomJs\Procedure\Output;
  20. use JonnyW\PhantomJs\Procedure\Procedure;
  21. /**
  22. * PHP PhantomJs
  23. *
  24. * @author Jon Wenmoth <contact@jonnyw.me>
  25. */
  26. class ProcedureTest extends \PHPUnit_Framework_TestCase
  27. {
  28. /** +++++++++++++++++++++++++++++++++++ **/
  29. /** ++++++++++++++ TESTS ++++++++++++++ **/
  30. /** +++++++++++++++++++++++++++++++++++ **/
  31. /**
  32. * Test procedure template can be
  33. * set in procedure
  34. *
  35. * @access public
  36. * @return void
  37. */
  38. public function testProcedureTemplateCanBeSetInProcedure()
  39. {
  40. $template = 'PROCEDURE_TEMPLATE';
  41. $engne = $this->getEngine();
  42. $parser = $this->getParser();
  43. $cache = $this->getCache();
  44. $renderer = $this->getRenderer();
  45. $procedure = $this->getProcedure($engne, $parser, $cache, $renderer);
  46. $procedure->setTemplate($template);
  47. $this->assertSame($procedure->getTemplate(), $template);
  48. }
  49. /**
  50. * Test procedure can be compiled.
  51. *
  52. * @access public
  53. * @return void
  54. */
  55. public function testProcedureCanBeCompiled()
  56. {
  57. $template = 'TEST_{{ input.get("uncompiled") }}_PROCEDURE';
  58. $engne = $this->getEngine();
  59. $parser = $this->getParser();
  60. $cache = $this->getCache();
  61. $renderer = $this->getRenderer();
  62. $input = $this->getInput();
  63. $input->set('uncompiled', 'COMPILED');
  64. $procedure = $this->getProcedure($engne, $parser, $cache, $renderer);
  65. $procedure->setTemplate($template);
  66. $this->assertSame('TEST_COMPILED_PROCEDURE', $procedure->compile($input));
  67. }
  68. /**
  69. * Test not writable exception is thrown if procedure
  70. * script cannot be written to file
  71. *
  72. * @access public
  73. * @return void
  74. */
  75. public function testNotWritableExceptionIsThrownIfProcedureScriptCannotBeWrittenToFile()
  76. {
  77. $this->setExpectedException('\JonnyW\PhantomJs\Exception\NotWritableException');
  78. $engne = $this->getEngine();
  79. $parser = $this->getParser();
  80. $renderer = $this->getRenderer();
  81. $cache = $this->getCache('/an/invalid/dir');
  82. $input = $this->getInput();
  83. $output = $this->getOutput();
  84. $procedure = $this->getProcedure($engne, $parser, $cache, $renderer);
  85. $procedure->run($input, $output);
  86. }
  87. /**
  88. * Test procedure failed exception is thrown if procedure
  89. * cannot be run.
  90. *
  91. * @access public
  92. * @return void
  93. */
  94. public function testProcedureFailedExceptionIsThrownIfProcedureCannotBeRun()
  95. {
  96. $this->setExpectedException('\JonnyW\PhantomJs\Exception\ProcedureFailedException');
  97. $parser = $this->getParser();
  98. $cache = $this->getCache();
  99. $renderer = $this->getRenderer();
  100. $input = $this->getInput();
  101. $output = $this->getOutput();
  102. $engne = $this->getEngine();
  103. $engne->method('getCommand')
  104. ->will($this->throwException(new \Exception()));
  105. $procedure = $this->getProcedure($engne, $parser, $cache, $renderer);
  106. $procedure->run($input, $output);
  107. }
  108. /** +++++++++++++++++++++++++++++++++++ **/
  109. /** ++++++++++ TEST ENTITIES ++++++++++ **/
  110. /** +++++++++++++++++++++++++++++++++++ **/
  111. /**
  112. * Get procedure instance.
  113. *
  114. * @access protected
  115. * @param \JonnyW\PhantomJs\Engine $engine
  116. * @param \JonnyW\PhantomJs\Parser\ParserInterface $parser
  117. * @param \JonnyW\PhantomJs\Cache\CacheInterface $cacheHandler
  118. * @param \JonnyW\PhantomJs\Template\TemplateRendererInterface $renderer
  119. * @return \JonnyW\PhantomJs\Procedure\Procedure
  120. */
  121. protected function getProcedure(Engine $engine, ParserInterface $parser, CacheInterface $cacheHandler, TemplateRendererInterface $renderer)
  122. {
  123. $procedure = new Procedure($engine, $parser, $cacheHandler, $renderer);
  124. return $procedure;
  125. }
  126. /**
  127. * Get parser.
  128. *
  129. * @access protected
  130. * @return \JonnyW\PhantomJs\Parser\JsonParser
  131. */
  132. protected function getParser()
  133. {
  134. $parser = new JsonParser();
  135. return $parser;
  136. }
  137. /**
  138. * Get cache.
  139. *
  140. * @access protected
  141. * @param string $cacheDir (default: '')
  142. * @param string $extension (default: 'proc')
  143. * @return \JonnyW\PhantomJs\Cache\FileCache
  144. */
  145. protected function getCache($cacheDir = '', $extension = 'proc')
  146. {
  147. $cache = new FileCache(($cacheDir ? $cacheDir : sys_get_temp_dir()), 'proc');
  148. return $cache;
  149. }
  150. /**
  151. * Get template renderer.
  152. *
  153. * @access protected
  154. * @return \JonnyW\PhantomJs\Template\TemplateRenderer
  155. */
  156. protected function getRenderer()
  157. {
  158. $twig = new Twig_Environment(
  159. new Twig_Loader_String()
  160. );
  161. $renderer = new TemplateRenderer($twig);
  162. return $renderer;
  163. }
  164. /**
  165. * Get input
  166. *
  167. * @access protected
  168. * @return \JonnyW\PhantomJs\Procedure\Input
  169. */
  170. protected function getInput()
  171. {
  172. $input = new Input();
  173. return $input;
  174. }
  175. /**
  176. * Get output.
  177. *
  178. * @access protected
  179. * @return \JonnyW\PhantomJs\Procedure\Output
  180. */
  181. protected function getOutput()
  182. {
  183. $output = new Output();
  184. return $output;
  185. }
  186. /** +++++++++++++++++++++++++++++++++++ **/
  187. /** ++++++++++ MOCKS / STUBS ++++++++++ **/
  188. /** +++++++++++++++++++++++++++++++++++ **/
  189. /**
  190. * Get engine
  191. *
  192. * @access protected
  193. * @return \JonnyW\PhantomJs\Engine
  194. */
  195. protected function getEngine()
  196. {
  197. $engine = $this->getMock('\JonnyW\PhantomJs\Engine');
  198. return $engine;
  199. }
  200. }