rspec 1.0.8 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. data/CHANGES +122 -2
  2. data/README +10 -9
  3. data/Rakefile +22 -49
  4. data/TODO +2 -0
  5. data/bin/spec +1 -1
  6. data/bin/spec_translator +8 -8
  7. data/examples/{auto_spec_description_example.rb → pure/autogenerated_docstrings_example.rb} +0 -0
  8. data/examples/{before_and_after_example.rb → pure/before_and_after_example.rb} +1 -0
  9. data/examples/{behave_as_example.rb → pure/behave_as_example.rb} +0 -0
  10. data/examples/{custom_expectation_matchers.rb → pure/custom_expectation_matchers.rb} +0 -0
  11. data/examples/{custom_formatter.rb → pure/custom_formatter.rb} +1 -0
  12. data/examples/{dynamic_spec.rb → pure/dynamic_spec.rb} +0 -0
  13. data/examples/{file_accessor.rb → pure/file_accessor.rb} +1 -0
  14. data/examples/{file_accessor_spec.rb → pure/file_accessor_spec.rb} +0 -0
  15. data/examples/{greeter_spec.rb → pure/greeter_spec.rb} +1 -0
  16. data/examples/{helper_method_example.rb → pure/helper_method_example.rb} +0 -0
  17. data/examples/{io_processor.rb → pure/io_processor.rb} +0 -0
  18. data/examples/{io_processor_spec.rb → pure/io_processor_spec.rb} +0 -0
  19. data/examples/{legacy_spec.rb → pure/legacy_spec.rb} +1 -0
  20. data/examples/{mocking_example.rb → pure/mocking_example.rb} +0 -0
  21. data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
  22. data/examples/pure/nested_classes_example.rb +36 -0
  23. data/examples/{partial_mock_example.rb → pure/partial_mock_example.rb} +0 -0
  24. data/examples/{pending_example.rb → pure/pending_example.rb} +0 -0
  25. data/examples/{predicate_example.rb → pure/predicate_example.rb} +0 -0
  26. data/examples/{priority.txt → pure/priority.txt} +0 -0
  27. data/examples/pure/shared_example_group_example.rb +66 -0
  28. data/examples/pure/shared_stack_examples.rb +38 -0
  29. data/examples/pure/spec_helper.rb +3 -0
  30. data/examples/{stack.rb → pure/stack.rb} +0 -0
  31. data/examples/{stack_spec.rb → pure/stack_spec.rb} +1 -35
  32. data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
  33. data/examples/{stubbing_example.rb → pure/stubbing_example.rb} +0 -0
  34. data/examples/stories/adder.rb +13 -0
  35. data/examples/stories/addition +34 -0
  36. data/examples/stories/addition.rb +9 -0
  37. data/examples/stories/calculator.rb +65 -0
  38. data/examples/stories/game-of-life/README.txt +21 -0
  39. data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
  40. data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
  41. data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
  42. data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
  43. data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
  44. data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
  45. data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
  46. data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
  47. data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
  48. data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
  49. data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
  50. data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
  51. data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
  52. data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
  53. data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
  54. data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
  55. data/examples/stories/game-of-life/life.rb +3 -0
  56. data/examples/stories/game-of-life/life/game.rb +23 -0
  57. data/examples/stories/game-of-life/life/grid.rb +43 -0
  58. data/examples/stories/helper.rb +9 -0
  59. data/examples/stories/steps/addition_steps.rb +18 -0
  60. data/lib/autotest/rspec.rb +1 -2
  61. data/lib/spec.rb +30 -6
  62. data/lib/spec/example.rb +12 -0
  63. data/lib/spec/{dsl → example}/configuration.rb +48 -39
  64. data/lib/spec/{dsl → example}/errors.rb +2 -2
  65. data/lib/spec/example/example_group.rb +16 -0
  66. data/lib/spec/example/example_group_factory.rb +62 -0
  67. data/lib/spec/example/example_group_methods.rb +412 -0
  68. data/lib/spec/example/example_matcher.rb +42 -0
  69. data/lib/spec/example/example_methods.rb +101 -0
  70. data/lib/spec/example/module_reopening_fix.rb +21 -0
  71. data/lib/spec/example/pending.rb +18 -0
  72. data/lib/spec/example/shared_example_group.rb +58 -0
  73. data/lib/spec/expectations/differs/default.rb +15 -10
  74. data/lib/spec/expectations/errors.rb +7 -1
  75. data/lib/spec/expectations/extensions/object.rb +12 -7
  76. data/lib/spec/expectations/handler.rb +13 -4
  77. data/lib/spec/extensions.rb +2 -0
  78. data/lib/spec/extensions/class.rb +24 -0
  79. data/lib/spec/extensions/main.rb +54 -0
  80. data/lib/spec/extensions/object.rb +5 -1
  81. data/lib/spec/interop/test.rb +10 -0
  82. data/lib/spec/interop/test/unit/autorunner.rb +6 -0
  83. data/lib/spec/interop/test/unit/testcase.rb +61 -0
  84. data/lib/spec/interop/test/unit/testresult.rb +6 -0
  85. data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
  86. data/lib/spec/interop/test/unit/ui/console/testrunner.rb +60 -0
  87. data/lib/spec/matchers.rb +11 -15
  88. data/lib/spec/matchers/be.rb +23 -6
  89. data/lib/spec/matchers/change.rb +25 -1
  90. data/lib/spec/matchers/exist.rb +17 -0
  91. data/lib/spec/matchers/operator_matcher.rb +1 -0
  92. data/lib/spec/matchers/simple_matcher.rb +29 -0
  93. data/lib/spec/matchers/throw_symbol.rb +2 -0
  94. data/lib/spec/mocks.rb +5 -2
  95. data/lib/spec/mocks/argument_expectation.rb +1 -1
  96. data/lib/spec/mocks/message_expectation.rb +62 -44
  97. data/lib/spec/mocks/methods.rb +2 -2
  98. data/lib/spec/mocks/mock.rb +24 -3
  99. data/lib/spec/mocks/proxy.rb +26 -23
  100. data/lib/spec/mocks/space.rb +1 -1
  101. data/lib/spec/mocks/spec_methods.rb +20 -12
  102. data/lib/spec/rake/spectask.rb +19 -1
  103. data/lib/spec/rake/verify_rcov.rb +1 -1
  104. data/lib/spec/runner.rb +33 -10
  105. data/lib/spec/runner/backtrace_tweaker.rb +3 -3
  106. data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
  107. data/lib/spec/runner/command_line.rb +18 -12
  108. data/lib/spec/runner/drb_command_line.rb +4 -5
  109. data/lib/spec/runner/example_group_runner.rb +59 -0
  110. data/lib/spec/runner/formatter/base_formatter.rb +10 -8
  111. data/lib/spec/runner/formatter/base_text_formatter.rb +18 -18
  112. data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +31 -0
  113. data/lib/spec/runner/formatter/failing_examples_formatter.rb +3 -5
  114. data/lib/spec/runner/formatter/html_formatter.rb +37 -27
  115. data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
  116. data/lib/spec/runner/formatter/progress_bar_formatter.rb +3 -4
  117. data/lib/spec/runner/formatter/specdoc_formatter.rb +27 -13
  118. data/lib/spec/runner/formatter/story/html_formatter.rb +124 -0
  119. data/lib/spec/runner/formatter/story/plain_text_formatter.rb +123 -0
  120. data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
  121. data/lib/spec/runner/heckle_runner.rb +9 -9
  122. data/lib/spec/runner/option_parser.rb +140 -138
  123. data/lib/spec/runner/options.rb +168 -90
  124. data/lib/spec/runner/reporter.rb +58 -40
  125. data/lib/spec/runner/spec_parser.rb +11 -8
  126. data/lib/spec/story.rb +10 -0
  127. data/lib/spec/story/extensions.rb +1 -0
  128. data/lib/spec/story/extensions/main.rb +86 -0
  129. data/lib/spec/story/given_scenario.rb +14 -0
  130. data/lib/spec/story/runner.rb +58 -0
  131. data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
  132. data/lib/spec/story/runner/scenario_collector.rb +18 -0
  133. data/lib/spec/story/runner/scenario_runner.rb +46 -0
  134. data/lib/spec/story/runner/story_mediator.rb +123 -0
  135. data/lib/spec/story/runner/story_parser.rb +227 -0
  136. data/lib/spec/story/runner/story_runner.rb +67 -0
  137. data/lib/spec/story/scenario.rb +14 -0
  138. data/lib/spec/story/step.rb +48 -0
  139. data/lib/spec/story/step_group.rb +89 -0
  140. data/lib/spec/story/step_mother.rb +37 -0
  141. data/lib/spec/story/story.rb +42 -0
  142. data/lib/spec/story/world.rb +124 -0
  143. data/lib/spec/version.rb +4 -5
  144. data/plugins/mock_frameworks/rspec.rb +1 -1
  145. data/spec/autotest/rspec_spec.rb +13 -7
  146. data/spec/autotest_helper.rb +4 -3
  147. data/spec/rspec_suite.rb +7 -0
  148. data/spec/ruby_forker.rb +13 -0
  149. data/spec/spec/example/configuration_spec.rb +290 -0
  150. data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
  151. data/spec/spec/example/example_group_factory_spec.rb +129 -0
  152. data/spec/spec/example/example_group_methods_spec.rb +465 -0
  153. data/spec/spec/example/example_group_spec.rb +711 -0
  154. data/spec/spec/{dsl → example}/example_matcher_spec.rb +23 -18
  155. data/spec/spec/example/example_methods_spec.rb +75 -0
  156. data/spec/spec/example/example_runner_spec.rb +194 -0
  157. data/spec/spec/example/example_spec.rb +53 -0
  158. data/spec/spec/example/nested_example_group_spec.rb +59 -0
  159. data/spec/spec/example/pending_module_spec.rb +31 -0
  160. data/spec/spec/{dsl → example}/predicate_matcher_spec.rb +1 -1
  161. data/spec/spec/example/shared_example_group_spec.rb +265 -0
  162. data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
  163. data/spec/spec/expectations/differs/default_spec.rb +5 -3
  164. data/spec/spec/expectations/extensions/object_spec.rb +63 -2
  165. data/spec/spec/extensions/main_spec.rb +50 -0
  166. data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
  167. data/spec/spec/interop/test/unit/testcase_spec.rb +10 -0
  168. data/spec/spec/interop/test/unit/testcase_spec_with_test_unit.rb +20 -0
  169. data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
  170. data/spec/spec/interop/test/unit/testsuite_adapter_spec_with_test_unit.rb +34 -0
  171. data/spec/spec/matchers/be_spec.rb +15 -0
  172. data/spec/spec/matchers/change_spec.rb +87 -0
  173. data/spec/spec/matchers/description_generation_spec.rb +31 -37
  174. data/spec/spec/matchers/exist_spec.rb +31 -22
  175. data/spec/spec/matchers/handler_spec.rb +42 -1
  176. data/spec/spec/matchers/have_spec.rb +1 -1
  177. data/spec/spec/matchers/mock_constraint_matchers_spec.rb +1 -1
  178. data/spec/spec/matchers/operator_matcher_spec.rb +1 -1
  179. data/spec/spec/matchers/simple_matcher_spec.rb +31 -0
  180. data/spec/spec/matchers/throw_symbol_spec.rb +4 -1
  181. data/spec/spec/mocks/bug_report_10263.rb +24 -0
  182. data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
  183. data/spec/spec/mocks/bug_report_8165_spec.rb +2 -2
  184. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +1 -0
  185. data/spec/spec/mocks/mock_spec.rb +200 -102
  186. data/spec/spec/mocks/multiple_return_value_spec.rb +1 -1
  187. data/spec/spec/mocks/options_hash_spec.rb +19 -7
  188. data/spec/spec/mocks/partial_mock_spec.rb +31 -9
  189. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +6 -0
  190. data/spec/spec/mocks/stub_spec.rb +120 -98
  191. data/spec/spec/package/bin_spec_spec.rb +7 -5
  192. data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
  193. data/spec/spec/runner/command_line_spec.rb +140 -27
  194. data/spec/spec/runner/drb_command_line_spec.rb +39 -31
  195. data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +44 -0
  196. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +16 -11
  197. data/spec/spec/runner/formatter/html_formatter_spec.rb +60 -50
  198. data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
  199. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +29 -13
  200. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +14 -7
  201. data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
  202. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +103 -39
  203. data/spec/spec/runner/formatter/story/html_formatter_spec.rb +56 -0
  204. data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +289 -0
  205. data/spec/spec/runner/heckle_runner_spec.rb +29 -14
  206. data/spec/spec/runner/heckler_spec.rb +4 -5
  207. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +5 -5
  208. data/spec/spec/runner/option_parser_spec.rb +86 -58
  209. data/spec/spec/runner/options_spec.rb +239 -120
  210. data/spec/spec/runner/output_one_time_fixture.rb +7 -0
  211. data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
  212. data/spec/spec/runner/output_one_time_spec.rb +16 -0
  213. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +6 -6
  214. data/spec/spec/runner/reporter_spec.rb +147 -163
  215. data/spec/spec/runner/spec_parser_spec.rb +31 -0
  216. data/spec/spec/runner_spec.rb +11 -0
  217. data/spec/spec/spec_classes.rb +12 -5
  218. data/spec/spec/story/builders.rb +46 -0
  219. data/spec/spec/story/extensions/main_spec.rb +161 -0
  220. data/spec/spec/story/extensions_spec.rb +14 -0
  221. data/spec/spec/story/given_scenario_spec.rb +27 -0
  222. data/spec/spec/story/runner/plain_text_story_runner_spec.rb +92 -0
  223. data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
  224. data/spec/spec/story/runner/scenario_runner_spec.rb +142 -0
  225. data/spec/spec/story/runner/story_mediator_spec.rb +133 -0
  226. data/spec/spec/story/runner/story_parser_spec.rb +384 -0
  227. data/spec/spec/story/runner/story_runner_spec.rb +219 -0
  228. data/spec/spec/story/runner_spec.rb +106 -0
  229. data/spec/spec/story/scenario_spec.rb +20 -0
  230. data/spec/spec/story/step_group_spec.rb +157 -0
  231. data/spec/spec/story/step_mother_spec.rb +72 -0
  232. data/spec/spec/story/step_spec.rb +147 -0
  233. data/spec/spec/story/story_helper.rb +2 -0
  234. data/spec/spec/story/story_spec.rb +86 -0
  235. data/spec/spec/story/world_spec.rb +416 -0
  236. data/spec/spec/translator_spec.rb +2 -1
  237. data/spec/spec_helper.rb +59 -2
  238. data/stories/all.rb +5 -0
  239. data/stories/example_groups/autogenerated_docstrings +26 -0
  240. data/stories/example_groups/example_group_with_should_methods +17 -0
  241. data/stories/example_groups/nested_groups +17 -0
  242. data/stories/example_groups/output +20 -0
  243. data/stories/example_groups/stories.rb +7 -0
  244. data/stories/helper.rb +6 -0
  245. data/stories/interop/examples_and_tests_together +30 -0
  246. data/stories/interop/stories.rb +7 -0
  247. data/stories/interop/test_case_with_should_methods +17 -0
  248. data/stories/pending_stories/README +3 -0
  249. data/stories/resources/helpers/cmdline.rb +9 -0
  250. data/stories/resources/helpers/story_helper.rb +16 -0
  251. data/stories/resources/matchers/smart_match.rb +37 -0
  252. data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
  253. data/stories/resources/spec/simple_spec.rb +8 -0
  254. data/stories/resources/steps/running_rspec.rb +50 -0
  255. data/stories/resources/test/spec_and_test_together.rb +57 -0
  256. data/stories/resources/test/test_case_with_should_methods.rb +30 -0
  257. metadata +232 -106
  258. data/EXAMPLES.rd +0 -111
  259. data/examples/multi_threaded_behaviour_runner.rb +0 -25
  260. data/examples/shared_behaviours_example.rb +0 -39
  261. data/examples/spec_helper.rb +0 -1
  262. data/examples/test_case_adapter_example.rb +0 -26
  263. data/examples/test_case_spec.rb +0 -65
  264. data/lib/spec/dsl.rb +0 -11
  265. data/lib/spec/dsl/behaviour.rb +0 -220
  266. data/lib/spec/dsl/behaviour_callbacks.rb +0 -82
  267. data/lib/spec/dsl/behaviour_eval.rb +0 -231
  268. data/lib/spec/dsl/behaviour_factory.rb +0 -42
  269. data/lib/spec/dsl/composite_proc_builder.rb +0 -33
  270. data/lib/spec/dsl/description.rb +0 -76
  271. data/lib/spec/dsl/example.rb +0 -135
  272. data/lib/spec/dsl/example_matcher.rb +0 -40
  273. data/lib/spec/dsl/example_should_raise_handler.rb +0 -74
  274. data/lib/spec/runner/behaviour_runner.rb +0 -123
  275. data/lib/spec/runner/extensions/kernel.rb +0 -50
  276. data/lib/spec/runner/extensions/object.rb +0 -32
  277. data/lib/spec/runner/formatter.rb +0 -9
  278. data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +0 -29
  279. data/lib/spec/runner/formatter/rdoc_formatter.rb +0 -24
  280. data/lib/spec/test_case_adapter.rb +0 -10
  281. data/spec/spec/dsl/behaviour_eval_spec.rb +0 -79
  282. data/spec/spec/dsl/behaviour_factory_spec.rb +0 -48
  283. data/spec/spec/dsl/behaviour_spec.rb +0 -661
  284. data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -44
  285. data/spec/spec/dsl/configuration_spec.rb +0 -55
  286. data/spec/spec/dsl/description_spec.rb +0 -89
  287. data/spec/spec/dsl/example_class_spec.rb +0 -24
  288. data/spec/spec/dsl/example_instance_spec.rb +0 -160
  289. data/spec/spec/dsl/example_should_raise_spec.rb +0 -137
  290. data/spec/spec/dsl/shared_behaviour_spec.rb +0 -252
  291. data/spec/spec/runner/behaviour_runner_spec.rb +0 -229
  292. data/spec/spec/runner/context_matching_spec.rb +0 -27
  293. data/spec/spec/runner/extensions/bug_report_10577_spec.rb +0 -35
  294. data/spec/spec/runner/extensions/kernel_spec.rb +0 -36
  295. data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +0 -40
  296. data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +0 -20
  297. data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +0 -36
  298. data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +0 -19
  299. data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +0 -46
  300. data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +0 -21
  301. data/spec/spec/runner/object_ext_spec.rb +0 -11
@@ -0,0 +1,21 @@
1
+ Story: cells with less than two neighbours die
2
+
3
+ As a game producer
4
+ I want cells with less than two neighbours to die
5
+ So that I can illustrate how the game works to people with money
6
+
7
+ Scenario: cells with zero or one neighbour die
8
+
9
+ Given the grid looks like
10
+ ........
11
+ .XX.XX..
12
+ .XX.....
13
+ ....X...
14
+ ........
15
+ When the next step occurs
16
+ Then the grid should look like
17
+ ........
18
+ .XX.....
19
+ .XX.....
20
+ ........
21
+ ........
@@ -0,0 +1,21 @@
1
+ Story: cells with more than three neighbours die
2
+
3
+ As a game producer
4
+ I want cells with more than three neighbours to die
5
+ So that I can show the people with money how we are getting on
6
+
7
+ Scenario: blink
8
+
9
+ Given the grid looks like
10
+ .....
11
+ ...XX
12
+ ...XX
13
+ .XX..
14
+ .XX..
15
+ When the next step occurs
16
+ Then the grid should look like
17
+ .....
18
+ ...XX
19
+ ....X
20
+ .X...
21
+ .XX..
@@ -0,0 +1,42 @@
1
+ Story: Empty spaces with three neighbours create a cell
2
+
3
+ As a game producer
4
+ I want empty cells with three neighbours to die
5
+ So that I have a minimum feature set to ship
6
+
7
+ Scenario: the glider
8
+
9
+ Given the grid looks like
10
+ ...X..
11
+ ..X...
12
+ ..XXX.
13
+ ......
14
+ ......
15
+ When the next step occurs
16
+ Then the grid should look like
17
+ ......
18
+ ..X.X.
19
+ ..XX..
20
+ ...X..
21
+ ......
22
+ When the next step occurs
23
+ Then the grid should look like
24
+ ......
25
+ ..X...
26
+ ..X.X.
27
+ ..XX..
28
+ ......
29
+ When the next step occurs
30
+ Then the grid should look like
31
+ ......
32
+ ...X..
33
+ .XX...
34
+ ..XX..
35
+ ......
36
+ When the next step occurs
37
+ Then the grid should look like
38
+ ......
39
+ ..X...
40
+ .X....
41
+ .XXX..
42
+ ......
@@ -0,0 +1,42 @@
1
+ Story: I can create a cell
2
+
3
+ As a game producer
4
+ I want to create a cell
5
+ So that I can show the grid to people
6
+
7
+ Scenario: nothing to see here
8
+
9
+ Given a 3 x 3 game
10
+ Then the grid should look like
11
+ ...
12
+ ...
13
+ ...
14
+
15
+ Scenario: all on its lonesome
16
+
17
+ Given a 3 x 3 game
18
+ When I create a cell at 1, 1
19
+ Then the grid should look like
20
+ ...
21
+ .X.
22
+ ...
23
+
24
+ Scenario: the grid has three cells
25
+
26
+ Given a 3 x 3 game
27
+ When I create a cell at 0, 0
28
+ and I create a cell at 0, 1
29
+ and I create a cell at 2, 2
30
+ Then the grid should look like
31
+ XX.
32
+ ...
33
+ ..X
34
+
35
+ Scenario: more cells more more
36
+
37
+ Given the grid has three cells
38
+ When I create a celll at 3, 1
39
+ Then the grid should look like
40
+ XX.
41
+ ..X
42
+ ..X
@@ -0,0 +1,17 @@
1
+ Story: I can kill a cell
2
+
3
+ As a game producer
4
+ I want to kill a cell
5
+ So that when I make a mistake I dont have to start again
6
+
7
+ Scenario: bang youre dead
8
+
9
+ Given the grid looks like
10
+ XX.
11
+ .X.
12
+ ..X
13
+ When I destroy the cell at 0, 1
14
+ Then the grid should look like
15
+ X..
16
+ .X.
17
+ ..X
@@ -0,0 +1,53 @@
1
+ Story: The grid wraps
2
+
3
+ As a game player
4
+ I want the grid to wrap
5
+ So that untidy stuff at the edges is avoided
6
+
7
+ Scenario: crowded in the corners
8
+
9
+ Given the grid looks like
10
+ X.X
11
+ ...
12
+ X.X
13
+ When the next step is taken
14
+ Then the grid should look like
15
+ X.X
16
+ ...
17
+ X.X
18
+
19
+
20
+ Scenario: the glider returns
21
+
22
+ Given the glider
23
+ ......
24
+ ..X...
25
+ .X....
26
+ .XXX..
27
+ ......
28
+ When the next step is taken
29
+ and the next step is taken
30
+ and the next step is taken
31
+ and the next step is taken
32
+ Then the grid should look like
33
+ ......
34
+ ......
35
+ .X....
36
+ X.....
37
+ XXX...
38
+ When the next step is taken
39
+ Then the grid should look like
40
+ .X....
41
+ ......
42
+ ......
43
+ X.X...
44
+ XX....
45
+ When the next step is taken
46
+ Then the grid should look like
47
+ XX....
48
+ ......
49
+ ......
50
+ X.....
51
+ X.X...
52
+
53
+
@@ -0,0 +1,52 @@
1
+ require File.join(File.dirname(__FILE__), *%w[helper])
2
+
3
+ Story "I can create a cell",
4
+ %(As a game producer
5
+ I want to create a cell
6
+ So that I can show the grid to people), :steps_for => :life do
7
+
8
+ Scenario "nothing to see here" do
9
+ Given "a game with dimensions", 3, 3 do |rows,cols|
10
+ @game = Game.new(rows,cols)
11
+ end
12
+
13
+ Then "the grid should look like", %(
14
+ ...
15
+ ...
16
+ ...
17
+ )
18
+ end
19
+
20
+ Scenario "all on its lonesome" do
21
+ Given "a game with dimensions", 2, 2
22
+ When "I create a cell at", 1, 1 do |row,col|
23
+ @game.create_at(row,col)
24
+ end
25
+ Then "the grid should look like", %(
26
+ ..
27
+ .X
28
+ )
29
+ end
30
+
31
+ Scenario "the grid has three cells" do
32
+ Given "a game with dimensions", 3, 3
33
+ When "I create a cell at", 0, 0
34
+ When "I create a cell at", 0, 1
35
+ When "I create a cell at", 2, 2
36
+ Then "the grid should look like", %(
37
+ XX.
38
+ ...
39
+ ..X
40
+ )
41
+ end
42
+
43
+ Scenario "more cells more more" do
44
+ GivenScenario "the grid has three cells"
45
+ When "I create a cell at", 2, 0
46
+ Then "the grid should look like", %(
47
+ XX.
48
+ ...
49
+ X.X
50
+ )
51
+ end
52
+ end
@@ -0,0 +1,6 @@
1
+ dir = File.dirname(__FILE__)
2
+ $LOAD_PATH.unshift(File.expand_path("#{dir}/../../../../../../rspec/lib"))
3
+ require 'spec'
4
+ $LOAD_PATH.unshift(File.expand_path("#{dir}/../../"))
5
+ require "#{dir}/../../life"
6
+ require File.join(File.dirname(__FILE__), *%w[steps])
@@ -0,0 +1,26 @@
1
+ require File.join(File.dirname(__FILE__), *%w[helper])
2
+
3
+ Story 'I can kill a cell',
4
+ %(As a game producer
5
+ I want to kill a cell
6
+ So that when I make a mistake I don't have to start again), :steps_for => :life do
7
+
8
+ Scenario "bang, you're dead" do
9
+
10
+ Given 'a game that looks like', %(
11
+ XX.
12
+ .X.
13
+ ..X
14
+ ) do |dots|
15
+ @game = Game.from_string dots
16
+ end
17
+ When 'I destroy the cell at', 0, 1 do |row,col|
18
+ @game.destroy_at(row,col)
19
+ end
20
+ Then 'the grid should look like', %(
21
+ X..
22
+ .X.
23
+ ..X
24
+ )
25
+ end
26
+ end
@@ -0,0 +1,5 @@
1
+ steps_for :life do
2
+ Then "the grid should look like" do |dots|
3
+ @game.grid.should == Grid.from_string(dots)
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ require File.join(File.dirname(__FILE__), *%w[helper])
2
+ require 'behaviour/stories/create_a_cell'
3
+ require 'behaviour/stories/kill_a_cell'
@@ -0,0 +1,22 @@
1
+ Story: Show the game field
2
+ As a game player
3
+ I want to see the field
4
+ so that I can observe the progress of the organisms
5
+
6
+ Scenario: an empty field
7
+ Given a new game starts
8
+ When the game displays the field
9
+ Then the field should be empty
10
+
11
+
12
+
13
+
14
+
15
+ StoryBuilder story = stories.createStory().called("a story")
16
+ .asA("person")
17
+ .iWant("to do something")
18
+ .soThat("I can rule the world");
19
+ story.addScenario().called("happy path").as()
20
+ .given("some context")
21
+ .when("some event happens")
22
+ .then("expect some outcome");
@@ -0,0 +1,3 @@
1
+ $: << File.dirname(__FILE__)
2
+ require 'life/game'
3
+ require 'life/grid'
@@ -0,0 +1,23 @@
1
+ class Game
2
+ attr_accessor :grid
3
+ def initialize(rows,cols)
4
+ @grid = Grid.new(rows, cols)
5
+ end
6
+
7
+ def create_at(row,col)
8
+ @grid.create_at(row,col)
9
+ end
10
+
11
+ def destroy_at(row,col)
12
+ @grid.destroy_at(row, col)
13
+ end
14
+
15
+ def self.from_string(dots)
16
+ grid = Grid.from_string(dots)
17
+ game = new(grid.rows, grid.columns)
18
+ game.instance_eval do
19
+ @grid = grid
20
+ end
21
+ return game
22
+ end
23
+ end
@@ -0,0 +1,43 @@
1
+ class Grid
2
+
3
+ attr_accessor :contents
4
+
5
+ def initialize(rows, cols)
6
+ @contents = []
7
+ rows.times do @contents << [0] * cols end
8
+ end
9
+
10
+ def rows
11
+ @contents.size
12
+ end
13
+
14
+ def columns
15
+ @contents[0].size
16
+ end
17
+
18
+ def ==(other)
19
+ self.contents == other.contents
20
+ end
21
+
22
+ def create_at(row,col)
23
+ @contents[row][col] = 1
24
+ end
25
+
26
+ def destroy_at(row,col)
27
+ @contents[row][col] = 0
28
+ end
29
+
30
+ def self.from_string(str)
31
+ row_strings = str.split(' ')
32
+ grid = new(row_strings.size, row_strings[0].size)
33
+
34
+ row_strings.each_with_index do |row, row_index|
35
+ row_chars = row.split(//)
36
+ row_chars.each_with_index do |col_char, col_index|
37
+ grid.create_at(row_index, col_index) if col_char == 'X'
38
+ end
39
+ end
40
+ return grid
41
+ end
42
+
43
+ end
@@ -0,0 +1,9 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
+ require 'spec/story'
3
+
4
+ # won't have to do this once plain_text_story_runner is moved into the library
5
+ # require File.join(File.dirname(__FILE__), "plain_text_story_runner")
6
+
7
+ Dir[File.join(File.dirname(__FILE__), "steps/*.rb")].each do |file|
8
+ require file
9
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../helper")
2
+
3
+ # This creates steps for :addition
4
+ steps_for(:addition) do
5
+ Given("an addend of $addend") do |addend|
6
+ @adder ||= Adder.new
7
+ @adder << addend.to_i
8
+ end
9
+ end
10
+
11
+ # This appends to them
12
+ steps_for(:addition) do
13
+ When("the addends are added") { @sum = @adder.sum }
14
+ end
15
+
16
+ steps_for(:more_addition) do
17
+ Then("the sum should be $sum") { |sum| @sum.should == sum.to_i }
18
+ end
@@ -76,7 +76,6 @@ class Autotest::Rspec < Autotest
76
76
  return @alt_separator ? (command.gsub @separator, @alt_separator) : command
77
77
  end
78
78
  end
79
-
80
79
  raise RspecCommandError, "No spec command could be found!"
81
80
  end
82
81
 
@@ -87,7 +86,7 @@ class Autotest::Rspec < Autotest
87
86
  # * default spec bin/loader installed in Rubygems
88
87
  def spec_commands
89
88
  [
90
- File.join('bin', 'spec'),
89
+ File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec')),
91
90
  File.join(Config::CONFIG['bindir'], 'spec')
92
91
  ]
93
92
  end