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.
- data/CHANGES +122 -2
- data/README +10 -9
- data/Rakefile +22 -49
- data/TODO +2 -0
- data/bin/spec +1 -1
- data/bin/spec_translator +8 -8
- data/examples/{auto_spec_description_example.rb → pure/autogenerated_docstrings_example.rb} +0 -0
- data/examples/{before_and_after_example.rb → pure/before_and_after_example.rb} +1 -0
- data/examples/{behave_as_example.rb → pure/behave_as_example.rb} +0 -0
- data/examples/{custom_expectation_matchers.rb → pure/custom_expectation_matchers.rb} +0 -0
- data/examples/{custom_formatter.rb → pure/custom_formatter.rb} +1 -0
- data/examples/{dynamic_spec.rb → pure/dynamic_spec.rb} +0 -0
- data/examples/{file_accessor.rb → pure/file_accessor.rb} +1 -0
- data/examples/{file_accessor_spec.rb → pure/file_accessor_spec.rb} +0 -0
- data/examples/{greeter_spec.rb → pure/greeter_spec.rb} +1 -0
- data/examples/{helper_method_example.rb → pure/helper_method_example.rb} +0 -0
- data/examples/{io_processor.rb → pure/io_processor.rb} +0 -0
- data/examples/{io_processor_spec.rb → pure/io_processor_spec.rb} +0 -0
- data/examples/{legacy_spec.rb → pure/legacy_spec.rb} +1 -0
- data/examples/{mocking_example.rb → pure/mocking_example.rb} +0 -0
- data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
- data/examples/pure/nested_classes_example.rb +36 -0
- data/examples/{partial_mock_example.rb → pure/partial_mock_example.rb} +0 -0
- data/examples/{pending_example.rb → pure/pending_example.rb} +0 -0
- data/examples/{predicate_example.rb → pure/predicate_example.rb} +0 -0
- data/examples/{priority.txt → pure/priority.txt} +0 -0
- data/examples/pure/shared_example_group_example.rb +66 -0
- data/examples/pure/shared_stack_examples.rb +38 -0
- data/examples/pure/spec_helper.rb +3 -0
- data/examples/{stack.rb → pure/stack.rb} +0 -0
- data/examples/{stack_spec.rb → pure/stack_spec.rb} +1 -35
- data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
- data/examples/{stubbing_example.rb → pure/stubbing_example.rb} +0 -0
- data/examples/stories/adder.rb +13 -0
- data/examples/stories/addition +34 -0
- data/examples/stories/addition.rb +9 -0
- data/examples/stories/calculator.rb +65 -0
- data/examples/stories/game-of-life/README.txt +21 -0
- data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
- data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
- data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
- data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
- data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
- data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
- data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
- data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
- data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
- data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
- data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
- data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
- data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
- data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
- data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
- data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
- data/examples/stories/game-of-life/life.rb +3 -0
- data/examples/stories/game-of-life/life/game.rb +23 -0
- data/examples/stories/game-of-life/life/grid.rb +43 -0
- data/examples/stories/helper.rb +9 -0
- data/examples/stories/steps/addition_steps.rb +18 -0
- data/lib/autotest/rspec.rb +1 -2
- data/lib/spec.rb +30 -6
- data/lib/spec/example.rb +12 -0
- data/lib/spec/{dsl → example}/configuration.rb +48 -39
- data/lib/spec/{dsl → example}/errors.rb +2 -2
- data/lib/spec/example/example_group.rb +16 -0
- data/lib/spec/example/example_group_factory.rb +62 -0
- data/lib/spec/example/example_group_methods.rb +412 -0
- data/lib/spec/example/example_matcher.rb +42 -0
- data/lib/spec/example/example_methods.rb +101 -0
- data/lib/spec/example/module_reopening_fix.rb +21 -0
- data/lib/spec/example/pending.rb +18 -0
- data/lib/spec/example/shared_example_group.rb +58 -0
- data/lib/spec/expectations/differs/default.rb +15 -10
- data/lib/spec/expectations/errors.rb +7 -1
- data/lib/spec/expectations/extensions/object.rb +12 -7
- data/lib/spec/expectations/handler.rb +13 -4
- data/lib/spec/extensions.rb +2 -0
- data/lib/spec/extensions/class.rb +24 -0
- data/lib/spec/extensions/main.rb +54 -0
- data/lib/spec/extensions/object.rb +5 -1
- data/lib/spec/interop/test.rb +10 -0
- data/lib/spec/interop/test/unit/autorunner.rb +6 -0
- data/lib/spec/interop/test/unit/testcase.rb +61 -0
- data/lib/spec/interop/test/unit/testresult.rb +6 -0
- data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
- data/lib/spec/interop/test/unit/ui/console/testrunner.rb +60 -0
- data/lib/spec/matchers.rb +11 -15
- data/lib/spec/matchers/be.rb +23 -6
- data/lib/spec/matchers/change.rb +25 -1
- data/lib/spec/matchers/exist.rb +17 -0
- data/lib/spec/matchers/operator_matcher.rb +1 -0
- data/lib/spec/matchers/simple_matcher.rb +29 -0
- data/lib/spec/matchers/throw_symbol.rb +2 -0
- data/lib/spec/mocks.rb +5 -2
- data/lib/spec/mocks/argument_expectation.rb +1 -1
- data/lib/spec/mocks/message_expectation.rb +62 -44
- data/lib/spec/mocks/methods.rb +2 -2
- data/lib/spec/mocks/mock.rb +24 -3
- data/lib/spec/mocks/proxy.rb +26 -23
- data/lib/spec/mocks/space.rb +1 -1
- data/lib/spec/mocks/spec_methods.rb +20 -12
- data/lib/spec/rake/spectask.rb +19 -1
- data/lib/spec/rake/verify_rcov.rb +1 -1
- data/lib/spec/runner.rb +33 -10
- data/lib/spec/runner/backtrace_tweaker.rb +3 -3
- data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
- data/lib/spec/runner/command_line.rb +18 -12
- data/lib/spec/runner/drb_command_line.rb +4 -5
- data/lib/spec/runner/example_group_runner.rb +59 -0
- data/lib/spec/runner/formatter/base_formatter.rb +10 -8
- data/lib/spec/runner/formatter/base_text_formatter.rb +18 -18
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +31 -0
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +3 -5
- data/lib/spec/runner/formatter/html_formatter.rb +37 -27
- data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +3 -4
- data/lib/spec/runner/formatter/specdoc_formatter.rb +27 -13
- data/lib/spec/runner/formatter/story/html_formatter.rb +124 -0
- data/lib/spec/runner/formatter/story/plain_text_formatter.rb +123 -0
- data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
- data/lib/spec/runner/heckle_runner.rb +9 -9
- data/lib/spec/runner/option_parser.rb +140 -138
- data/lib/spec/runner/options.rb +168 -90
- data/lib/spec/runner/reporter.rb +58 -40
- data/lib/spec/runner/spec_parser.rb +11 -8
- data/lib/spec/story.rb +10 -0
- data/lib/spec/story/extensions.rb +1 -0
- data/lib/spec/story/extensions/main.rb +86 -0
- data/lib/spec/story/given_scenario.rb +14 -0
- data/lib/spec/story/runner.rb +58 -0
- data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
- data/lib/spec/story/runner/scenario_collector.rb +18 -0
- data/lib/spec/story/runner/scenario_runner.rb +46 -0
- data/lib/spec/story/runner/story_mediator.rb +123 -0
- data/lib/spec/story/runner/story_parser.rb +227 -0
- data/lib/spec/story/runner/story_runner.rb +67 -0
- data/lib/spec/story/scenario.rb +14 -0
- data/lib/spec/story/step.rb +48 -0
- data/lib/spec/story/step_group.rb +89 -0
- data/lib/spec/story/step_mother.rb +37 -0
- data/lib/spec/story/story.rb +42 -0
- data/lib/spec/story/world.rb +124 -0
- data/lib/spec/version.rb +4 -5
- data/plugins/mock_frameworks/rspec.rb +1 -1
- data/spec/autotest/rspec_spec.rb +13 -7
- data/spec/autotest_helper.rb +4 -3
- data/spec/rspec_suite.rb +7 -0
- data/spec/ruby_forker.rb +13 -0
- data/spec/spec/example/configuration_spec.rb +290 -0
- data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
- data/spec/spec/example/example_group_factory_spec.rb +129 -0
- data/spec/spec/example/example_group_methods_spec.rb +465 -0
- data/spec/spec/example/example_group_spec.rb +711 -0
- data/spec/spec/{dsl → example}/example_matcher_spec.rb +23 -18
- data/spec/spec/example/example_methods_spec.rb +75 -0
- data/spec/spec/example/example_runner_spec.rb +194 -0
- data/spec/spec/example/example_spec.rb +53 -0
- data/spec/spec/example/nested_example_group_spec.rb +59 -0
- data/spec/spec/example/pending_module_spec.rb +31 -0
- data/spec/spec/{dsl → example}/predicate_matcher_spec.rb +1 -1
- data/spec/spec/example/shared_example_group_spec.rb +265 -0
- data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
- data/spec/spec/expectations/differs/default_spec.rb +5 -3
- data/spec/spec/expectations/extensions/object_spec.rb +63 -2
- data/spec/spec/extensions/main_spec.rb +50 -0
- data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
- data/spec/spec/interop/test/unit/testcase_spec.rb +10 -0
- data/spec/spec/interop/test/unit/testcase_spec_with_test_unit.rb +20 -0
- data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
- data/spec/spec/interop/test/unit/testsuite_adapter_spec_with_test_unit.rb +34 -0
- data/spec/spec/matchers/be_spec.rb +15 -0
- data/spec/spec/matchers/change_spec.rb +87 -0
- data/spec/spec/matchers/description_generation_spec.rb +31 -37
- data/spec/spec/matchers/exist_spec.rb +31 -22
- data/spec/spec/matchers/handler_spec.rb +42 -1
- data/spec/spec/matchers/have_spec.rb +1 -1
- data/spec/spec/matchers/mock_constraint_matchers_spec.rb +1 -1
- data/spec/spec/matchers/operator_matcher_spec.rb +1 -1
- data/spec/spec/matchers/simple_matcher_spec.rb +31 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +4 -1
- data/spec/spec/mocks/bug_report_10263.rb +24 -0
- data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
- data/spec/spec/mocks/bug_report_8165_spec.rb +2 -2
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +1 -0
- data/spec/spec/mocks/mock_spec.rb +200 -102
- data/spec/spec/mocks/multiple_return_value_spec.rb +1 -1
- data/spec/spec/mocks/options_hash_spec.rb +19 -7
- data/spec/spec/mocks/partial_mock_spec.rb +31 -9
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +6 -0
- data/spec/spec/mocks/stub_spec.rb +120 -98
- data/spec/spec/package/bin_spec_spec.rb +7 -5
- data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
- data/spec/spec/runner/command_line_spec.rb +140 -27
- data/spec/spec/runner/drb_command_line_spec.rb +39 -31
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +44 -0
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +16 -11
- data/spec/spec/runner/formatter/html_formatter_spec.rb +60 -50
- data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +29 -13
- data/spec/spec/runner/formatter/snippet_extractor_spec.rb +14 -7
- data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +103 -39
- data/spec/spec/runner/formatter/story/html_formatter_spec.rb +56 -0
- data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +289 -0
- data/spec/spec/runner/heckle_runner_spec.rb +29 -14
- data/spec/spec/runner/heckler_spec.rb +4 -5
- data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +5 -5
- data/spec/spec/runner/option_parser_spec.rb +86 -58
- data/spec/spec/runner/options_spec.rb +239 -120
- data/spec/spec/runner/output_one_time_fixture.rb +7 -0
- data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
- data/spec/spec/runner/output_one_time_spec.rb +16 -0
- data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +6 -6
- data/spec/spec/runner/reporter_spec.rb +147 -163
- data/spec/spec/runner/spec_parser_spec.rb +31 -0
- data/spec/spec/runner_spec.rb +11 -0
- data/spec/spec/spec_classes.rb +12 -5
- data/spec/spec/story/builders.rb +46 -0
- data/spec/spec/story/extensions/main_spec.rb +161 -0
- data/spec/spec/story/extensions_spec.rb +14 -0
- data/spec/spec/story/given_scenario_spec.rb +27 -0
- data/spec/spec/story/runner/plain_text_story_runner_spec.rb +92 -0
- data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
- data/spec/spec/story/runner/scenario_runner_spec.rb +142 -0
- data/spec/spec/story/runner/story_mediator_spec.rb +133 -0
- data/spec/spec/story/runner/story_parser_spec.rb +384 -0
- data/spec/spec/story/runner/story_runner_spec.rb +219 -0
- data/spec/spec/story/runner_spec.rb +106 -0
- data/spec/spec/story/scenario_spec.rb +20 -0
- data/spec/spec/story/step_group_spec.rb +157 -0
- data/spec/spec/story/step_mother_spec.rb +72 -0
- data/spec/spec/story/step_spec.rb +147 -0
- data/spec/spec/story/story_helper.rb +2 -0
- data/spec/spec/story/story_spec.rb +86 -0
- data/spec/spec/story/world_spec.rb +416 -0
- data/spec/spec/translator_spec.rb +2 -1
- data/spec/spec_helper.rb +59 -2
- data/stories/all.rb +5 -0
- data/stories/example_groups/autogenerated_docstrings +26 -0
- data/stories/example_groups/example_group_with_should_methods +17 -0
- data/stories/example_groups/nested_groups +17 -0
- data/stories/example_groups/output +20 -0
- data/stories/example_groups/stories.rb +7 -0
- data/stories/helper.rb +6 -0
- data/stories/interop/examples_and_tests_together +30 -0
- data/stories/interop/stories.rb +7 -0
- data/stories/interop/test_case_with_should_methods +17 -0
- data/stories/pending_stories/README +3 -0
- data/stories/resources/helpers/cmdline.rb +9 -0
- data/stories/resources/helpers/story_helper.rb +16 -0
- data/stories/resources/matchers/smart_match.rb +37 -0
- data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
- data/stories/resources/spec/simple_spec.rb +8 -0
- data/stories/resources/steps/running_rspec.rb +50 -0
- data/stories/resources/test/spec_and_test_together.rb +57 -0
- data/stories/resources/test/test_case_with_should_methods.rb +30 -0
- metadata +232 -106
- data/EXAMPLES.rd +0 -111
- data/examples/multi_threaded_behaviour_runner.rb +0 -25
- data/examples/shared_behaviours_example.rb +0 -39
- data/examples/spec_helper.rb +0 -1
- data/examples/test_case_adapter_example.rb +0 -26
- data/examples/test_case_spec.rb +0 -65
- data/lib/spec/dsl.rb +0 -11
- data/lib/spec/dsl/behaviour.rb +0 -220
- data/lib/spec/dsl/behaviour_callbacks.rb +0 -82
- data/lib/spec/dsl/behaviour_eval.rb +0 -231
- data/lib/spec/dsl/behaviour_factory.rb +0 -42
- data/lib/spec/dsl/composite_proc_builder.rb +0 -33
- data/lib/spec/dsl/description.rb +0 -76
- data/lib/spec/dsl/example.rb +0 -135
- data/lib/spec/dsl/example_matcher.rb +0 -40
- data/lib/spec/dsl/example_should_raise_handler.rb +0 -74
- data/lib/spec/runner/behaviour_runner.rb +0 -123
- data/lib/spec/runner/extensions/kernel.rb +0 -50
- data/lib/spec/runner/extensions/object.rb +0 -32
- data/lib/spec/runner/formatter.rb +0 -9
- data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +0 -29
- data/lib/spec/runner/formatter/rdoc_formatter.rb +0 -24
- data/lib/spec/test_case_adapter.rb +0 -10
- data/spec/spec/dsl/behaviour_eval_spec.rb +0 -79
- data/spec/spec/dsl/behaviour_factory_spec.rb +0 -48
- data/spec/spec/dsl/behaviour_spec.rb +0 -661
- data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -44
- data/spec/spec/dsl/configuration_spec.rb +0 -55
- data/spec/spec/dsl/description_spec.rb +0 -89
- data/spec/spec/dsl/example_class_spec.rb +0 -24
- data/spec/spec/dsl/example_instance_spec.rb +0 -160
- data/spec/spec/dsl/example_should_raise_spec.rb +0 -137
- data/spec/spec/dsl/shared_behaviour_spec.rb +0 -252
- data/spec/spec/runner/behaviour_runner_spec.rb +0 -229
- data/spec/spec/runner/context_matching_spec.rb +0 -27
- data/spec/spec/runner/extensions/bug_report_10577_spec.rb +0 -35
- data/spec/spec/runner/extensions/kernel_spec.rb +0 -36
- data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +0 -40
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +0 -20
- data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +0 -36
- data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +0 -19
- data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +0 -46
- data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +0 -21
- data/spec/spec/runner/object_ext_spec.rb +0 -11
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
module SharedExampleGroupExample
|
4
|
+
class OneThing
|
5
|
+
def what_things_do
|
6
|
+
"stuff"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class AnotherThing
|
11
|
+
def what_things_do
|
12
|
+
"stuff"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class YetAnotherThing
|
17
|
+
def what_things_do
|
18
|
+
"stuff"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# A SharedExampleGroup is a module, so you can assign
|
23
|
+
# it to a constant if you want ....
|
24
|
+
AllThings = shared_examples_for "All Things" do
|
25
|
+
def helper_method
|
26
|
+
"helper method"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should do what things do" do
|
30
|
+
@thing.what_things_do.should == "stuff"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# TODO - it would be nice to be able to say this instead of the above:
|
35
|
+
|
36
|
+
# class AllThings < Spec::SharedExampleGroup
|
37
|
+
# ...
|
38
|
+
# end
|
39
|
+
|
40
|
+
describe OneThing do
|
41
|
+
# ... then you can include the example group like this, which
|
42
|
+
# feels more like what you might say ...
|
43
|
+
it_should_behave_like "All Things"
|
44
|
+
before(:each) { @thing = OneThing.new }
|
45
|
+
|
46
|
+
it "should have access to helper methods defined in the shared example group" do
|
47
|
+
helper_method.should == "helper method"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe AnotherThing do
|
52
|
+
# ... or you can include the example group like this, which
|
53
|
+
# feels more like the programming language we love.
|
54
|
+
it_should_behave_like AllThings
|
55
|
+
|
56
|
+
before(:each) { @thing = AnotherThing.new }
|
57
|
+
end
|
58
|
+
|
59
|
+
describe YetAnotherThing do
|
60
|
+
# ... or you can include the example group like this, which
|
61
|
+
# feels more like the programming language we love.
|
62
|
+
include AllThings
|
63
|
+
|
64
|
+
before(:each) { @thing = AnotherThing.new }
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[spec_helper])
|
2
|
+
|
3
|
+
shared_examples_for "non-empty Stack" do
|
4
|
+
|
5
|
+
it { @stack.should_not be_empty }
|
6
|
+
|
7
|
+
it "should return the top item when sent #peek" do
|
8
|
+
@stack.peek.should == @last_item_added
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should NOT remove the top item when sent #peek" do
|
12
|
+
@stack.peek.should == @last_item_added
|
13
|
+
@stack.peek.should == @last_item_added
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should return the top item when sent #pop" do
|
17
|
+
@stack.pop.should == @last_item_added
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should remove the top item when sent #pop" do
|
21
|
+
@stack.pop.should == @last_item_added
|
22
|
+
unless @stack.empty?
|
23
|
+
@stack.pop.should_not == @last_item_added
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
shared_examples_for "non-full Stack" do
|
30
|
+
|
31
|
+
it { @stack.should_not be_full }
|
32
|
+
|
33
|
+
it "should add to the top when sent #push" do
|
34
|
+
@stack.push "newly added top item"
|
35
|
+
@stack.peek.should == "newly added top item"
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
File without changes
|
@@ -1,40 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
2
|
require File.dirname(__FILE__) + "/stack"
|
3
|
-
|
4
|
-
describe "non-empty Stack", :shared => true do
|
5
|
-
# NOTE that this one auto-generates the description "should not be empty"
|
6
|
-
it { @stack.should_not be_empty }
|
7
|
-
|
8
|
-
it "should return the top item when sent #peek" do
|
9
|
-
@stack.peek.should == @last_item_added
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should NOT remove the top item when sent #peek" do
|
13
|
-
@stack.peek.should == @last_item_added
|
14
|
-
@stack.peek.should == @last_item_added
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should return the top item when sent #pop" do
|
18
|
-
@stack.pop.should == @last_item_added
|
19
|
-
end
|
20
|
-
|
21
|
-
it "should remove the top item when sent #pop" do
|
22
|
-
@stack.pop.should == @last_item_added
|
23
|
-
unless @stack.empty?
|
24
|
-
@stack.pop.should_not == @last_item_added
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "non-full Stack", :shared => true do
|
30
|
-
# NOTE that this one auto-generates the description "should not be full"
|
31
|
-
it { @stack.should_not be_full }
|
32
|
-
|
33
|
-
it "should add to the top when sent #push" do
|
34
|
-
@stack.push "newly added top item"
|
35
|
-
@stack.peek.should == "newly added top item"
|
36
|
-
end
|
37
|
-
end
|
3
|
+
require File.dirname(__FILE__) + '/shared_stack_examples'
|
38
4
|
|
39
5
|
describe Stack, " (empty)" do
|
40
6
|
before(:each) do
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
require File.dirname(__FILE__) + '/stack'
|
3
|
+
require File.dirname(__FILE__) + '/shared_stack_examples'
|
4
|
+
|
5
|
+
describe Stack do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@stack = Stack.new
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "(empty)" do
|
12
|
+
|
13
|
+
it { @stack.should be_empty }
|
14
|
+
|
15
|
+
it_should_behave_like "non-full Stack"
|
16
|
+
|
17
|
+
it "should complain when sent #peek" do
|
18
|
+
lambda { @stack.peek }.should raise_error(StackUnderflowError)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should complain when sent #pop" do
|
22
|
+
lambda { @stack.pop }.should raise_error(StackUnderflowError)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "(with one item)" do
|
28
|
+
|
29
|
+
before(:each) do
|
30
|
+
@stack.push 3
|
31
|
+
@last_item_added = 3
|
32
|
+
end
|
33
|
+
|
34
|
+
it_should_behave_like "non-empty Stack"
|
35
|
+
it_should_behave_like "non-full Stack"
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "(with one item less than capacity)" do
|
40
|
+
|
41
|
+
before(:each) do
|
42
|
+
(1..9).each { |i| @stack.push i }
|
43
|
+
@last_item_added = 9
|
44
|
+
end
|
45
|
+
|
46
|
+
it_should_behave_like "non-empty Stack"
|
47
|
+
it_should_behave_like "non-full Stack"
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "(full)" do
|
51
|
+
|
52
|
+
before(:each) do
|
53
|
+
(1..10).each { |i| @stack.push i }
|
54
|
+
@last_item_added = 10
|
55
|
+
end
|
56
|
+
|
57
|
+
it { @stack.should be_full }
|
58
|
+
|
59
|
+
it_should_behave_like "non-empty Stack"
|
60
|
+
|
61
|
+
it "should complain on #push" do
|
62
|
+
lambda { @stack.push Object.new }.should raise_error(StackOverflowError)
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
File without changes
|
@@ -0,0 +1,34 @@
|
|
1
|
+
This is a story about a calculator. The text up here above the Story: declaration
|
2
|
+
won't be processed, so you can write whatever you wish!
|
3
|
+
|
4
|
+
Story: simple addition
|
5
|
+
|
6
|
+
As an accountant
|
7
|
+
I want to add numbers
|
8
|
+
So that I can count beans
|
9
|
+
|
10
|
+
Scenario: add one plus one
|
11
|
+
Given an addend of 1
|
12
|
+
And an addend of 1
|
13
|
+
|
14
|
+
When the addends are addeds
|
15
|
+
|
16
|
+
Then the sum should be 3
|
17
|
+
And the corks should be popped
|
18
|
+
|
19
|
+
Scenario: add two plus five
|
20
|
+
Given an addend of 2
|
21
|
+
And an addend of 5
|
22
|
+
|
23
|
+
When the addends are added
|
24
|
+
|
25
|
+
Then the sum should be 7
|
26
|
+
Then it should snow
|
27
|
+
|
28
|
+
Scenario: add three more
|
29
|
+
GivenScenario add two plus five
|
30
|
+
And an addend of 3
|
31
|
+
|
32
|
+
When the addends are added
|
33
|
+
|
34
|
+
Then the sum should be 10
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "helper")
|
2
|
+
require File.join(File.dirname(__FILE__), "adder")
|
3
|
+
|
4
|
+
# with_steps_for :addition, :more_addition do
|
5
|
+
with_steps_for :addition, :more_addition do
|
6
|
+
# Then("the corks should be popped") { }
|
7
|
+
run File.expand_path(__FILE__).gsub(".rb","")
|
8
|
+
end
|
9
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
$:.push File.join(File.dirname(__FILE__), *%w[.. .. lib])
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
class AdditionMatchers < Spec::Story::StepGroup
|
5
|
+
steps do |add|
|
6
|
+
add.given("an addend of $addend") do |addend|
|
7
|
+
@adder ||= Adder.new
|
8
|
+
@adder << addend.to_i
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
steps = AdditionMatchers.new do |add|
|
14
|
+
add.then("the sum should be $sum") do |sum|
|
15
|
+
@sum.should == sum.to_i
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
steps.when("they are added") do
|
20
|
+
@sum = @adder.sum
|
21
|
+
end
|
22
|
+
|
23
|
+
# This Story uses steps (see above) instead of blocks
|
24
|
+
# passed to Given, When and Then
|
25
|
+
|
26
|
+
Story "addition", %{
|
27
|
+
As an accountant
|
28
|
+
I want to add numbers
|
29
|
+
So that I can count some beans
|
30
|
+
}, :steps => steps do
|
31
|
+
Scenario "2 + 3" do
|
32
|
+
Given "an addend of 2"
|
33
|
+
And "an addend of 3"
|
34
|
+
When "they are added"
|
35
|
+
Then "the sum should be 5"
|
36
|
+
end
|
37
|
+
|
38
|
+
# This scenario uses GivenScenario, which silently runs
|
39
|
+
# all the steps in a previous scenario.
|
40
|
+
|
41
|
+
Scenario "add 4 more" do
|
42
|
+
GivenScenario "2 + 3"
|
43
|
+
Given "an addend of 4"
|
44
|
+
When "they are added"
|
45
|
+
Then "the sum should be 9"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# And the class that makes the story pass
|
50
|
+
|
51
|
+
class Adder
|
52
|
+
def << addend
|
53
|
+
addends << addend
|
54
|
+
end
|
55
|
+
|
56
|
+
def sum
|
57
|
+
@addends.inject(0) do |result, addend|
|
58
|
+
result + addend.to_i
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def addends
|
63
|
+
@addends ||= []
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
John Conway's Game of Life
|
2
|
+
|
3
|
+
The Rules
|
4
|
+
---------
|
5
|
+
The Game of Life was invented by John Conway (as you might have gathered).
|
6
|
+
The game is played on a field of cells, each of which has eight neighbors (adjacent cells).
|
7
|
+
A cell is either occupied (by an organism) or not.
|
8
|
+
The rules for deriving a generation from the previous one are these:
|
9
|
+
|
10
|
+
Survival
|
11
|
+
--------
|
12
|
+
If an occupied cell has 2 or 3 neighbors, the organism survives to the next generation.
|
13
|
+
|
14
|
+
Death
|
15
|
+
-----
|
16
|
+
If an occupied cell has 0, 1, 4, 5, 6, 7, or 8 occupied neighbors, the organism dies
|
17
|
+
(0, 1: of loneliness; 4 thru 8: of overcrowding).
|
18
|
+
|
19
|
+
Birth
|
20
|
+
-----
|
21
|
+
If an unoccupied cell has 3 occupied neighbors, it becomes occupied.
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'life'
|
2
|
+
|
3
|
+
describe Game do
|
4
|
+
it 'should have a grid' do
|
5
|
+
# given
|
6
|
+
game = Game.new(5, 5)
|
7
|
+
|
8
|
+
# then
|
9
|
+
game.grid.should be_kind_of(Grid)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should create a cell' do
|
13
|
+
# given
|
14
|
+
game = Game.new(2, 2)
|
15
|
+
expected_grid = Grid.from_string( 'X. ..' )
|
16
|
+
|
17
|
+
# when
|
18
|
+
game.create_at(0, 0)
|
19
|
+
|
20
|
+
# then
|
21
|
+
game.grid.should == expected_grid
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should destroy a cell' do
|
25
|
+
# given
|
26
|
+
game = Game.new(2,2)
|
27
|
+
game.grid = Grid.from_string('X. ..')
|
28
|
+
|
29
|
+
# when
|
30
|
+
game.destroy_at(0,0)
|
31
|
+
|
32
|
+
# then
|
33
|
+
game.grid.should == Grid.from_string('.. ..')
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
describe Grid do
|
2
|
+
it 'should be empty when created' do
|
3
|
+
# given
|
4
|
+
expected_contents = [
|
5
|
+
[0, 0, 0],
|
6
|
+
[0, 0, 0]
|
7
|
+
]
|
8
|
+
grid = Grid.new(2, 3)
|
9
|
+
|
10
|
+
# when
|
11
|
+
contents = grid.contents
|
12
|
+
|
13
|
+
# then
|
14
|
+
contents.should == expected_contents
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should compare equal based on its contents' do
|
18
|
+
# given
|
19
|
+
grid1 = Grid.new(2, 3)
|
20
|
+
grid2 = Grid.new(2, 3)
|
21
|
+
|
22
|
+
# then
|
23
|
+
grid1.should == grid2
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should be able to replace its contents' do
|
27
|
+
# given
|
28
|
+
grid = Grid.new(2,2)
|
29
|
+
new_contents = [[0,1,0], [1,0,1]]
|
30
|
+
|
31
|
+
# when
|
32
|
+
grid.contents = new_contents
|
33
|
+
|
34
|
+
# then
|
35
|
+
grid.contents.should == new_contents
|
36
|
+
grid.rows.should == 2
|
37
|
+
grid.columns.should == 3
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should add an organism' do
|
41
|
+
# given
|
42
|
+
grid = Grid.new(2, 2)
|
43
|
+
expected = Grid.new(2, 2)
|
44
|
+
expected.contents = [[1,0],[0,0]]
|
45
|
+
|
46
|
+
# when
|
47
|
+
grid.create_at(0,0)
|
48
|
+
|
49
|
+
# then
|
50
|
+
grid.should == expected
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should create itself from a string' do
|
54
|
+
# given
|
55
|
+
expected = Grid.new 3, 3
|
56
|
+
expected.create_at(0,0)
|
57
|
+
expected.create_at(1,0)
|
58
|
+
expected.create_at(2,2)
|
59
|
+
|
60
|
+
# when
|
61
|
+
actual = Grid.from_string "X.. X.. ..X"
|
62
|
+
|
63
|
+
# then
|
64
|
+
actual.should == expected
|
65
|
+
end
|
66
|
+
end
|