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
@@ -1,13 +1,11 @@
|
|
1
|
+
require 'spec/runner/formatter/base_text_formatter'
|
2
|
+
|
1
3
|
module Spec
|
2
4
|
module Runner
|
3
5
|
module Formatter
|
4
6
|
class FailingExamplesFormatter < BaseTextFormatter
|
5
|
-
def add_behaviour(behaviour_name)
|
6
|
-
@behaviour_name = behaviour_name
|
7
|
-
end
|
8
|
-
|
9
7
|
def example_failed(example, counter, failure)
|
10
|
-
@output.puts "#{
|
8
|
+
@output.puts "#{example_group.description} #{example.description}"
|
11
9
|
@output.flush
|
12
10
|
end
|
13
11
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'erb'
|
2
|
+
require 'spec/runner/formatter/base_text_formatter'
|
2
3
|
|
3
4
|
module Spec
|
4
5
|
module Runner
|
@@ -6,15 +7,15 @@ module Spec
|
|
6
7
|
class HtmlFormatter < BaseTextFormatter
|
7
8
|
include ERB::Util # for the #h method
|
8
9
|
|
9
|
-
def initialize(output)
|
10
|
+
def initialize(options, output)
|
10
11
|
super
|
11
|
-
@
|
12
|
+
@current_example_group_number = 0
|
12
13
|
@current_example_number = 0
|
13
14
|
end
|
14
15
|
|
15
|
-
# The number of the currently running
|
16
|
-
def
|
17
|
-
@
|
16
|
+
# The number of the currently running example_group
|
17
|
+
def current_example_group_number
|
18
|
+
@current_example_group_number
|
18
19
|
end
|
19
20
|
|
20
21
|
# The number of the currently running example (a global counter)
|
@@ -30,17 +31,18 @@ module Spec
|
|
30
31
|
@output.flush
|
31
32
|
end
|
32
33
|
|
33
|
-
def
|
34
|
-
|
35
|
-
@
|
36
|
-
@
|
37
|
-
|
34
|
+
def add_example_group(example_group)
|
35
|
+
super
|
36
|
+
@example_group_red = false
|
37
|
+
@example_group_red = false
|
38
|
+
@current_example_group_number += 1
|
39
|
+
unless current_example_group_number == 1
|
38
40
|
@output.puts " </dl>"
|
39
41
|
@output.puts "</div>"
|
40
42
|
end
|
41
|
-
@output.puts "<div class=\"
|
43
|
+
@output.puts "<div class=\"example_group\">"
|
42
44
|
@output.puts " <dl>"
|
43
|
-
@output.puts " <dt id=\"
|
45
|
+
@output.puts " <dt id=\"example_group_#{current_example_group_number}\">#{h(example_group.description)}</dt>"
|
44
46
|
@output.flush
|
45
47
|
end
|
46
48
|
|
@@ -51,7 +53,7 @@ module Spec
|
|
51
53
|
end
|
52
54
|
|
53
55
|
def example_started(example)
|
54
|
-
@current_example_number
|
56
|
+
@current_example_number += 1
|
55
57
|
end
|
56
58
|
|
57
59
|
def example_passed(example)
|
@@ -65,8 +67,8 @@ module Spec
|
|
65
67
|
failure_style = failure.pending_fixed? ? 'pending_fixed' : 'failed'
|
66
68
|
@output.puts " <script type=\"text/javascript\">makeRed('rspec-header');</script>" unless @header_red
|
67
69
|
@header_red = true
|
68
|
-
@output.puts " <script type=\"text/javascript\">makeRed('
|
69
|
-
@
|
70
|
+
@output.puts " <script type=\"text/javascript\">makeRed('example_group_#{current_example_group_number}');</script>" unless @example_group_red
|
71
|
+
@example_group_red = true
|
70
72
|
move_progress
|
71
73
|
@output.puts " <dd class=\"spec #{failure_style}\">"
|
72
74
|
@output.puts " <span class=\"failed_spec_name\">#{h(example.description)}</span>"
|
@@ -79,11 +81,11 @@ module Spec
|
|
79
81
|
@output.flush
|
80
82
|
end
|
81
83
|
|
82
|
-
def example_pending(
|
84
|
+
def example_pending(example_group_description, example, message)
|
83
85
|
@output.puts " <script type=\"text/javascript\">makeYellow('rspec-header');</script>" unless @header_red
|
84
|
-
@output.puts " <script type=\"text/javascript\">makeYellow('
|
86
|
+
@output.puts " <script type=\"text/javascript\">makeYellow('example_group_#{current_example_group_number}');</script>" unless @example_group_red
|
85
87
|
move_progress
|
86
|
-
@output.puts " <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{h(
|
88
|
+
@output.puts " <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{h(example.description)} (PENDING: #{h(message)})</span></dd>"
|
87
89
|
@output.flush
|
88
90
|
end
|
89
91
|
|
@@ -91,20 +93,29 @@ module Spec
|
|
91
93
|
# could output links to images or other files produced during the specs.
|
92
94
|
#
|
93
95
|
def extra_failure_content(failure)
|
96
|
+
require 'spec/runner/formatter/snippet_extractor'
|
97
|
+
@snippet_extractor ||= SnippetExtractor.new
|
94
98
|
" <pre class=\"ruby\"><code>#{@snippet_extractor.snippet(failure.exception)}</code></pre>"
|
95
99
|
end
|
96
100
|
|
97
101
|
def move_progress
|
98
|
-
percent_done = @example_count == 0 ? 100.0 : ((current_example_number + 1).to_f / @example_count.to_f * 1000).to_i / 10.0
|
99
102
|
@output.puts " <script type=\"text/javascript\">moveProgressBar('#{percent_done}');</script>"
|
100
103
|
@output.flush
|
101
104
|
end
|
102
105
|
|
106
|
+
def percent_done
|
107
|
+
result = 100.0
|
108
|
+
if @example_count != 0
|
109
|
+
result = ((current_example_number).to_f / @example_count.to_f * 1000).to_i / 10.0
|
110
|
+
end
|
111
|
+
result
|
112
|
+
end
|
113
|
+
|
103
114
|
def dump_failure(counter, failure)
|
104
115
|
end
|
105
116
|
|
106
117
|
def dump_summary(duration, example_count, failure_count, pending_count)
|
107
|
-
if
|
118
|
+
if dry_run?
|
108
119
|
totals = "This was a dry-run"
|
109
120
|
else
|
110
121
|
totals = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failure#{'s' unless failure_count == 1}"
|
@@ -121,15 +132,14 @@ module Spec
|
|
121
132
|
|
122
133
|
def html_header
|
123
134
|
<<-EOF
|
124
|
-
<?xml version="1.0" encoding="
|
125
|
-
<!DOCTYPE html
|
126
|
-
|
127
|
-
|
128
|
-
|
135
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
136
|
+
<!DOCTYPE html
|
137
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
138
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
129
139
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
130
140
|
<head>
|
131
141
|
<title>RSpec results</title>
|
132
|
-
<meta http-equiv="Content-Type" content="text/html; charset=
|
142
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
133
143
|
<meta http-equiv="Expires" content="-1" />
|
134
144
|
<meta http-equiv="Pragma" content="no-cache" />
|
135
145
|
<style type="text/css">
|
@@ -225,7 +235,7 @@ EOF
|
|
225
235
|
font-size: 1.2em;
|
226
236
|
}
|
227
237
|
|
228
|
-
.
|
238
|
+
.example_group {
|
229
239
|
margin: 0 10px 5px;
|
230
240
|
background: #fff;
|
231
241
|
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec/runner/formatter/progress_bar_formatter'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
module Formatter
|
6
|
+
class ProfileFormatter < ProgressBarFormatter
|
7
|
+
|
8
|
+
def initialize(options, where)
|
9
|
+
super
|
10
|
+
@example_times = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def start(count)
|
14
|
+
@output.puts "Profiling enabled."
|
15
|
+
end
|
16
|
+
|
17
|
+
def example_started(example)
|
18
|
+
@time = Time.now
|
19
|
+
end
|
20
|
+
|
21
|
+
def example_passed(example)
|
22
|
+
super
|
23
|
+
@example_times << [
|
24
|
+
example_group.description,
|
25
|
+
example.description,
|
26
|
+
Time.now - @time
|
27
|
+
]
|
28
|
+
end
|
29
|
+
|
30
|
+
def start_dump
|
31
|
+
super
|
32
|
+
@output.puts "\n\nTop 10 slowest examples:\n"
|
33
|
+
|
34
|
+
@example_times = @example_times.sort_by do |description, example, time|
|
35
|
+
time
|
36
|
+
end.reverse
|
37
|
+
|
38
|
+
@example_times[0..9].each do |description, example, time|
|
39
|
+
@output.print red(sprintf("%.7f", time))
|
40
|
+
@output.puts " #{description} #{example}"
|
41
|
+
end
|
42
|
+
@output.flush
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -1,10 +1,9 @@
|
|
1
|
+
require 'spec/runner/formatter/base_text_formatter'
|
2
|
+
|
1
3
|
module Spec
|
2
4
|
module Runner
|
3
5
|
module Formatter
|
4
6
|
class ProgressBarFormatter < BaseTextFormatter
|
5
|
-
def add_behaviour(name)
|
6
|
-
end
|
7
|
-
|
8
7
|
def example_failed(example, counter, failure)
|
9
8
|
@output.print colourise('F', failure)
|
10
9
|
@output.flush
|
@@ -15,7 +14,7 @@ module Spec
|
|
15
14
|
@output.flush
|
16
15
|
end
|
17
16
|
|
18
|
-
def example_pending(
|
17
|
+
def example_pending(example_group_description, example, message)
|
19
18
|
super
|
20
19
|
@output.print yellow('P')
|
21
20
|
@output.flush
|
@@ -1,27 +1,41 @@
|
|
1
|
+
require 'spec/runner/formatter/base_text_formatter'
|
2
|
+
|
1
3
|
module Spec
|
2
4
|
module Runner
|
3
5
|
module Formatter
|
4
|
-
class SpecdocFormatter < BaseTextFormatter
|
5
|
-
def
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
class SpecdocFormatter < BaseTextFormatter
|
7
|
+
def add_example_group(example_group)
|
8
|
+
super
|
9
|
+
output.puts
|
10
|
+
if example_group.description.nil? || example_group.description == ""
|
11
|
+
output.puts example_group.to_s
|
12
|
+
else
|
13
|
+
output.puts example_group.description
|
14
|
+
end
|
15
|
+
output.flush
|
9
16
|
end
|
10
17
|
|
11
18
|
def example_failed(example, counter, failure)
|
12
|
-
|
13
|
-
|
19
|
+
message = if failure.expectation_not_met?
|
20
|
+
"- #{example.description} (FAILED - #{counter})"
|
21
|
+
else
|
22
|
+
"- #{example.description} (ERROR - #{counter})"
|
23
|
+
end
|
24
|
+
|
25
|
+
output.puts(failure.expectation_not_met? ? red(message) : magenta(message))
|
26
|
+
output.flush
|
14
27
|
end
|
15
|
-
|
28
|
+
|
16
29
|
def example_passed(example)
|
17
|
-
|
18
|
-
|
30
|
+
message = "- #{example.description}"
|
31
|
+
output.puts green(message)
|
32
|
+
output.flush
|
19
33
|
end
|
20
34
|
|
21
|
-
def example_pending(
|
35
|
+
def example_pending(example_group_description, example, message)
|
22
36
|
super
|
23
|
-
|
24
|
-
|
37
|
+
output.puts yellow("- #{example.description} (PENDING: #{message})")
|
38
|
+
output.flush
|
25
39
|
end
|
26
40
|
end
|
27
41
|
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'spec/runner/formatter/base_text_formatter'
|
3
|
+
|
4
|
+
module Spec
|
5
|
+
module Runner
|
6
|
+
module Formatter
|
7
|
+
module Story
|
8
|
+
class HtmlFormatter < BaseTextFormatter
|
9
|
+
include ERB::Util
|
10
|
+
|
11
|
+
def run_started(count)
|
12
|
+
@output.puts <<-EOF
|
13
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
14
|
+
<!DOCTYPE html
|
15
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
16
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
17
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
18
|
+
<head>
|
19
|
+
<title>Stories</title>
|
20
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
21
|
+
<meta http-equiv="Expires" content="-1" />
|
22
|
+
<meta http-equiv="Pragma" content="no-cache" />
|
23
|
+
<script src="javascripts/prototype.js" type="text/javascript"></script>
|
24
|
+
<script src="javascripts/scriptaculous.js" type="text/javascript"></script>
|
25
|
+
<script src="javascripts/rspec.js" type="text/javascript"></script>
|
26
|
+
<link href="stylesheets/rspec.css" rel="stylesheet" type="text/css" />
|
27
|
+
</head>
|
28
|
+
<body>
|
29
|
+
<div id="container">
|
30
|
+
EOF
|
31
|
+
end
|
32
|
+
|
33
|
+
def collected_steps(steps)
|
34
|
+
unless steps.empty?
|
35
|
+
@output.puts " <ul id=\"stock_steps\" style=\"display: none;\">"
|
36
|
+
steps.each do |step|
|
37
|
+
@output.puts " <li>#{step}</li>"
|
38
|
+
end
|
39
|
+
@output.puts " </ul>"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def run_ended
|
44
|
+
@output.puts <<-EOF
|
45
|
+
</div>
|
46
|
+
</body>
|
47
|
+
</head>
|
48
|
+
EOF
|
49
|
+
end
|
50
|
+
|
51
|
+
def story_started(title, narrative)
|
52
|
+
@output.puts <<-EOF
|
53
|
+
<dl class="story passed">
|
54
|
+
<dt>Story: #{h title}</dt>
|
55
|
+
<dd>
|
56
|
+
<p>
|
57
|
+
#{h(narrative).split("\n").join("<br />")}
|
58
|
+
</p>
|
59
|
+
EOF
|
60
|
+
end
|
61
|
+
|
62
|
+
def story_ended(title, narrative)
|
63
|
+
@output.puts <<-EOF
|
64
|
+
</dd>
|
65
|
+
</dl>
|
66
|
+
EOF
|
67
|
+
end
|
68
|
+
|
69
|
+
def scenario_started(story_title, scenario_name)
|
70
|
+
@output.puts <<-EOF
|
71
|
+
<dl class="passed">
|
72
|
+
<dt>Scenario: #{h scenario_name}</dt>
|
73
|
+
<dd>
|
74
|
+
<ul class="steps">
|
75
|
+
EOF
|
76
|
+
end
|
77
|
+
|
78
|
+
def scenario_ended
|
79
|
+
@output.puts <<-EOF
|
80
|
+
</ul>
|
81
|
+
</dd>
|
82
|
+
</dl>
|
83
|
+
EOF
|
84
|
+
end
|
85
|
+
|
86
|
+
def found_scenario(type, description)
|
87
|
+
end
|
88
|
+
|
89
|
+
def scenario_succeeded(story_title, scenario_name)
|
90
|
+
scenario_ended
|
91
|
+
end
|
92
|
+
|
93
|
+
def scenario_pending(story_title, scenario_name, reason)
|
94
|
+
scenario_ended
|
95
|
+
end
|
96
|
+
|
97
|
+
def scenario_failed(story_title, scenario_name, err)
|
98
|
+
scenario_ended
|
99
|
+
end
|
100
|
+
|
101
|
+
def step_succeeded(type, description, *args)
|
102
|
+
print_step('passed', type, description, *args) # TODO: uses succeeded CSS class
|
103
|
+
end
|
104
|
+
|
105
|
+
def step_pending(type, description, *args)
|
106
|
+
print_step('pending', type, description, *args)
|
107
|
+
end
|
108
|
+
|
109
|
+
def step_failed(type, description, *args)
|
110
|
+
print_step('failed', type, description, *args)
|
111
|
+
end
|
112
|
+
|
113
|
+
def print_step(klass, type, description, *args)
|
114
|
+
spans = args.map { |arg| "<span class=\"param\">#{arg}</span>" }
|
115
|
+
i = -1
|
116
|
+
inner = type.to_s.capitalize + ' ' + description.gsub(::Spec::Story::Step::PARAM_PATTERN) { |param| spans[i+=1] }
|
117
|
+
@output.puts " <li class=\"#{klass}\">#{inner}</li>"
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'spec/runner/formatter/base_text_formatter'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
module Formatter
|
6
|
+
module Story
|
7
|
+
class PlainTextFormatter < BaseTextFormatter
|
8
|
+
def initialize(options, where)
|
9
|
+
super
|
10
|
+
@successful_scenario_count = 0
|
11
|
+
@pending_scenario_count = 0
|
12
|
+
@failed_scenarios = []
|
13
|
+
@pending_steps = []
|
14
|
+
@previous_type = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def run_started(count)
|
18
|
+
@count = count
|
19
|
+
@output.puts "Running #@count scenarios\n\n"
|
20
|
+
end
|
21
|
+
|
22
|
+
def story_started(title, narrative)
|
23
|
+
@output.puts "Story: #{title}\n\n"
|
24
|
+
narrative.each_line do |line|
|
25
|
+
@output.print " "
|
26
|
+
@output.print line
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def story_ended(title, narrative)
|
31
|
+
@output.puts
|
32
|
+
@output.puts
|
33
|
+
end
|
34
|
+
|
35
|
+
def scenario_started(story_title, scenario_name)
|
36
|
+
@scenario_already_failed = false
|
37
|
+
@output.print "\n\n Scenario: #{scenario_name}"
|
38
|
+
@scenario_ok = true
|
39
|
+
end
|
40
|
+
|
41
|
+
def scenario_succeeded(story_title, scenario_name)
|
42
|
+
@successful_scenario_count += 1
|
43
|
+
end
|
44
|
+
|
45
|
+
def scenario_failed(story_title, scenario_name, err)
|
46
|
+
@failed_scenarios << [story_title, scenario_name, err] unless @scenario_already_failed
|
47
|
+
@scenario_already_failed = true
|
48
|
+
end
|
49
|
+
|
50
|
+
def scenario_pending(story_title, scenario_name, msg)
|
51
|
+
@pending_steps << [story_title, scenario_name, msg]
|
52
|
+
@pending_scenario_count += 1 unless @scenario_already_failed
|
53
|
+
@scenario_already_failed = true
|
54
|
+
end
|
55
|
+
|
56
|
+
def run_ended
|
57
|
+
@output.puts "#@count scenarios: #@successful_scenario_count succeeded, #{@failed_scenarios.size} failed, #@pending_scenario_count pending"
|
58
|
+
unless @pending_steps.empty?
|
59
|
+
@output.puts "\nPending Steps:"
|
60
|
+
@pending_steps.each_with_index do |pending, i|
|
61
|
+
title, scenario_name, msg = pending
|
62
|
+
@output.puts "#{i+1}) #{title} (#{scenario_name}): #{msg}"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
unless @failed_scenarios.empty?
|
66
|
+
@output.print "\nFAILURES:"
|
67
|
+
@failed_scenarios.each_with_index do |failure, i|
|
68
|
+
title, scenario_name, err = failure
|
69
|
+
@output.print %[
|
70
|
+
#{i+1}) #{title} (#{scenario_name}) FAILED
|
71
|
+
#{err.class}: #{err.message}
|
72
|
+
#{err.backtrace.join("\n")}
|
73
|
+
]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def step_succeeded(type, description, *args)
|
79
|
+
found_step(type, description, false, *args)
|
80
|
+
end
|
81
|
+
|
82
|
+
def step_pending(type, description, *args)
|
83
|
+
found_step(type, description, false, *args)
|
84
|
+
@output.print " (PENDING)"
|
85
|
+
@scenario_ok = false
|
86
|
+
end
|
87
|
+
|
88
|
+
def step_failed(type, description, *args)
|
89
|
+
found_step(type, description, true, *args)
|
90
|
+
@output.print red(@scenario_ok ? " (FAILED)" : " (SKIPPED)")
|
91
|
+
@scenario_ok = false
|
92
|
+
end
|
93
|
+
|
94
|
+
def collected_steps(steps)
|
95
|
+
end
|
96
|
+
|
97
|
+
def method_missing(sym, *args, &block) #:nodoc:
|
98
|
+
# noop - ignore unknown messages
|
99
|
+
end
|
100
|
+
|
101
|
+
private
|
102
|
+
|
103
|
+
def found_step(type, description, failed, *args)
|
104
|
+
text = if(type == @previous_type)
|
105
|
+
"\n And "
|
106
|
+
else
|
107
|
+
"\n\n #{type.to_s.capitalize} "
|
108
|
+
end
|
109
|
+
i = -1
|
110
|
+
text << description.gsub(::Spec::Story::Step::PARAM_PATTERN) { |param| args[i+=1] }
|
111
|
+
@output.print(failed ? red(text) : green(text))
|
112
|
+
|
113
|
+
if type == :'given scenario'
|
114
|
+
@previous_type = :given
|
115
|
+
else
|
116
|
+
@previous_type = type
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|