/Tools/Tests/Regression/TestsGenerator/TestsGeneratorTest.php

https://github.com/masicek/XSLT-Benchmarking-XSLTMark-II · PHP · 173 lines · 121 code · 20 blank · 32 comment · 1 complexity · 1cca1ed40e072ccccc57b5d585725812 MD5 · raw file

  1. <?php
  2. /**
  3. * XSLT Benchmarking
  4. * @link https://github.com/masicek/XSLT-Benchmarking
  5. * @author Viktor Mašíček <viktor@masicek.net>
  6. * @license "New" BSD License
  7. */
  8. namespace Tests\XSLTBenchmarking\TestsGenerator;
  9. require_once ROOT_TOOLS . '/RunnerConsole/Runner.php';
  10. use \Tests\XSLTBenchmarking\TestCase;
  11. /**
  12. * TestsGeneratorTest
  13. *
  14. * @author Viktor Mašíček <viktor@masicek.net>
  15. *
  16. * @covers XSLTBenchmarking\RunnerConsole\Runner::__construct
  17. * @covers XSLTBenchmarking\RunnerConsole\Runner::defineOptions
  18. * @covers XSLTBenchmarking\RunnerConsole\Runner::run
  19. * @covers XSLTBenchmarking\RunnerConsole\Runner::generateTests
  20. * @covers XSLTBenchmarking\RunnerConsole\Runner::getSubresources
  21. */
  22. class TestsGeneratorTest extends TestCase
  23. {
  24. public function test()
  25. {
  26. // used directories
  27. $baseDir = __DIR__;
  28. $templates = $this->setDirSep($baseDir . '/Templates');
  29. $tests = $this->setDirSep($baseDir . '/TestsGenerated');
  30. $testsExpected = $this->setDirSep($baseDir . '/TestsExpected');
  31. $tmp = $this->setDirSep($baseDir . '/Tmp');
  32. // simulate arguments for generating tests
  33. $this->setArguments(
  34. '-g ' .
  35. '--templates "./Templates" ' .
  36. '--tests "./TestsGenerated" ' .
  37. '--tmp "./Tmp" '
  38. );
  39. // check not existence of tests
  40. $this->assertFalse(is_dir($this->setDirSep($tests . '/modify-element-rename')));
  41. $this->assertFalse(is_dir($this->setDirSep($tests . '/modify-element-remove')));
  42. $this->assertFalse(is_dir($this->setDirSep($tests . '/modify-element-copy')));
  43. $this->assertFalse(is_dir($this->setDirSep($tests . '/value-to-attribute-first')));
  44. // run runner for generating tests
  45. $runner = new \XSLTBenchmarking\RunnerConsole\Runner($baseDir);
  46. ob_start();
  47. $runner->run();
  48. $output = ob_get_clean();
  49. $this->assertRegExp('/4 tests were generated from 2 temapltes/', $output);
  50. // check generated tests
  51. $this->assertTrue(is_dir($this->setDirSep($tests . '/modify-element-rename')));
  52. $this->assertTrue(is_dir($this->setDirSep($tests . '/modify-element-remove')));
  53. $this->assertTrue(is_dir($this->setDirSep($tests . '/modify-element-copy')));
  54. $this->assertTrue(is_dir($this->setDirSep($tests . '/value-to-attribute-first')));
  55. // test MODIFY ELEMENT - REMOVE
  56. $generatedBase = $this->setDirSep($tests . '/modify-element-remove');
  57. $expectedBase = $this->setDirSep($testsExpected . '/modify-element-remove');
  58. $this->assertFileExistAndEquals($generatedBase, $expectedBase, '__params.xml');
  59. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'test.xslt');
  60. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'zeroElement.xml');
  61. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'oneElement.xml');
  62. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'twoElements.xml');
  63. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'manyElements.xml');
  64. // test MODIFY ELEMENT - RENAME
  65. $generatedBase = $this->setDirSep($tests . '/modify-element-rename');
  66. $expectedBase = $this->setDirSep($testsExpected . '/modify-element-rename');
  67. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'myParams.xml');
  68. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'test.xslt');
  69. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'oneElement.xml');
  70. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'oneNewElement.xml');
  71. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'twoElements.xml');
  72. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'twoNewElements.xml');
  73. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'manyElements.xml');
  74. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'manyNewElements.xml');
  75. // test MODIFY ELEMENT - COPY
  76. $generatedBase = $this->setDirSep($tests . '/modify-element-copy');
  77. $expectedBase = $this->setDirSep($testsExpected . '/modify-element-copy');
  78. $this->assertFileExistAndEquals($generatedBase, $expectedBase, '__params.xml');
  79. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'oneElement.xml');
  80. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'twoElements.xml');
  81. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'manyElements.xml');
  82. // test VALUE TO ATTRIBUTE - FIRST
  83. $generatedBase = $this->setDirSep($tests . '/value-to-attribute-first');
  84. $expectedBase = $this->setDirSep($testsExpected . '/value-to-attribute-first');
  85. $this->assertFileExistAndEquals($generatedBase, $expectedBase, '__params.xml');
  86. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'zeroElement.xml');
  87. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'twoElements.xml');
  88. $this->assertFileExistAndEquals($generatedBase, $expectedBase, 'twoNewElements.xml');
  89. // remove generated tests
  90. $this->removeGeneratedTests($tests);
  91. rmdir($tests);
  92. // remove tmp directory
  93. $files = scandir($tmp);
  94. foreach ($files as $file)
  95. {
  96. if (strpos($file, '.file.test.tpl.xslt.php') !== FALSE)
  97. {
  98. unlink($this->setDirSep($tmp . '/' . $file));
  99. }
  100. }
  101. unlink($this->setDirSep($tmp . '/modify-element/manyElements.xml'));
  102. unlink($this->setDirSep($tmp . '/modify-element/manyNewElements.xml'));
  103. rmdir($this->setDirSep($tmp . '/modify-element'));
  104. rmdir($tmp);
  105. }
  106. private function assertFileExistAndEquals($generatedBase, $expectedBase, $name)
  107. {
  108. $this->assertFileExists($this->setDirSep($generatedBase . '/' . $name));
  109. $this->assertXmlFileEqualsXmlFile(
  110. $this->setDirSep($generatedBase . '/' . $name),
  111. $this->setDirSep($expectedBase . '/' . $name)
  112. );
  113. }
  114. private function removeGeneratedTests($tests)
  115. {
  116. // MODIFY ELEMENT - REMOVE
  117. $base = $this->setDirSep($tests . '/modify-element-remove/');
  118. unlink($this->setDirSep($base . '__params.xml'));
  119. unlink($this->setDirSep($base . 'test.xslt'));
  120. unlink($this->setDirSep($base . 'zeroElement.xml'));
  121. unlink($this->setDirSep($base . 'oneElement.xml'));
  122. unlink($this->setDirSep($base . 'twoElements.xml'));
  123. unlink($this->setDirSep($base . 'manyElements.xml'));
  124. rmdir($base);
  125. // MODIFY ELEMENT - RENAME
  126. $base = $this->setDirSep($tests . '/modify-element-rename/');
  127. unlink($this->setDirSep($base . 'myParams.xml'));
  128. unlink($this->setDirSep($base . 'test.xslt'));
  129. unlink($this->setDirSep($base . 'oneElement.xml'));
  130. unlink($this->setDirSep($base . 'oneNewElement.xml'));
  131. unlink($this->setDirSep($base . 'twoElements.xml'));
  132. unlink($this->setDirSep($base . 'twoNewElements.xml'));
  133. unlink($this->setDirSep($base . 'manyElements.xml'));
  134. unlink($this->setDirSep($base . 'manyNewElements.xml'));
  135. rmdir($base);
  136. // MODIFY ELEMENT - COPY
  137. $base = $this->setDirSep($tests . '/modify-element-copy/');
  138. unlink($this->setDirSep($base . '__params.xml'));
  139. unlink($this->setDirSep($base . 'test.xslt'));
  140. unlink($this->setDirSep($base . 'oneElement.xml'));
  141. unlink($this->setDirSep($base . 'twoElements.xml'));
  142. unlink($this->setDirSep($base . 'manyElements.xml'));
  143. rmdir($base);
  144. // VALUE TO ATTRIBUTE - FIRST
  145. $base = $this->setDirSep($tests . '/value-to-attribute-first/');
  146. unlink($this->setDirSep($base . '__params.xml'));
  147. unlink($this->setDirSep($base . 'test.xslt'));
  148. unlink($this->setDirSep($base . 'zeroElement.xml'));
  149. unlink($this->setDirSep($base . 'twoElements.xml'));
  150. unlink($this->setDirSep($base . 'twoNewElements.xml'));
  151. rmdir($base);
  152. }
  153. }