PageRenderTime 50ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/pecs/runner.php

http://github.com/noonat/pecs
PHP | 182 lines | 144 code | 14 blank | 24 comment | 0 complexity | ccd3704063e28ff35a195e19399803cf MD5 | raw file
  1. <?php
  2. class MockRunner extends pecs\Runner {
  3. function __construct() {
  4. parent::__construct();
  5. $this->runCalls = array();
  6. }
  7. function run($formatter=null) {
  8. $this->runCalls[] = func_get_args();
  9. }
  10. }
  11. describe("pecs", function() {
  12. // FIXME:
  13. // after_each(function($spec, $runner) {
  14. // // restore the old runner, in case we stomped on things
  15. // runner($runner);
  16. // });
  17. describe("runner", function() {
  18. it("should return the current runner object", function() {
  19. $runner = pecs\runner();
  20. expect($runner)->to_be_a('pecs\Runner');
  21. });
  22. it("should only instantiate one runner", function() {
  23. $runner = pecs\runner();
  24. expect($runner)->to_be_a('pecs\Runner');
  25. expect(pecs\runner())->to_be($runner);
  26. });
  27. it("should allow you to pass a new pecs\Runner", function($scope, $spec) {
  28. $oldRunner = pecs\runner();
  29. $newRunner = new pecs\Runner();
  30. $runner = pecs\runner($newRunner);
  31. $spec->expect($runner)->to_be($newRunner);
  32. $spec->expect(pecs\runner())->to_be($runner);
  33. pecs\runner($oldRunner);
  34. });
  35. });
  36. describe("Runner", function() {
  37. it("shouldn't have any specs or suites by default", function() {
  38. $runner = new pecs\Runner();
  39. expect($runner->suites)->to_be_type('array')->and_to_be_empty();
  40. expect($runner->specs)->to_be_type('array')->and_to_be_empty();
  41. expect($runner->suite)->to_be_null();
  42. expect($runner->spec)->to_be_null();
  43. });
  44. it("should create a default formatter", function() {
  45. $runner = new pecs\Runner();
  46. expect($runner->formatter)->to_be_an_instance_of('pecs\Formatter');
  47. });
  48. describe("describe()", function() {
  49. it("should create a suite", function() {
  50. $func = function() {};
  51. $runner = new pecs\Runner();
  52. $suite = $runner->describe('foo', $func);
  53. expect($suite)->to_be_a('pecs\Suite');
  54. expect($suite->description)->to_be('foo');
  55. expect($suite->func)->to_be($func);
  56. });
  57. it("should add the suite to the list of suites", function() {
  58. $runner = new pecs\Runner();
  59. expect($runner->suites)->to_be_empty();
  60. $suite1 = $runner->describe("foo", function() {});
  61. expect($runner->suites)->to_have_count(1);
  62. expect($runner->suites[0])->to_be($suite1);
  63. $suite2 = $runner->describe("bar", function() {});
  64. expect($runner->suites)->to_have_count(2);
  65. expect($runner->suites[0])->to_be($suite1);
  66. expect($runner->suites[1])->to_be($suite2);
  67. });
  68. it("should call the suite's function once", function() {
  69. $called = 0;
  70. $runner = new pecs\Runner();
  71. $runner->describe('foo', function() use(&$called) { $called += 1; });
  72. expect($called)->to_be(1);
  73. });
  74. it("should set \$runner->suite to the suite before calling", function() {
  75. $runner = new pecs\Runner();
  76. $funcSuite = null;
  77. $suite = $runner->describe('foo', function() use(&$funcSuite, $runner) {
  78. $funcSuite = $runner->suite;
  79. });
  80. expect($funcSuite)->to_be($suite);
  81. });
  82. it("should restore \$runner->suite after calling", function() {
  83. $runner = new pecs\Runner();
  84. expect($runner->suite)->to_be_null();
  85. $runner->describe('foo', function() {});
  86. expect($runner->suite)->to_be_null();
  87. });
  88. });
  89. describe("it()", function() {
  90. it("should create a spec", function() {
  91. $func = function() {};
  92. $runner = new pecs\Runner();
  93. $spec = $runner->it('foo', $func);
  94. expect($spec)->to_be_a('pecs\Spec');
  95. expect($spec->description)->to_be('foo');
  96. expect($spec->func)->to_be($func);
  97. });
  98. it("should add the spec to the list of specs", function() {
  99. $runner = new pecs\Runner();
  100. expect($runner->specs)->to_be_empty();
  101. $spec1 = $runner->it("foo", function() {});
  102. expect($runner->specs)->to_have_count(1);
  103. expect($runner->specs[0])->to_be($spec1);
  104. $spec2 = $runner->it("bar", function() {});
  105. expect($runner->specs)->to_have_count(2);
  106. expect($runner->specs[0])->to_be($spec1);
  107. expect($runner->specs[1])->to_be($spec2);
  108. });
  109. it("should set the spec's parent to the current suite", function() {
  110. $suite = new pecs\Suite();
  111. $runner = new pecs\Runner();
  112. $runner->suite = $suite;
  113. $spec = $runner->it('foo', function() {});
  114. expect($spec->parent)->to_be($suite);
  115. });
  116. it("should not call the spec's function", function() {
  117. $called = 0;
  118. $func = function() use(&$called) { $called += 1; };
  119. $runner = new pecs\Runner();
  120. $runner->it('foo', $func);
  121. expect($called)->to_be(0);
  122. });
  123. });
  124. describe("run", function() {
  125. // FIXME
  126. /*
  127. function run($formatter=null) {
  128. if (!is_null($formatter))
  129. $this->formatter = $formatter;
  130. $this->formatter->before();
  131. foreach ($this->suites as $suite) {
  132. $this->formatter->beforeSuite($suite);
  133. foreach ($suite->specs as $spec) {
  134. $this->spec = $spec;
  135. $this->formatter->beforeSpec($spec);
  136. $spec->run();
  137. $this->formatter->afterSpec($spec);
  138. }
  139. $this->formatter->afterSuite($suite);
  140. }
  141. $this->formatter->after();
  142. }
  143. */
  144. });
  145. });
  146. describe("run", function() {
  147. it("should call run on the current runner object", function($scope, $spec) {
  148. $oldRunner = pecs\runner();
  149. $mockRunner = new MockRunner();
  150. pecs\runner($mockRunner);
  151. $spec->expect($mockRunner->runCalls)->to_be_empty();
  152. $formatter = new pecs\Formatter();
  153. pecs\run($formatter);
  154. pecs\run($formatter);
  155. $spec->expect($mockRunner->runCalls)->to_have_count(2);
  156. $spec->expect($mockRunner->runCalls[0])->to_have_count(1);
  157. $spec->expect($mockRunner->runCalls[1])->to_have_count(1);
  158. $spec->expect($mockRunner->runCalls[0][0])->to_be($formatter);
  159. $spec->expect($mockRunner->runCalls[1][0])->to_be($formatter);
  160. pecs\runner($oldRunner);
  161. });
  162. });
  163. });