rspec-core 2.5.2 → 2.6.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. data/.travis.yml +7 -0
  2. data/Gemfile +10 -13
  3. data/README.md +4 -1
  4. data/Rakefile +29 -12
  5. data/cucumber.yml +1 -1
  6. data/features/.nav +10 -4
  7. data/features/Autotest.md +31 -7
  8. data/features/Changelog.md +36 -6
  9. data/features/command_line/configure.feature +2 -2
  10. data/features/command_line/example_name_option.feature +10 -10
  11. data/features/command_line/exit_status.feature +4 -4
  12. data/features/command_line/format_option.feature +4 -4
  13. data/features/command_line/line_number_appended_to_path.feature +11 -11
  14. data/features/command_line/line_number_option.feature +2 -2
  15. data/features/command_line/rake_task.feature +3 -3
  16. data/features/command_line/tag.feature +26 -10
  17. data/features/configuration/alias_example_to.feature +48 -0
  18. data/features/configuration/custom_settings.feature +3 -3
  19. data/features/configuration/fail_fast.feature +3 -3
  20. data/features/configuration/read_options_from_file.feature +4 -4
  21. data/features/example_groups/basic_structure.feature +11 -15
  22. data/features/example_groups/shared_context.feature +74 -0
  23. data/features/example_groups/shared_example_group.feature +21 -17
  24. data/features/expectation_framework_integration/configure_expectation_framework.feature +15 -4
  25. data/features/filtering/exclusion_filters.feature +28 -4
  26. data/features/filtering/{implicit_filters.feature → if_and_unless.feature} +9 -7
  27. data/features/filtering/inclusion_filters.feature +26 -3
  28. data/features/filtering/run_all_when_everything_filtered.feature +1 -1
  29. data/features/formatters/custom_formatter.feature +1 -1
  30. data/features/formatters/text_formatter.feature +45 -0
  31. data/features/helper_methods/arbitrary_methods.feature +2 -2
  32. data/features/helper_methods/let.feature +2 -2
  33. data/features/helper_methods/modules.feature +149 -0
  34. data/features/hooks/around_hooks.feature +11 -11
  35. data/features/hooks/before_and_after_hooks.feature +15 -19
  36. data/features/hooks/filtering.feature +160 -124
  37. data/features/metadata/current_example.feature +17 -0
  38. data/features/metadata/described_class.feature +2 -2
  39. data/features/metadata/user_defined.feature +111 -0
  40. data/features/mock_framework_integration/use_any_framework.feature +1 -1
  41. data/features/mock_framework_integration/use_flexmock.feature +83 -10
  42. data/features/mock_framework_integration/use_mocha.feature +84 -10
  43. data/features/mock_framework_integration/use_rr.feature +85 -10
  44. data/features/mock_framework_integration/use_rspec.feature +84 -10
  45. data/features/pending/pending_examples.feature +8 -8
  46. data/features/spec_files/arbitrary_file_suffix.feature +1 -1
  47. data/features/step_definitions/additional_cli_steps.rb +11 -1
  48. data/features/subject/attribute_of_subject.feature +24 -4
  49. data/features/subject/explicit_subject.feature +5 -5
  50. data/features/subject/implicit_receiver.feature +2 -2
  51. data/features/subject/implicit_subject.feature +2 -2
  52. data/features/support/env.rb +6 -1
  53. data/lib/rspec/core.rb +22 -0
  54. data/lib/rspec/core/backward_compatibility.rb +12 -2
  55. data/lib/rspec/core/command_line.rb +1 -4
  56. data/lib/rspec/core/configuration.rb +25 -17
  57. data/lib/rspec/core/configuration_options.rb +6 -23
  58. data/lib/rspec/core/drb_command_line.rb +5 -11
  59. data/lib/rspec/core/example.rb +29 -21
  60. data/lib/rspec/core/example_group.rb +36 -4
  61. data/lib/rspec/core/formatters/base_formatter.rb +6 -0
  62. data/lib/rspec/core/formatters/base_text_formatter.rb +1 -1
  63. data/lib/rspec/core/formatters/helpers.rb +0 -4
  64. data/lib/rspec/core/hooks.rb +14 -4
  65. data/lib/rspec/core/metadata.rb +1 -1
  66. data/lib/rspec/core/metadata_hash_builder.rb +93 -0
  67. data/lib/rspec/core/mocking/with_flexmock.rb +2 -0
  68. data/lib/rspec/core/mocking/with_mocha.rb +2 -0
  69. data/lib/rspec/core/mocking/with_rr.rb +2 -0
  70. data/lib/rspec/core/mocking/with_rspec.rb +3 -1
  71. data/lib/rspec/core/option_parser.rb +5 -2
  72. data/lib/rspec/core/pending.rb +10 -3
  73. data/lib/rspec/core/reporter.rb +2 -2
  74. data/lib/rspec/core/runner.rb +7 -1
  75. data/lib/rspec/core/shared_example_group.rb +18 -4
  76. data/lib/rspec/core/subject.rb +4 -6
  77. data/lib/rspec/core/version.rb +1 -1
  78. data/lib/rspec/core/world.rb +16 -4
  79. data/rspec-core.gemspec +4 -3
  80. data/spec.txt +1126 -0
  81. data/spec/autotest/failed_results_re_spec.rb +2 -2
  82. data/spec/rspec/core/command_line_spec.rb +0 -2
  83. data/spec/rspec/core/configuration_spec.rb +84 -1
  84. data/spec/rspec/core/deprecations_spec.rb +21 -0
  85. data/spec/rspec/core/drb_command_line_spec.rb +3 -11
  86. data/spec/rspec/core/example_group_spec.rb +213 -56
  87. data/spec/rspec/core/example_spec.rb +110 -0
  88. data/spec/rspec/core/formatters/base_formatter_spec.rb +23 -2
  89. data/spec/rspec/core/formatters/base_text_formatter_spec.rb +9 -0
  90. data/spec/rspec/core/formatters/helpers_spec.rb +1 -1
  91. data/spec/rspec/core/formatters/html_formatted-1.8.6.html +5 -5
  92. data/spec/rspec/core/formatters/html_formatted-1.8.7-jruby.html +8 -10
  93. data/spec/rspec/core/formatters/html_formatted-1.8.7.html +5 -5
  94. data/spec/rspec/core/formatters/html_formatted-1.9.1.html +5 -5
  95. data/spec/rspec/core/formatters/html_formatted-1.9.2.html +5 -5
  96. data/spec/rspec/core/formatters/progress_formatter_spec.rb +0 -1
  97. data/spec/rspec/core/formatters/text_mate_formatted-1.8.6.html +5 -5
  98. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-jruby.html +8 -10
  99. data/spec/rspec/core/formatters/text_mate_formatted-1.8.7.html +5 -5
  100. data/spec/rspec/core/formatters/text_mate_formatted-1.9.1.html +5 -5
  101. data/spec/rspec/core/formatters/text_mate_formatted-1.9.2.html +5 -5
  102. data/spec/rspec/core/hooks_spec.rb +86 -0
  103. data/spec/rspec/core/metadata_spec.rb +7 -7
  104. data/spec/rspec/core/option_parser_spec.rb +8 -0
  105. data/spec/rspec/core/pending_example_spec.rb +12 -51
  106. data/spec/rspec/core/reporter_spec.rb +19 -3
  107. data/spec/rspec/core/resources/formatter_specs.rb +7 -1
  108. data/spec/rspec/core/rspec_matchers_spec.rb +45 -0
  109. data/spec/rspec/core/runner_spec.rb +35 -10
  110. data/spec/rspec/core/shared_example_group_spec.rb +57 -21
  111. data/spec/rspec/core/subject_spec.rb +32 -11
  112. data/spec/rspec/core/world_spec.rb +38 -15
  113. data/spec/rspec/core_spec.rb +28 -0
  114. data/spec/spec_helper.rb +22 -2
  115. data/spec/support/matchers.rb +44 -13
  116. data/spec/support/shared_example_groups.rb +41 -0
  117. metadata +39 -16
@@ -1,23 +1,97 @@
1
1
  Feature: mock with rspec
2
2
 
3
- As an RSpec user who likes to mock
4
- I want to be able to use rspec
3
+ RSpec uses its own mocking framework by default, or you can configure it
4
+ explicitly.
5
5
 
6
- Scenario: Mock with rspec
7
- Given a file named "rspec_example_spec.rb" with:
6
+ Scenario: passing message expectation
7
+ Given a file named "example_spec.rb" with:
8
8
  """
9
9
  RSpec.configure do |config|
10
10
  config.mock_framework = :rspec
11
11
  end
12
12
 
13
- describe "plugging in rspec" do
14
- it "allows rspec to be used" do
15
- target = mock('target')
16
- target.should_receive(:foo)
17
- target.foo
13
+ describe "mocking with RSpec" do
14
+ it "passes when it should" do
15
+ receiver = double('receiver')
16
+ receiver.should_receive(:message)
17
+ receiver.message
18
18
  end
19
19
  end
20
20
  """
21
- When I run "rspec ./rspec_example_spec.rb"
21
+ When I run `rspec example_spec.rb`
22
22
  Then the examples should all pass
23
+
24
+ Scenario: failing message expecation
25
+ Given a file named "example_spec.rb" with:
26
+ """
27
+ RSpec.configure do |config|
28
+ config.mock_framework = :rspec
29
+ end
30
+
31
+ describe "mocking with RSpec" do
32
+ it "fails when it should" do
33
+ receiver = double('receiver')
34
+ receiver.should_receive(:message)
35
+ end
36
+ end
37
+ """
38
+ When I run `rspec example_spec.rb`
39
+ Then the output should contain "1 example, 1 failure"
40
+
41
+ Scenario: failing message expectation in pending block (remains pending)
42
+ Given a file named "example_spec.rb" with:
43
+ """
44
+ RSpec.configure do |config|
45
+ config.mock_framework = :rspec
46
+ end
47
+
48
+ describe "failed message expectation in a pending block" do
49
+ it "is listed as pending" do
50
+ pending do
51
+ receiver = double('receiver')
52
+ receiver.should_receive(:message)
53
+ end
54
+ end
55
+ end
56
+ """
57
+ When I run `rspec example_spec.rb`
58
+ Then the output should contain "1 example, 0 failures, 1 pending"
23
59
  And the exit status should be 0
60
+
61
+ Scenario: passing message expectation in pending block (fails)
62
+ Given a file named "example_spec.rb" with:
63
+ """
64
+ RSpec.configure do |config|
65
+ config.mock_framework = :rspec
66
+ end
67
+
68
+ describe "passing message expectation in a pending block" do
69
+ it "fails with FIXED" do
70
+ pending do
71
+ receiver = double('receiver')
72
+ receiver.should_receive(:message)
73
+ receiver.message
74
+ end
75
+ end
76
+ end
77
+ """
78
+ When I run `rspec example_spec.rb`
79
+ Then the output should contain "FIXED"
80
+ Then the output should contain "1 example, 1 failure"
81
+ And the exit status should be 1
82
+
83
+ Scenario: accessing RSpec.configuration.mock_framework.framework_name
84
+ Given a file named "example_spec.rb" with:
85
+ """
86
+ RSpec.configure do |config|
87
+ config.mock_framework = :rspec
88
+ end
89
+
90
+ describe "RSpec.configuration.mock_framework.framework_name" do
91
+ it "returns :rspec" do
92
+ RSpec.configuration.mock_framework.framework_name.should eq(:rspec)
93
+ end
94
+ end
95
+ """
96
+ When I run `rspec example_spec.rb`
97
+ Then the examples should all pass
@@ -10,7 +10,7 @@ Feature: pending examples
10
10
  it "is a pending example"
11
11
  end
12
12
  """
13
- When I run "rspec example_without_block_spec.rb"
13
+ When I run `rspec example_without_block_spec.rb`
14
14
  Then the exit status should be 0
15
15
  And the output should contain "1 example, 0 failures, 1 pending"
16
16
  And the output should contain "Not Yet Implemented"
@@ -26,7 +26,7 @@ Feature: pending examples
26
26
  end
27
27
  end
28
28
  """
29
- When I run "rspec pending_without_block_spec.rb"
29
+ When I run `rspec pending_without_block_spec.rb`
30
30
  Then the exit status should be 0
31
31
  And the output should contain "1 example, 0 failures, 1 pending"
32
32
  And the output should contain:
@@ -48,7 +48,7 @@ Feature: pending examples
48
48
  end
49
49
  end
50
50
  """
51
- When I run "rspec pending_with_failing_block_spec.rb"
51
+ When I run `rspec pending_with_failing_block_spec.rb`
52
52
  Then the exit status should be 0
53
53
  And the output should contain "1 example, 0 failures, 1 pending"
54
54
  And the output should contain:
@@ -70,7 +70,7 @@ Feature: pending examples
70
70
  end
71
71
  end
72
72
  """
73
- When I run "rspec pending_with_passing_block_spec.rb"
73
+ When I run `rspec pending_with_passing_block_spec.rb`
74
74
  Then the exit status should not be 0
75
75
  And the output should contain "1 example, 1 failure"
76
76
  And the output should contain "FIXED"
@@ -86,7 +86,7 @@ Feature: pending examples
86
86
  end
87
87
  end
88
88
  """
89
- When I run "rspec pending_with_xit_spec.rb"
89
+ When I run `rspec pending_with_xit_spec.rb`
90
90
  Then the exit status should be 0
91
91
  And the output should contain "1 example, 0 failures, 1 pending"
92
92
  And the output should contain:
@@ -107,7 +107,7 @@ Feature: pending examples
107
107
  end
108
108
  end
109
109
  """
110
- When I run "rspec pending_with_no_docstring_spec.rb --format documentation"
110
+ When I run `rspec pending_with_no_docstring_spec.rb --format documentation`
111
111
  Then the exit status should be 0
112
112
  And the output should contain "2 examples, 0 failures, 1 pending"
113
113
  And the output should contain:
@@ -129,7 +129,7 @@ Feature: pending examples
129
129
  end
130
130
  end
131
131
  """
132
- When I run "rspec pending_with_no_docstring_spec.rb --format documentation"
132
+ When I run `rspec pending_with_no_docstring_spec.rb --format documentation`
133
133
  Then the exit status should be 0
134
134
  And the output should contain "2 examples, 0 failures, 1 pending"
135
135
  And the output should contain:
@@ -182,7 +182,7 @@ Feature: pending examples
182
182
  end
183
183
  end
184
184
  """
185
- When I run "rspec ./conditionally_pending_spec.rb"
185
+ When I run `rspec ./conditionally_pending_spec.rb`
186
186
  Then the output should contain "8 examples, 4 failures, 2 pending"
187
187
  And the output should contain:
188
188
  """
@@ -9,5 +9,5 @@ Feature: arbitrary file suffix
9
9
  end
10
10
  end
11
11
  """
12
- When I run "rspec a.spec"
12
+ When I run `rspec a.spec`
13
13
  Then the examples should all pass
@@ -6,7 +6,7 @@ end
6
6
 
7
7
  Then /^the output should not contain any of these:$/ do |table|
8
8
  table.raw.flatten.each do |string|
9
- combined_output.should_not =~ compile_and_escape(string)
9
+ all_output.should_not =~ regexp(string)
10
10
  end
11
11
  end
12
12
 
@@ -18,3 +18,13 @@ end
18
18
  Then /^the file "([^"]*)" should contain:$/ do |file, partial_content|
19
19
  check_file_content(file, partial_content, true)
20
20
  end
21
+
22
+ Then /^the backtrace\-normalized output should contain:$/ do |partial_output|
23
+ # ruby 1.9 includes additional stuff in the backtrace,
24
+ # so we need to normalize it to compare it with our expected output.
25
+ normalized_output = all_output.split("\n").map do |line|
26
+ line =~ /(^\s+# [^:]+:\d+)/ ? $1 : line # http://rubular.com/r/zDD7DdWyzF
27
+ end.join("\n")
28
+
29
+ normalized_output.should =~ regexp(partial_output)
30
+ end
@@ -28,7 +28,7 @@ Feature: attribute of subject
28
28
  end
29
29
  end
30
30
  """
31
- When I run "rspec example_spec.rb --format documentation"
31
+ When I run `rspec example_spec.rb --format documentation`
32
32
  Then the output should contain:
33
33
  """
34
34
  Array
@@ -59,7 +59,7 @@ Feature: attribute of subject
59
59
  end
60
60
  end
61
61
  """
62
- When I run "rspec example_spec.rb --format documentation"
62
+ When I run `rspec example_spec.rb --format documentation`
63
63
  Then the output should contain:
64
64
  """
65
65
  Person
@@ -81,7 +81,7 @@ Feature: attribute of subject
81
81
  end
82
82
  end
83
83
  """
84
- When I run "rspec example_spec.rb"
84
+ When I run `rspec example_spec.rb`
85
85
  Then the examples should all pass
86
86
 
87
87
  Scenario: specify value for key in a hash
@@ -98,5 +98,25 @@ Feature: attribute of subject
98
98
  end
99
99
  end
100
100
  """
101
- When I run "rspec example_spec.rb"
101
+ When I run `rspec example_spec.rb`
102
+ Then the examples should all pass
103
+
104
+ Scenario: specify value for key in a hash-like object
105
+ Given a file named "example_spec.rb" with:
106
+ """
107
+ require 'matrix'
108
+
109
+ describe Matrix do
110
+ context "with values [[1, 2], [3, 4]]" do
111
+ subject do
112
+ Matrix[[1, 2], [3, 4]]
113
+ end
114
+
115
+ its([0, 1]) { should eq(2) }
116
+ its([1, 0]) { should eq(3) }
117
+ its([1, 2]) { should be_nil }
118
+ end
119
+ end
120
+ """
121
+ When I run `rspec example_spec.rb`
102
122
  Then the examples should all pass
@@ -13,7 +13,7 @@ Feature: explicit subject
13
13
  end
14
14
  end
15
15
  """
16
- When I run "rspec top_level_subject_spec.rb"
16
+ When I run `rspec top_level_subject_spec.rb`
17
17
  Then the examples should all pass
18
18
 
19
19
  Scenario: subject in a nested group
@@ -28,7 +28,7 @@ Feature: explicit subject
28
28
  end
29
29
  end
30
30
  """
31
- When I run "rspec nested_subject_spec.rb"
31
+ When I run `rspec nested_subject_spec.rb`
32
32
  Then the examples should all pass
33
33
 
34
34
  Scenario: access subject from before block
@@ -42,7 +42,7 @@ Feature: explicit subject
42
42
  end
43
43
  end
44
44
  """
45
- When I run "rspec top_level_subject_spec.rb"
45
+ When I run `rspec top_level_subject_spec.rb`
46
46
  Then the examples should all pass
47
47
 
48
48
  Scenario: invoke helper method from subject block
@@ -58,7 +58,7 @@ Feature: explicit subject
58
58
  end
59
59
  end
60
60
  """
61
- When I run "rspec helper_subject_spec.rb"
61
+ When I run `rspec helper_subject_spec.rb`
62
62
  Then the examples should all pass
63
63
 
64
64
  Scenario: subject block is invoked at most once per example
@@ -74,5 +74,5 @@ Feature: explicit subject
74
74
  end
75
75
  end
76
76
  """
77
- When I run "rspec nil_subject_spec.rb"
77
+ When I run `rspec nil_subject_spec.rb`
78
78
  Then the examples should all pass
@@ -12,7 +12,7 @@ Feature: implicit receiver
12
12
  end
13
13
  end
14
14
  """
15
- When I run "rspec example_spec.rb"
15
+ When I run `rspec example_spec.rb`
16
16
  Then the examples should all pass
17
17
 
18
18
  Scenario: explicit subject
@@ -25,5 +25,5 @@ Feature: implicit receiver
25
25
  end
26
26
  end
27
27
  """
28
- When I run "rspec example_spec.rb"
28
+ When I run `rspec example_spec.rb`
29
29
  Then the examples should all pass
@@ -12,7 +12,7 @@ Feature: implicit subject
12
12
  end
13
13
  end
14
14
  """
15
- When I run "rspec ./top_level_subject_spec.rb"
15
+ When I run `rspec ./top_level_subject_spec.rb`
16
16
  Then the examples should all pass
17
17
 
18
18
  Scenario: subject in a nested group
@@ -26,5 +26,5 @@ Feature: implicit subject
26
26
  end
27
27
  end
28
28
  """
29
- When I run "rspec nested_subject_spec.rb"
29
+ When I run `rspec nested_subject_spec.rb`
30
30
  Then the examples should all pass
@@ -1 +1,6 @@
1
- require 'aruba'
1
+ require 'aruba/cucumber'
2
+
3
+ Before do
4
+ @aruba_timeout_seconds = 3
5
+ end
6
+
@@ -4,6 +4,7 @@ require 'rspec/core/deprecation'
4
4
  require 'rspec/core/backward_compatibility'
5
5
  require 'rspec/core/reporter'
6
6
 
7
+ require 'rspec/core/metadata_hash_builder'
7
8
  require 'rspec/core/hooks'
8
9
  require 'rspec/core/subject'
9
10
  require 'rspec/core/let'
@@ -53,12 +54,33 @@ module RSpec
53
54
  end
54
55
 
55
56
  def self.configure
57
+ warn_about_deprecated_configure if RSpec.world.example_groups.any?
56
58
  yield configuration if block_given?
57
59
  end
58
60
 
59
61
  def self.clear_remaining_example_groups
60
62
  world.example_groups.clear
61
63
  end
64
+
65
+ private
66
+
67
+ def self.warn_about_deprecated_configure
68
+ warn <<-NOTICE
69
+
70
+ *****************************************************************
71
+ DEPRECATION WARNING: you are using deprecated behaviour that will
72
+ be removed from RSpec 3.
73
+
74
+ You have set some configuration options after an example group has
75
+ already been defined. In RSpec 3, this will not be allowed. All
76
+ configuration should happen before the first example group is
77
+ defined. The configuration is happening at:
78
+
79
+ #{caller[1]}
80
+ *****************************************************************
81
+
82
+ NOTICE
83
+ end
62
84
  end
63
85
 
64
86
  require 'rspec/core/backward_compatibility'
@@ -17,7 +17,12 @@ be removed from a future version of RSpec.
17
17
  WARNING
18
18
  RSpec
19
19
  else
20
- super(name)
20
+ begin
21
+ super
22
+ rescue Exception => e
23
+ e.backtrace.reject! {|l| l =~ Regexp.compile(__FILE__) }
24
+ raise e
25
+ end
21
26
  end
22
27
  end
23
28
  end
@@ -38,7 +43,12 @@ WARNING
38
43
  require 'rspec/core/rake_task'
39
44
  RSpec::Core::RakeTask
40
45
  else
41
- super(name)
46
+ begin
47
+ super
48
+ rescue Exception => e
49
+ e.backtrace.reject! {|l| l =~ Regexp.compile(__FILE__) }
50
+ raise e
51
+ end
42
52
  end
43
53
  end
44
54
 
@@ -16,10 +16,7 @@ module RSpec
16
16
  @configuration.output_stream ||= out
17
17
  @options.configure(@configuration)
18
18
  @configuration.load_spec_files
19
- @configuration.configure_mock_framework
20
- @configuration.configure_expectation_framework
21
- @world.announce_inclusion_filter
22
- @world.announce_exclusion_filter
19
+ @world.announce_filters
23
20
 
24
21
  @configuration.reporter.report(@world.example_count) do |reporter|
25
22
  begin
@@ -33,6 +33,8 @@ module RSpec
33
33
  add_setting :include_or_extend_modules
34
34
  add_setting :backtrace_clean_patterns
35
35
  add_setting :tty
36
+ add_setting :treat_symbols_as_metadata_keys_with_true_values, :default => false
37
+ add_setting :expecting_with_rspec
36
38
 
37
39
  def initialize
38
40
  @color_enabled = false
@@ -46,10 +48,10 @@ module RSpec
46
48
  /lib\/rspec\/(core|expectations|matchers|mocks)/
47
49
  ]
48
50
 
49
- filter_run_excluding(
51
+ self.exclusion_filter = {
50
52
  :if => lambda { |value, metadata| metadata.has_key?(:if) && !value },
51
53
  :unless => lambda { |value| value }
52
- )
54
+ }
53
55
  end
54
56
 
55
57
  # :call-seq:
@@ -169,13 +171,11 @@ module RSpec
169
171
 
170
172
  # Returns the configured expectation framework adapter module(s)
171
173
  def expectation_frameworks
172
- settings[:expectation_frameworks] ||= begin
173
- require 'rspec/core/expecting/with_rspec'
174
- [RSpec::Core::ExpectationFrameworkAdapter]
175
- end
174
+ expect_with :rspec unless settings[:expectation_frameworks]
175
+ settings[:expectation_frameworks]
176
176
  end
177
177
 
178
- # Delegates to expect_with=([framework])
178
+ # Delegates to expect_with([framework])
179
179
  def expectation_framework=(framework)
180
180
  expect_with([framework])
181
181
  end
@@ -195,6 +195,7 @@ module RSpec
195
195
  case framework
196
196
  when :rspec
197
197
  require 'rspec/core/expecting/with_rspec'
198
+ self.expecting_with_rspec = true
198
199
  when :stdlib
199
200
  require 'rspec/core/expecting/with_stdlib'
200
201
  else
@@ -304,7 +305,8 @@ EOM
304
305
 
305
306
  # E.g. alias_example_to :crazy_slow, :speed => 'crazy_slow' defines
306
307
  # crazy_slow as an example variant that has the crazy_slow speed option
307
- def alias_example_to(new_name, extra_options={})
308
+ def alias_example_to(new_name, *args)
309
+ extra_options = build_metadata_hash_from(args)
308
310
  RSpec::Core::ExampleGroup.alias_example_to(new_name, extra_options)
309
311
  end
310
312
 
@@ -333,7 +335,15 @@ EOM
333
335
  RSpec::Core::ExampleGroup.alias_it_should_behave_like_to(new_name, report_label)
334
336
  end
335
337
 
336
- def filter_run_including(options={}, force_overwrite = false)
338
+ def filter_run_including(*args)
339
+ force_overwrite = if args.last.is_a?(Hash) || args.last.is_a?(Symbol)
340
+ false
341
+ else
342
+ args.pop
343
+ end
344
+
345
+ options = build_metadata_hash_from(args)
346
+
337
347
  if filter and filter[:line_number] || filter[:full_description]
338
348
  warn "Filtering by #{options.inspect} is not possible since " \
339
349
  "you are already filtering by #{filter.inspect}"
@@ -348,24 +358,22 @@ EOM
348
358
 
349
359
  alias_method :filter_run, :filter_run_including
350
360
 
351
- def filter_run_excluding(options={})
361
+ def filter_run_excluding(*args)
362
+ options = build_metadata_hash_from(args)
352
363
  self.exclusion_filter = (exclusion_filter || {}).merge(options)
353
364
  end
354
365
 
355
- def include(mod, filters={})
366
+ def include(mod, *args)
367
+ filters = build_metadata_hash_from(args)
356
368
  include_or_extend_modules << [:include, mod, filters]
357
369
  end
358
370
 
359
- def extend(mod, filters={})
371
+ def extend(mod, *args)
372
+ filters = build_metadata_hash_from(args)
360
373
  include_or_extend_modules << [:extend, mod, filters]
361
374
  end
362
375
 
363
376
  def configure_group(group)
364
- modules = {
365
- :include => group.included_modules.dup,
366
- :extend => group.ancestors.dup
367
- }
368
-
369
377
  include_or_extend_modules.each do |include_or_extend, mod, filters|
370
378
  next unless filters.empty? || group.apply?(:any?, filters)
371
379
  group.send(include_or_extend, mod)