rspec 1.1.3 → 1.1.4
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 +35 -0
- data/MIT-LICENSE +1 -1
- data/README +9 -44
- data/Rakefile +34 -51
- data/TODO +0 -1
- data/UPGRADE +0 -24
- data/bin/spec +0 -0
- data/bin/spec_translator +0 -0
- data/examples/pure/behave_as_example.rb +0 -0
- data/examples/pure/partial_mock_example.rb +1 -0
- data/examples/stories/calculator.rb +1 -1
- data/lib/autotest/rspec.rb +7 -9
- data/lib/spec/example.rb +1 -1
- data/lib/spec/example/configuration.rb +30 -16
- data/lib/spec/example/example_group.rb +2 -1
- data/lib/spec/example/example_group_factory.rb +23 -21
- data/lib/spec/example/example_group_methods.rb +18 -5
- data/lib/spec/example/example_matcher.rb +0 -0
- data/lib/spec/example/example_methods.rb +6 -0
- data/lib/spec/example/module_inclusion_warnings.rb +37 -0
- data/lib/spec/expectations/differs/default.rb +1 -1
- data/lib/spec/expectations/extensions/object.rb +4 -12
- data/lib/spec/expectations/handler.rb +8 -0
- data/lib/spec/extensions.rb +1 -0
- data/lib/spec/extensions/metaclass.rb +7 -0
- data/lib/spec/extensions/object.rb +0 -4
- data/lib/spec/matchers/change.rb +1 -1
- data/lib/spec/matchers/has.rb +1 -11
- data/lib/spec/matchers/operator_matcher.rb +0 -0
- data/lib/spec/matchers/raise_error.rb +53 -30
- data/lib/spec/mocks.rb +1 -1
- data/lib/spec/mocks/argument_constraint_matchers.rb +5 -1
- data/lib/spec/mocks/argument_expectation.rb +26 -0
- data/lib/spec/mocks/extensions.rb +1 -0
- data/lib/spec/mocks/framework.rb +15 -0
- data/lib/spec/mocks/message_expectation.rb +29 -5
- data/lib/spec/mocks/mock.rb +9 -7
- data/lib/spec/mocks/proxy.rb +26 -12
- data/lib/spec/rake/spectask.rb +5 -5
- data/lib/spec/runner/backtrace_tweaker.rb +1 -1
- data/lib/spec/runner/formatter/base_formatter.rb +2 -3
- data/lib/spec/runner/formatter/base_text_formatter.rb +2 -2
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +4 -8
- data/lib/spec/runner/formatter/html_formatter.rb +18 -14
- data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
- data/lib/spec/runner/formatter/profile_formatter.rb +4 -0
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +5 -1
- data/lib/spec/runner/formatter/specdoc_formatter.rb +1 -1
- data/lib/spec/runner/formatter/story/plain_text_formatter.rb +18 -7
- data/lib/spec/runner/option_parser.rb +17 -15
- data/lib/spec/runner/options.rb +37 -14
- data/lib/spec/runner/reporter.rb +15 -11
- data/lib/spec/story/extensions/regexp.rb +2 -2
- data/lib/spec/story/extensions/string.rb +2 -2
- data/lib/spec/story/runner.rb +9 -5
- data/lib/spec/story/runner/plain_text_story_runner.rb +2 -2
- data/lib/spec/story/runner/scenario_runner.rb +8 -0
- data/lib/spec/story/runner/story_mediator.rb +1 -1
- data/lib/spec/story/runner/story_runner.rb +3 -1
- data/lib/spec/story/step.rb +4 -4
- data/lib/spec/story/story.rb +8 -11
- data/lib/spec/story/world.rb +0 -1
- data/lib/spec/version.rb +2 -2
- data/plugins/mock_frameworks/rspec.rb +2 -0
- data/spec/autotest/rspec_spec.rb +12 -10
- data/spec/spec/example/configuration_spec.rb +0 -0
- data/spec/spec/example/example_group/described_module_spec.rb +20 -0
- data/spec/spec/example/example_group/warning_messages_spec.rb +76 -0
- data/spec/spec/example/example_group_factory_spec.rb +117 -102
- data/spec/spec/example/example_group_methods_spec.rb +51 -17
- data/spec/spec/example/example_group_spec.rb +13 -1
- data/spec/spec/example/example_methods_spec.rb +28 -6
- data/spec/spec/example/nested_example_group_spec.rb +12 -0
- data/spec/spec/example/predicate_matcher_spec.rb +0 -0
- data/spec/spec/expectations/differs/default_spec.rb +27 -9
- data/spec/spec/matchers/be_spec.rb +24 -0
- data/spec/spec/matchers/has_spec.rb +16 -0
- data/spec/spec/matchers/raise_error_spec.rb +124 -0
- data/spec/spec/mocks/{bug_report_10263.rb → bug_report_10263_spec.rb} +0 -0
- data/spec/spec/mocks/bug_report_11545_spec.rb +2 -0
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +8 -0
- data/spec/spec/mocks/hash_including_matcher_spec.rb +32 -0
- data/spec/spec/mocks/mock_spec.rb +56 -37
- data/spec/spec/mocks/partial_mock_spec.rb +41 -5
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +6 -0
- data/spec/spec/runner/execution_context_spec.rb +7 -1
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +3 -2
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +30 -25
- data/spec/spec/runner/formatter/html_formatter_spec.rb +0 -3
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +333 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +12 -2
- data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +2 -2
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +110 -78
- data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +105 -1
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +33 -28
- data/spec/spec/runner/option_parser_spec.rb +65 -49
- data/spec/spec/runner/options_spec.rb +103 -17
- data/spec/spec/runner/reporter_spec.rb +10 -7
- data/spec/spec/runner/spec_drb.opts +1 -0
- data/spec/spec/runner/spec_parser_spec.rb +10 -4
- data/spec/spec/story/runner/plain_text_story_runner_spec.rb +14 -13
- data/spec/spec/story/runner/scenario_runner_spec.rb +124 -52
- data/spec/spec/story/runner/story_mediator_spec.rb +2 -2
- data/spec/spec/story/runner/story_runner_spec.rb +40 -2
- data/spec/spec/story/runner_spec.rb +59 -72
- data/spec/spec/story/step_spec.rb +20 -1
- data/spec/spec/story/story_spec.rb +2 -2
- data/stories/all.rb +1 -1
- data/stories/example_groups/stories.rb +4 -3
- data/stories/mock_framework_integration/stories.rb +7 -0
- data/stories/mock_framework_integration/use_flexmock.story +9 -0
- data/stories/resources/spec/spec_with_flexmock.rb +18 -0
- metadata +21 -18
- data/pre_commit/lib/pre_commit.rb +0 -4
- data/pre_commit/lib/pre_commit/core.rb +0 -50
- data/pre_commit/lib/pre_commit/pre_commit.rb +0 -54
- data/pre_commit/lib/pre_commit/rspec.rb +0 -111
- data/pre_commit/lib/pre_commit/rspec_on_rails.rb +0 -313
- data/pre_commit/spec/pre_commit/pre_commit_spec.rb +0 -15
- data/pre_commit/spec/pre_commit/rspec_on_rails_spec.rb +0 -36
- data/pre_commit/spec/spec_helper.rb +0 -3
- data/pre_commit/spec/spec_suite.rb +0 -11
data/lib/spec/story/runner.rb
CHANGED
|
@@ -10,16 +10,17 @@ module Spec
|
|
|
10
10
|
module Runner
|
|
11
11
|
class << self
|
|
12
12
|
def run_options # :nodoc:
|
|
13
|
-
|
|
13
|
+
rspec_options
|
|
14
|
+
# @run_options ||= ::Spec::Runner::OptionParser.parse(ARGV, $stderr, $stdout)
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def story_runner # :nodoc:
|
|
17
18
|
unless @story_runner
|
|
18
|
-
@story_runner =
|
|
19
|
+
@story_runner = create_story_runner
|
|
19
20
|
run_options.story_formatters.each do |formatter|
|
|
20
21
|
register_listener(formatter)
|
|
21
22
|
end
|
|
22
|
-
|
|
23
|
+
self.register_exit_hook
|
|
23
24
|
end
|
|
24
25
|
@story_runner
|
|
25
26
|
end
|
|
@@ -32,6 +33,10 @@ module Spec
|
|
|
32
33
|
@world_creator ||= World
|
|
33
34
|
end
|
|
34
35
|
|
|
36
|
+
def create_story_runner
|
|
37
|
+
StoryRunner.new(scenario_runner, world_creator)
|
|
38
|
+
end
|
|
39
|
+
|
|
35
40
|
# Use this to register a customer output formatter.
|
|
36
41
|
def register_listener(listener)
|
|
37
42
|
story_runner.add_listener(listener) # run_started, story_started, story_ended, #run_ended
|
|
@@ -41,9 +46,8 @@ module Spec
|
|
|
41
46
|
|
|
42
47
|
def register_exit_hook # :nodoc:
|
|
43
48
|
at_exit do
|
|
44
|
-
Runner.story_runner.run_stories unless $!
|
|
49
|
+
exit Runner.story_runner.run_stories unless $!
|
|
45
50
|
end
|
|
46
|
-
# TODO exit with non-zero status if run fails
|
|
47
51
|
end
|
|
48
52
|
|
|
49
53
|
def dry_run
|
|
@@ -26,9 +26,9 @@ module Spec
|
|
|
26
26
|
@story_file = path
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
def run
|
|
29
|
+
def run(story_runner=Spec::Story::Runner.story_runner)
|
|
30
30
|
raise "You must set a path to the file with the story. See the RDoc." if @story_file.nil?
|
|
31
|
-
mediator = Spec::Story::Runner::StoryMediator.new(steps,
|
|
31
|
+
mediator = Spec::Story::Runner::StoryMediator.new(steps, story_runner, @options)
|
|
32
32
|
parser = Spec::Story::Runner::StoryParser.new(mediator)
|
|
33
33
|
|
|
34
34
|
story_text = File.read(@story_file)
|
|
@@ -11,6 +11,12 @@ module Spec
|
|
|
11
11
|
run_story_ignoring_scenarios(scenario.story, world)
|
|
12
12
|
|
|
13
13
|
world.start_collecting_errors
|
|
14
|
+
|
|
15
|
+
unless scenario.body
|
|
16
|
+
@listeners.each { |l| l.scenario_pending(scenario.story.title, scenario.name, '') }
|
|
17
|
+
return true
|
|
18
|
+
end
|
|
19
|
+
|
|
14
20
|
world.instance_eval(&scenario.body)
|
|
15
21
|
if world.errors.empty?
|
|
16
22
|
@listeners.each { |l| l.scenario_succeeded(scenario.story.title, scenario.name) }
|
|
@@ -19,8 +25,10 @@ module Spec
|
|
|
19
25
|
@listeners.each { |l| l.scenario_pending(scenario.story.title, scenario.name, e.message) }
|
|
20
26
|
else
|
|
21
27
|
@listeners.each { |l| l.scenario_failed(scenario.story.title, scenario.name, e) }
|
|
28
|
+
return false
|
|
22
29
|
end
|
|
23
30
|
end
|
|
31
|
+
true
|
|
24
32
|
end
|
|
25
33
|
|
|
26
34
|
def add_listener(listener)
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
title = @title
|
|
65
65
|
narrative = @narrative
|
|
66
66
|
scenarios = @scenarios.collect { |scenario| scenario.to_proc }
|
|
67
|
-
options = @options.merge(:
|
|
67
|
+
options = @options.merge(:steps_for => @step_group)
|
|
68
68
|
lambda do
|
|
69
69
|
Story title, narrative, options do
|
|
70
70
|
scenarios.each { |scenario| instance_eval(&scenario) }
|
|
@@ -36,6 +36,7 @@ module Spec
|
|
|
36
36
|
def run_stories
|
|
37
37
|
return if @stories.empty?
|
|
38
38
|
@listeners.each { |l| l.run_started(scenarios.size) }
|
|
39
|
+
success = true
|
|
39
40
|
@stories.each do |story|
|
|
40
41
|
story.assign_steps_to(World)
|
|
41
42
|
@current_story = story
|
|
@@ -45,7 +46,7 @@ module Spec
|
|
|
45
46
|
type = story[:type] || Object
|
|
46
47
|
args = story[:args] || []
|
|
47
48
|
world = @world_creator.create(type, *args)
|
|
48
|
-
@scenario_runner.run(scenario, world)
|
|
49
|
+
success = success & @scenario_runner.run(scenario, world)
|
|
49
50
|
end
|
|
50
51
|
@listeners.each { |l| l.story_ended(story.title, story.narrative) }
|
|
51
52
|
World.step_mother.clear
|
|
@@ -53,6 +54,7 @@ module Spec
|
|
|
53
54
|
unique_steps = (World.step_names.collect {|n| Regexp === n ? n.source : n.to_s}).uniq.sort
|
|
54
55
|
@listeners.each { |l| l.collected_steps(unique_steps) }
|
|
55
56
|
@listeners.each { |l| l.run_ended }
|
|
57
|
+
return success
|
|
56
58
|
end
|
|
57
59
|
|
|
58
60
|
def add_listener(listener)
|
data/lib/spec/story/step.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
module Spec
|
|
2
2
|
module Story
|
|
3
3
|
class Step
|
|
4
|
-
PARAM_PATTERN = /(
|
|
5
|
-
PARAM_OR_GROUP_PATTERN = /(
|
|
4
|
+
PARAM_PATTERN = /([^\\]|^)(\$(?!\$)\w*)/
|
|
5
|
+
PARAM_OR_GROUP_PATTERN = /(\$(?!\$)\w*)|\(.*?\)/
|
|
6
6
|
|
|
7
7
|
attr_reader :name
|
|
8
8
|
def initialize(name, &block)
|
|
@@ -48,11 +48,11 @@ module Spec
|
|
|
48
48
|
expression = string_or_regexp.source
|
|
49
49
|
end
|
|
50
50
|
while expression =~ PARAM_PATTERN
|
|
51
|
-
expression.gsub!($
|
|
51
|
+
expression.gsub!($2, "(.*?)")
|
|
52
52
|
end
|
|
53
53
|
@expression = Regexp.new("^#{expression}$")
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
|
-
end
|
|
58
|
+
end
|
data/lib/spec/story/story.rb
CHANGED
|
@@ -19,17 +19,14 @@ module Spec
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def assign_steps_to(assignee)
|
|
22
|
-
if
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
end
|
|
31
|
-
keys.each do |key|
|
|
32
|
-
assignee.use(steps_for(key))
|
|
22
|
+
if steps=@params[:steps_for]
|
|
23
|
+
steps = [steps] unless steps.is_a?(Array)
|
|
24
|
+
steps.each do |step|
|
|
25
|
+
if step.is_a?(StepGroup)
|
|
26
|
+
assignee.use(step)
|
|
27
|
+
else
|
|
28
|
+
assignee.use(steps_for(step))
|
|
29
|
+
end
|
|
33
30
|
end
|
|
34
31
|
end
|
|
35
32
|
end
|
data/lib/spec/story/world.rb
CHANGED
data/lib/spec/version.rb
CHANGED
|
@@ -3,10 +3,10 @@ module Spec
|
|
|
3
3
|
unless defined? MAJOR
|
|
4
4
|
MAJOR = 1
|
|
5
5
|
MINOR = 1
|
|
6
|
-
TINY =
|
|
6
|
+
TINY = 4
|
|
7
7
|
RELEASE_CANDIDATE = nil
|
|
8
8
|
|
|
9
|
-
BUILD_TIME_UTC =
|
|
9
|
+
BUILD_TIME_UTC = 20080526202855
|
|
10
10
|
|
|
11
11
|
STRING = [MAJOR, MINOR, TINY].join('.')
|
|
12
12
|
TAG = "REL_#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('_')}".upcase.gsub(/\.|-/, '_')
|
data/spec/autotest/rspec_spec.rb
CHANGED
|
@@ -49,7 +49,7 @@ HERE
|
|
|
49
49
|
describe Rspec, "selection of rspec command" do
|
|
50
50
|
include AutotestHelper
|
|
51
51
|
|
|
52
|
-
before
|
|
52
|
+
before(:each) do
|
|
53
53
|
common_setup
|
|
54
54
|
@rspec_autotest = Rspec.new
|
|
55
55
|
end
|
|
@@ -83,7 +83,7 @@ HERE
|
|
|
83
83
|
describe Rspec, "selection of rspec command (windows compatibility issues)" do
|
|
84
84
|
include AutotestHelper
|
|
85
85
|
|
|
86
|
-
before
|
|
86
|
+
before(:each) do
|
|
87
87
|
common_setup
|
|
88
88
|
end
|
|
89
89
|
|
|
@@ -104,7 +104,7 @@ HERE
|
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
describe Rspec, "adding spec.opts --options" do
|
|
107
|
-
before
|
|
107
|
+
before(:each) do
|
|
108
108
|
@rspec_autotest = Rspec.new
|
|
109
109
|
end
|
|
110
110
|
|
|
@@ -120,7 +120,7 @@ HERE
|
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
describe Rspec do
|
|
123
|
-
before
|
|
123
|
+
before(:each) do
|
|
124
124
|
@rspec_autotest = Rspec.new
|
|
125
125
|
@rspec_autotest.stub!(:ruby).and_return "ruby"
|
|
126
126
|
@rspec_autotest.stub!(:add_options_if_present).and_return "-O spec/spec.opts"
|
|
@@ -167,11 +167,11 @@ HERE
|
|
|
167
167
|
describe Rspec, "consolidating failures" do
|
|
168
168
|
include AutotestHelper
|
|
169
169
|
|
|
170
|
-
before
|
|
170
|
+
before(:each) do
|
|
171
171
|
common_setup
|
|
172
172
|
@rspec_autotest = Rspec.new
|
|
173
173
|
|
|
174
|
-
@spec_file = "
|
|
174
|
+
@spec_file = "spec/autotest/rspec_spec.rb"
|
|
175
175
|
@rspec_autotest.instance_variable_set("@files", {@spec_file => Time.now})
|
|
176
176
|
@rspec_autotest.stub!(:find_files_to_test).and_return true
|
|
177
177
|
end
|
|
@@ -181,14 +181,16 @@ HERE
|
|
|
181
181
|
end
|
|
182
182
|
|
|
183
183
|
it "should return a hash with the spec filename => spec name for each failure or error" do
|
|
184
|
-
@rspec_autotest.stub!(:test_files_for).and_return "
|
|
185
|
-
|
|
184
|
+
@rspec_autotest.stub!(:test_files_for).and_return "spec/autotest/rspec_spec.rb"
|
|
185
|
+
failures = [
|
|
186
186
|
[
|
|
187
187
|
"false should be false",
|
|
188
|
-
"expected: true,\n got: false (using ==)\n
|
|
188
|
+
"expected: true,\n got: false (using ==)\n#{@spec_file}:203:"
|
|
189
189
|
]
|
|
190
190
|
]
|
|
191
|
-
@rspec_autotest.consolidate_failures(
|
|
191
|
+
@rspec_autotest.consolidate_failures(failures).should == {
|
|
192
|
+
@spec_file => ["false should be false"]
|
|
193
|
+
}
|
|
192
194
|
end
|
|
193
195
|
|
|
194
196
|
end
|
|
File without changes
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../spec_helper"
|
|
2
|
+
|
|
3
|
+
module Spec
|
|
4
|
+
module Example
|
|
5
|
+
module AModule; end
|
|
6
|
+
class AClass; end
|
|
7
|
+
|
|
8
|
+
describe "With", AModule do
|
|
9
|
+
it "should have the described_type as 'AModule'" do
|
|
10
|
+
self.class.described_module.should == AModule
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe "With", AClass do
|
|
15
|
+
it "should have the described_module as nil" do
|
|
16
|
+
self.class.described_module.should be_nil
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../../spec_helper"
|
|
2
|
+
|
|
3
|
+
module Spec
|
|
4
|
+
module Example
|
|
5
|
+
module AModuleAutomaticallyIncluded
|
|
6
|
+
def call_method
|
|
7
|
+
@method_called = true
|
|
8
|
+
return "a string"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def method_called?
|
|
12
|
+
@method_called ? true : false
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "Including modules in an example group" do
|
|
17
|
+
describe AModuleAutomaticallyIncluded do
|
|
18
|
+
before :each do
|
|
19
|
+
Kernel.stub!(:warn)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should return the correct values" do
|
|
23
|
+
self.method_called?.should be_false
|
|
24
|
+
self.call_method.should eql("a string")
|
|
25
|
+
self.method_called?.should be_true
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should respond_to? the methods from the module" do
|
|
29
|
+
self.should respond_to(:method_called?)
|
|
30
|
+
self.should respond_to(:call_method)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should not respond_to? methods which do not come from the module (or are in Spec::ExampleGroup)" do
|
|
34
|
+
self.should_not respond_to(:adsfadfadadf_a_method_which_does_not_exist)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should respond_to? a method in Spec::ExampleGroup" do
|
|
38
|
+
self.should respond_to(:describe)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should issue a warning with Kernel.warn" do
|
|
42
|
+
Kernel.should_receive(:warn)
|
|
43
|
+
self.call_method
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should issue a warning when the example calls the method which is automatically included" do
|
|
47
|
+
Kernel.should_receive(:warn).with("Modules will no longer be automatically included in RSpec version 1.1.4. Called from #{__FILE__}:#{__LINE__+1}")
|
|
48
|
+
self.method_called?
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should issue a warning with the correct file and line numbers" do
|
|
52
|
+
Kernel.should_receive(:warn).with("Modules will no longer be automatically included in RSpec version 1.1.4. Called from #{__FILE__}:#{__LINE__+1}")
|
|
53
|
+
self.method_called?
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe AModuleAutomaticallyIncluded, "which is also manually included" do
|
|
58
|
+
include AModuleAutomaticallyIncluded
|
|
59
|
+
|
|
60
|
+
before :each do
|
|
61
|
+
Kernel.stub!(:warn)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should respond to the methods since it is included" do
|
|
65
|
+
self.should respond_to(:method_called?)
|
|
66
|
+
self.should respond_to(:call_method)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should not issue a warning, since the module is manually included" do
|
|
70
|
+
Kernel.should_not_receive(:warn)
|
|
71
|
+
self.method_called?
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -1,128 +1,143 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
2
|
|
|
3
3
|
module Spec
|
|
4
4
|
module Example
|
|
5
|
-
describe ExampleGroupFactory
|
|
5
|
+
describe ExampleGroupFactory do
|
|
6
|
+
describe "#get" do
|
|
7
|
+
attr_reader :example_group
|
|
8
|
+
before do
|
|
9
|
+
@example_group = Class.new(ExampleGroup)
|
|
10
|
+
ExampleGroupFactory.register(:registered_type, @example_group)
|
|
11
|
+
end
|
|
6
12
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
end
|
|
13
|
+
after do
|
|
14
|
+
ExampleGroupFactory.reset
|
|
15
|
+
end
|
|
11
16
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
it "should #get the default ExampleGroup type when passed nil" do
|
|
18
|
+
ExampleGroupFactory.get(nil).should == ExampleGroup
|
|
19
|
+
end
|
|
15
20
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
it "should #get the default ExampleGroup for unregistered non-nil values" do
|
|
22
|
+
ExampleGroupFactory.get(:does_not_exist).should == ExampleGroup
|
|
23
|
+
end
|
|
19
24
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
it "should #get custom type for :registered_type" do
|
|
26
|
+
ExampleGroupFactory.get(:registered_type).should == @example_group
|
|
27
|
+
end
|
|
23
28
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
it "should #get the actual type when that is passed in" do
|
|
30
|
+
ExampleGroupFactory.get(@example_group).should == @example_group
|
|
31
|
+
end
|
|
27
32
|
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
it "should get the custom type after setting the default" do
|
|
34
|
+
@example_group2 = Class.new(ExampleGroup)
|
|
35
|
+
ExampleGroupFactory.default(@example_group2)
|
|
36
|
+
ExampleGroupFactory.get(:registered_type).should == @example_group
|
|
37
|
+
end
|
|
30
38
|
end
|
|
31
39
|
|
|
32
|
-
|
|
40
|
+
describe "#create_example_group" do
|
|
41
|
+
attr_reader :parent_example_group
|
|
42
|
+
before do
|
|
43
|
+
@parent_example_group = Class.new(ExampleGroup) do
|
|
44
|
+
def initialize(*args, &block)
|
|
45
|
+
;
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
33
49
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
end
|
|
50
|
+
it "should create a uniquely named class" do
|
|
51
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {}
|
|
52
|
+
example_group.name.should =~ /Spec::Example::ExampleGroup::Subclass_\d+/
|
|
53
|
+
end
|
|
39
54
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
55
|
+
it "should create a Spec::Example::Example subclass by default" do
|
|
56
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {}
|
|
57
|
+
example_group.superclass.should == Spec::Example::ExampleGroup
|
|
58
|
+
end
|
|
44
59
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
60
|
+
describe "when :type => :default" do
|
|
61
|
+
it "should create a Spec::Example::Example" do
|
|
62
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
|
63
|
+
"example_group", :type => :default
|
|
64
|
+
) {}
|
|
65
|
+
example_group.superclass.should == Spec::Example::ExampleGroup
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should create a Spec::Example::Example" do
|
|
69
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
|
70
|
+
"example_group", :type => :default
|
|
71
|
+
) {}
|
|
72
|
+
example_group.superclass.should == Spec::Example::ExampleGroup
|
|
73
|
+
end
|
|
74
|
+
end
|
|
51
75
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
76
|
+
describe "when :type => :something_other_than_default" do
|
|
77
|
+
it "should create specified type" do
|
|
78
|
+
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
|
|
79
|
+
non_default_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
|
80
|
+
"example_group", :type => :something_other_than_default
|
|
81
|
+
) {}
|
|
82
|
+
non_default_example_group.superclass.should == parent_example_group
|
|
83
|
+
end
|
|
84
|
+
end
|
|
58
85
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
86
|
+
it "should create a type indicated by :spec_path" do
|
|
87
|
+
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
|
|
88
|
+
custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
|
89
|
+
"example_group", :spec_path => "./spec/something_other_than_default/some_spec.rb"
|
|
90
|
+
) {}
|
|
91
|
+
custom_example_group.superclass.should == parent_example_group
|
|
62
92
|
end
|
|
63
|
-
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass)
|
|
64
|
-
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
|
65
|
-
"example_group", :type => :something_other_than_default
|
|
66
|
-
) {}
|
|
67
|
-
example_group.superclass.should == klass
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should create a type indicated by :spec_path" do
|
|
71
|
-
klass = Class.new(ExampleGroup) do
|
|
72
|
-
def initialize(*args, &block); end
|
|
73
|
-
end
|
|
74
|
-
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass)
|
|
75
|
-
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
|
76
|
-
"example_group", :spec_path => "./spec/something_other_than_default/some_spec.rb"
|
|
77
|
-
) {}
|
|
78
|
-
example_group.superclass.should == klass
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "should create a type indicated by :spec_path (with spec_path generated by caller on windows)" do
|
|
82
|
-
klass = Class.new(ExampleGroup) do
|
|
83
|
-
def initialize(*args, &block); end
|
|
84
|
-
end
|
|
85
|
-
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass)
|
|
86
|
-
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
|
87
|
-
"example_group", :spec_path => "./spec\\something_other_than_default\\some_spec.rb"
|
|
88
|
-
) {}
|
|
89
|
-
example_group.superclass.should == klass
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "should create and register a Spec::Example::Example if :shared => true" do
|
|
93
|
-
shared_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
|
94
|
-
"name", :spec_path => '/blah/spec/models/blah.rb', :type => :controller, :shared => true
|
|
95
|
-
) {}
|
|
96
|
-
shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
|
|
97
|
-
SharedExampleGroup.shared_example_groups.should include(shared_example_group)
|
|
98
|
-
end
|
|
99
93
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
94
|
+
it "should create a type indicated by :spec_path (with spec_path generated by caller on windows)" do
|
|
95
|
+
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
|
|
96
|
+
custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
|
97
|
+
"example_group",
|
|
98
|
+
:spec_path => "./spec\\something_other_than_default\\some_spec.rb"
|
|
99
|
+
) {}
|
|
100
|
+
custom_example_group.superclass.should == parent_example_group
|
|
103
101
|
end
|
|
104
|
-
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass)
|
|
105
|
-
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
|
106
|
-
"name", :spec_path => '/blah/spec/models/blah.rb', :type => :something_other_than_default
|
|
107
|
-
) {}
|
|
108
|
-
example_group.superclass.should == klass
|
|
109
|
-
end
|
|
110
102
|
|
|
111
|
-
|
|
112
|
-
|
|
103
|
+
describe "when :shared => true" do
|
|
104
|
+
attr_reader :shared_example_group
|
|
105
|
+
before do
|
|
106
|
+
@shared_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
|
107
|
+
"name", :spec_path => '/blah/spec/models/blah.rb', :type => :controller, :shared => true
|
|
108
|
+
) {}
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "should create and register a Spec::Example::Example" do
|
|
112
|
+
shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
|
|
113
|
+
SharedExampleGroup.shared_example_groups.should include(shared_example_group)
|
|
114
|
+
end
|
|
113
115
|
end
|
|
114
|
-
rspec_options.example_groups.should include(example_group)
|
|
115
|
-
end
|
|
116
116
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
it "should favor the :type over the :spec_path" do
|
|
118
|
+
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
|
|
119
|
+
custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
|
120
|
+
"name", :spec_path => '/blah/spec/models/blah.rb', :type => :something_other_than_default
|
|
121
|
+
) {}
|
|
122
|
+
custom_example_group.superclass.should == parent_example_group
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "should register ExampleGroup by default" do
|
|
126
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do
|
|
127
|
+
end
|
|
128
|
+
rspec_options.example_groups.should include(example_group)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "should enable unregistering of ExampleGroups" do
|
|
132
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do
|
|
133
|
+
unregister
|
|
134
|
+
end
|
|
135
|
+
rspec_options.example_groups.should_not include(example_group)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
after(:each) do
|
|
139
|
+
Spec::Example::ExampleGroupFactory.reset
|
|
120
140
|
end
|
|
121
|
-
rspec_options.example_groups.should_not include(example_group)
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
after(:each) do
|
|
125
|
-
Spec::Example::ExampleGroupFactory.reset
|
|
126
141
|
end
|
|
127
142
|
end
|
|
128
143
|
end
|