rspec 0.8.2 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. data/CHANGES +125 -9
  2. data/EXAMPLES.rd +50 -27
  3. data/README +14 -1
  4. data/Rakefile +95 -42
  5. data/UPGRADE +31 -0
  6. data/bin/spec +0 -1
  7. data/bin/spec_translator +6 -0
  8. data/examples/auto_spec_description_example.rb +19 -0
  9. data/examples/{setup_teardown_example.rb → before_and_after_example.rb} +6 -6
  10. data/examples/behave_as_example.rb +45 -0
  11. data/examples/custom_expectation_matchers.rb +13 -12
  12. data/examples/dynamic_spec.rb +2 -2
  13. data/examples/file_accessor_spec.rb +2 -2
  14. data/examples/greeter_spec.rb +3 -3
  15. data/examples/helper_method_example.rb +2 -2
  16. data/examples/io_processor_spec.rb +4 -4
  17. data/examples/legacy_spec.rb +10 -0
  18. data/examples/mocking_example.rb +5 -5
  19. data/examples/multi_threaded_behaviour_runner.rb +25 -0
  20. data/examples/partial_mock_example.rb +4 -4
  21. data/examples/predicate_example.rb +4 -4
  22. data/examples/priority.txt +1 -0
  23. data/examples/shared_behaviours_example.rb +31 -0
  24. data/examples/stack_spec.rb +52 -69
  25. data/examples/stubbing_example.rb +10 -10
  26. data/examples/test_case_adapter_example.rb +26 -0
  27. data/examples/test_case_spec.rb +6 -6
  28. data/lib/spec.rb +9 -4
  29. data/lib/spec/dsl.rb +10 -0
  30. data/lib/spec/dsl/behaviour.rb +189 -0
  31. data/lib/spec/dsl/behaviour_callbacks.rb +43 -0
  32. data/lib/spec/dsl/behaviour_eval.rb +170 -0
  33. data/lib/spec/dsl/behaviour_factory.rb +32 -0
  34. data/lib/spec/dsl/composite_proc_builder.rb +28 -0
  35. data/lib/spec/dsl/configuration.rb +38 -0
  36. data/lib/spec/dsl/description.rb +34 -0
  37. data/lib/spec/dsl/example.rb +114 -0
  38. data/lib/spec/dsl/example_matcher.rb +28 -0
  39. data/lib/spec/{runner/spec_should_raise_handler.rb → dsl/example_should_raise_handler.rb} +4 -4
  40. data/lib/spec/expectations.rb +0 -3
  41. data/lib/spec/expectations/differs/default.rb +0 -1
  42. data/lib/spec/expectations/extensions.rb +0 -1
  43. data/lib/spec/expectations/extensions/object.rb +10 -53
  44. data/lib/spec/expectations/handler.rb +14 -18
  45. data/lib/spec/extensions.rb +1 -0
  46. data/lib/spec/extensions/object.rb +6 -0
  47. data/lib/spec/matchers.rb +19 -21
  48. data/lib/spec/matchers/be.rb +40 -11
  49. data/lib/spec/matchers/be_close.rb +2 -2
  50. data/lib/spec/matchers/operator_matcher.rb +52 -0
  51. data/lib/spec/matchers/respond_to.rb +21 -11
  52. data/lib/spec/mocks.rb +5 -28
  53. data/lib/spec/mocks/argument_constraint_matchers.rb +12 -0
  54. data/lib/spec/mocks/argument_expectation.rb +7 -4
  55. data/lib/spec/mocks/methods.rb +11 -16
  56. data/lib/spec/mocks/mock.rb +6 -3
  57. data/lib/spec/mocks/{mock_handler.rb → proxy.rb} +4 -7
  58. data/lib/spec/mocks/space.rb +28 -0
  59. data/lib/spec/mocks/spec_methods.rb +30 -0
  60. data/lib/spec/rake/spectask.rb +23 -21
  61. data/lib/spec/rake/verify_rcov.rb +1 -0
  62. data/lib/spec/runner.rb +88 -35
  63. data/lib/spec/runner/backtrace_tweaker.rb +2 -1
  64. data/lib/spec/runner/behaviour_runner.rb +102 -0
  65. data/lib/spec/runner/command_line.rb +5 -17
  66. data/lib/spec/runner/drb_command_line.rb +2 -2
  67. data/lib/spec/runner/extensions/kernel.rb +22 -9
  68. data/lib/spec/runner/formatter.rb +4 -0
  69. data/lib/spec/runner/formatter/base_formatter.rb +63 -0
  70. data/lib/spec/runner/formatter/base_text_formatter.rb +22 -52
  71. data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +25 -0
  72. data/lib/spec/runner/formatter/failing_examples_formatter.rb +22 -0
  73. data/lib/spec/runner/formatter/html_formatter.rb +74 -29
  74. data/lib/spec/runner/formatter/progress_bar_formatter.rb +6 -8
  75. data/lib/spec/runner/formatter/rdoc_formatter.rb +6 -6
  76. data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
  77. data/lib/spec/runner/formatter/specdoc_formatter.rb +6 -6
  78. data/lib/spec/runner/heckle_runner.rb +8 -7
  79. data/lib/spec/runner/option_parser.rb +136 -55
  80. data/lib/spec/runner/options.rb +26 -0
  81. data/lib/spec/runner/reporter.rb +38 -31
  82. data/lib/spec/runner/spec_parser.rb +22 -13
  83. data/lib/spec/test_case_adapter.rb +10 -0
  84. data/lib/spec/translator.rb +103 -86
  85. data/lib/spec/version.rb +7 -15
  86. data/plugins/mock_frameworks/flexmock.rb +27 -0
  87. data/plugins/mock_frameworks/mocha.rb +21 -0
  88. data/plugins/mock_frameworks/rspec.rb +18 -0
  89. data/spec/spec/dsl/behaviour_eval_spec.rb +49 -0
  90. data/spec/spec/dsl/behaviour_factory_spec.rb +30 -0
  91. data/spec/spec/dsl/behaviour_spec.rb +508 -0
  92. data/spec/spec/dsl/composite_proc_builder_spec.rb +57 -0
  93. data/spec/spec/dsl/configuration_spec.rb +43 -0
  94. data/spec/spec/dsl/description_spec.rb +51 -0
  95. data/spec/spec/dsl/example_class_spec.rb +24 -0
  96. data/spec/spec/dsl/example_instance_spec.rb +140 -0
  97. data/spec/spec/dsl/example_should_raise_spec.rb +137 -0
  98. data/spec/spec/dsl/predicate_matcher_spec.rb +21 -0
  99. data/spec/spec/dsl/shared_behaviour_spec.rb +186 -0
  100. data/spec/spec/expectations/differs/default_spec.rb +12 -12
  101. data/spec/spec/expectations/extensions/object_spec.rb +10 -10
  102. data/spec/spec/expectations/fail_with_spec.rb +20 -20
  103. data/spec/spec/matchers/be_close_spec.rb +37 -31
  104. data/spec/spec/matchers/be_spec.rb +50 -41
  105. data/spec/spec/matchers/change_spec.rb +54 -54
  106. data/spec/spec/matchers/description_generation_spec.rb +43 -31
  107. data/spec/spec/matchers/eql_spec.rb +24 -37
  108. data/spec/spec/matchers/equal_spec.rb +24 -37
  109. data/spec/spec/matchers/exist_spec.rb +48 -0
  110. data/spec/spec/matchers/handler_spec.rb +36 -23
  111. data/spec/spec/matchers/has_spec.rb +8 -8
  112. data/spec/spec/matchers/have_spec.rb +38 -38
  113. data/spec/spec/matchers/include_spec.rb +6 -6
  114. data/spec/spec/matchers/match_spec.rb +8 -8
  115. data/spec/spec/matchers/matcher_methods_spec.rb +24 -31
  116. data/spec/spec/matchers/raise_error_spec.rb +34 -34
  117. data/spec/spec/matchers/respond_to_spec.rb +32 -8
  118. data/spec/spec/matchers/satisfy_spec.rb +6 -6
  119. data/spec/spec/matchers/should_===_spec.rb +38 -0
  120. data/spec/spec/matchers/should_==_spec.rb +37 -0
  121. data/spec/spec/matchers/should_=~_spec.rb +36 -0
  122. data/spec/spec/matchers/throw_symbol_spec.rb +47 -55
  123. data/spec/spec/mocks/any_number_of_times_spec.rb +16 -21
  124. data/spec/spec/mocks/argument_expectation_spec.rb +3 -3
  125. data/spec/spec/mocks/at_least_spec.rb +30 -30
  126. data/spec/spec/mocks/at_most_spec.rb +53 -57
  127. data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
  128. data/spec/spec/mocks/bug_report_7611_spec.rb +3 -3
  129. data/spec/spec/mocks/bug_report_7805_spec.rb +3 -3
  130. data/spec/spec/mocks/bug_report_8165_spec.rb +5 -5
  131. data/spec/spec/mocks/bug_report_8302_spec.rb +5 -5
  132. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +26 -27
  133. data/spec/spec/mocks/mock_ordering_spec.rb +19 -15
  134. data/spec/spec/mocks/mock_space_spec.rb +54 -0
  135. data/spec/spec/mocks/mock_spec.rb +111 -141
  136. data/spec/spec/mocks/multiple_return_value_spec.rb +48 -48
  137. data/spec/spec/mocks/null_object_mock_spec.rb +10 -10
  138. data/spec/spec/mocks/once_counts_spec.rb +32 -35
  139. data/spec/spec/mocks/options_hash_spec.rb +12 -10
  140. data/spec/spec/mocks/partial_mock_spec.rb +15 -15
  141. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +24 -22
  142. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +19 -19
  143. data/spec/spec/mocks/precise_counts_spec.rb +28 -32
  144. data/spec/spec/mocks/record_messages_spec.rb +10 -10
  145. data/spec/spec/mocks/stub_spec.rb +45 -45
  146. data/spec/spec/mocks/twice_counts_spec.rb +21 -21
  147. data/spec/spec/package/bin_spec_spec.rb +12 -0
  148. data/spec/spec/runner/behaviour_runner_spec.rb +114 -0
  149. data/spec/spec/runner/command_line_spec.rb +8 -8
  150. data/spec/spec/runner/context_matching_spec.rb +14 -15
  151. data/spec/spec/runner/drb_command_line_spec.rb +12 -12
  152. data/spec/spec/runner/execution_context_spec.rb +8 -29
  153. data/spec/spec/runner/extensions/kernel_spec.rb +36 -0
  154. data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +27 -0
  155. data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +28 -0
  156. data/spec/spec/runner/formatter/html_formatter_spec.rb +9 -8
  157. data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +6 -6
  158. data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +10 -10
  159. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +22 -27
  160. data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +6 -5
  161. data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +17 -17
  162. data/spec/spec/runner/formatter/snippet_extractor_spec.rb +11 -0
  163. data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +6 -6
  164. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +17 -17
  165. data/spec/spec/runner/heckle_runner_spec.rb +21 -21
  166. data/spec/spec/runner/heckler_spec.rb +5 -5
  167. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +12 -12
  168. data/spec/spec/runner/object_ext_spec.rb +3 -3
  169. data/spec/spec/runner/option_parser_spec.rb +171 -102
  170. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +21 -12
  171. data/spec/spec/runner/reporter_spec.rb +106 -97
  172. data/spec/spec/runner/spec_matcher_spec.rb +46 -51
  173. data/spec/spec/runner/spec_parser_spec.rb +72 -16
  174. data/spec/spec/spec_classes.rb +12 -3
  175. data/spec/spec/translator_spec.rb +165 -36
  176. metadata +66 -76
  177. data/RELEASE-PLAN +0 -117
  178. data/examples/auto_spec_name_generation_example.rb +0 -18
  179. data/lib/spec/callback.rb +0 -11
  180. data/lib/spec/callback/callback_container.rb +0 -60
  181. data/lib/spec/callback/extensions/module.rb +0 -24
  182. data/lib/spec/callback/extensions/object.rb +0 -37
  183. data/lib/spec/deprecated.rb +0 -3
  184. data/lib/spec/expectations/extensions/proc.rb +0 -57
  185. data/lib/spec/expectations/should.rb +0 -5
  186. data/lib/spec/expectations/should/base.rb +0 -64
  187. data/lib/spec/expectations/should/change.rb +0 -69
  188. data/lib/spec/expectations/should/have.rb +0 -128
  189. data/lib/spec/expectations/should/not.rb +0 -74
  190. data/lib/spec/expectations/should/should.rb +0 -81
  191. data/lib/spec/expectations/sugar.rb +0 -47
  192. data/lib/spec/runner/context.rb +0 -154
  193. data/lib/spec/runner/context_eval.rb +0 -142
  194. data/lib/spec/runner/context_runner.rb +0 -55
  195. data/lib/spec/runner/execution_context.rb +0 -17
  196. data/lib/spec/runner/spec_matcher.rb +0 -25
  197. data/lib/spec/runner/specification.rb +0 -114
  198. data/spec/spec/callback/callback_container_spec.rb +0 -27
  199. data/spec/spec/callback/module_spec.rb +0 -37
  200. data/spec/spec/callback/object_spec.rb +0 -90
  201. data/spec/spec/callback/object_with_class_callback_spec.rb +0 -19
  202. data/spec/spec/expectations/should/should_==_spec.rb +0 -19
  203. data/spec/spec/expectations/should/should_=~_spec.rb +0 -13
  204. data/spec/spec/expectations/should/should_be_a_kind_of_spec.rb +0 -21
  205. data/spec/spec/expectations/should/should_be_an_instance_of_spec.rb +0 -30
  206. data/spec/spec/expectations/should/should_be_arbitrary_predicate_spec.rb +0 -81
  207. data/spec/spec/expectations/should/should_be_close_spec.rb +0 -18
  208. data/spec/spec/expectations/should/should_be_comparison_operator_spec.rb +0 -44
  209. data/spec/spec/expectations/should/should_be_false_spec.rb +0 -39
  210. data/spec/spec/expectations/should/should_be_spec.rb +0 -11
  211. data/spec/spec/expectations/should/should_be_true_spec.rb +0 -27
  212. data/spec/spec/expectations/should/should_change_spec.rb +0 -184
  213. data/spec/spec/expectations/should/should_eql_spec.rb +0 -11
  214. data/spec/spec/expectations/should/should_equal_spec.rb +0 -11
  215. data/spec/spec/expectations/should/should_have_at_least_spec.rb +0 -53
  216. data/spec/spec/expectations/should/should_have_at_most_spec.rb +0 -45
  217. data/spec/spec/expectations/should/should_have_key_spec.rb +0 -21
  218. data/spec/spec/expectations/should/should_have_spec.rb +0 -64
  219. data/spec/spec/expectations/should/should_include_spec.rb +0 -59
  220. data/spec/spec/expectations/should/should_match_spec.rb +0 -25
  221. data/spec/spec/expectations/should/should_not_==_spec.rb +0 -15
  222. data/spec/spec/expectations/should/should_not_be_a_kind_of_spec.rb +0 -21
  223. data/spec/spec/expectations/should/should_not_be_an_instance_of_spec.rb +0 -11
  224. data/spec/spec/expectations/should/should_not_be_arbitrary_predicate_spec.rb +0 -68
  225. data/spec/spec/expectations/should/should_not_be_spec.rb +0 -11
  226. data/spec/spec/expectations/should/should_not_change_spec.rb +0 -24
  227. data/spec/spec/expectations/should/should_not_eql_spec.rb +0 -11
  228. data/spec/spec/expectations/should/should_not_equal_spec.rb +0 -11
  229. data/spec/spec/expectations/should/should_not_have_key_spec.rb +0 -15
  230. data/spec/spec/expectations/should/should_not_include_spec.rb +0 -58
  231. data/spec/spec/expectations/should/should_not_match_spec.rb +0 -11
  232. data/spec/spec/expectations/should/should_not_raise_spec.rb +0 -75
  233. data/spec/spec/expectations/should/should_not_respond_to_spec.rb +0 -15
  234. data/spec/spec/expectations/should/should_not_throw_spec.rb +0 -35
  235. data/spec/spec/expectations/should/should_raise_spec.rb +0 -66
  236. data/spec/spec/expectations/should/should_respond_to_spec.rb +0 -15
  237. data/spec/spec/expectations/should/should_satisfy_spec.rb +0 -35
  238. data/spec/spec/expectations/should/should_throw_spec.rb +0 -27
  239. data/spec/spec/runner/context_runner_spec.rb +0 -100
  240. data/spec/spec/runner/context_spec.rb +0 -405
  241. data/spec/spec/runner/kernel_ext_spec.rb +0 -16
  242. data/spec/spec/runner/spec_name_generation_spec.rb +0 -102
  243. data/spec/spec/runner/specification_class_spec.rb +0 -72
  244. data/spec/spec/runner/specification_instance_spec.rb +0 -160
  245. data/spec/spec/runner/specification_should_raise_spec.rb +0 -136
@@ -0,0 +1,32 @@
1
+ module Spec
2
+ module DSL
3
+ class BehaviourFactory
4
+
5
+ class << self
6
+
7
+ BEHAVIOUR_CLASSES = {:default => Spec::DSL::Behaviour}
8
+
9
+ def add_behaviour_class(key, value)
10
+ BEHAVIOUR_CLASSES[key] = value
11
+ end
12
+
13
+ def remove_behaviour_class(key)
14
+ BEHAVIOUR_CLASSES.delete(key)
15
+ end
16
+
17
+ def create(*args, &block)
18
+ return BEHAVIOUR_CLASSES[behaviour_type(*args)].new(*args, &block)
19
+ end
20
+
21
+ private
22
+
23
+ def behaviour_type(*args)
24
+ opts = Hash === args.last ? args.last : {}
25
+ opts[:behaviour_type] ? opts[:behaviour_type] : :default
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module DSL
3
+ class CompositeProcBuilder < Array
4
+ def initialize(callbacks=[])
5
+ push(*callbacks)
6
+ end
7
+
8
+ def proc(&error_handler)
9
+ parts = self
10
+ Proc.new do
11
+ parts.collect do |part|
12
+ begin
13
+ if part.is_a?(UnboundMethod)
14
+ part.bind(self).call
15
+ else
16
+ instance_eval(&part)
17
+ end
18
+ rescue Exception => e
19
+ raise e unless error_handler
20
+ error_handler.call(e)
21
+ e
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,38 @@
1
+ module Spec
2
+ module DSL
3
+ class Configuration
4
+
5
+ def mock_with(mock_framework)
6
+ @mock_framework = case mock_framework
7
+ when Symbol
8
+ mock_framework_path(mock_framework.to_s)
9
+ else
10
+ mock_framework
11
+ end
12
+ end
13
+
14
+ def mock_framework
15
+ @mock_framework ||= mock_framework_path("rspec")
16
+ end
17
+
18
+ def include(mod)
19
+ included_modules << mod
20
+ end
21
+
22
+ def included_modules
23
+ @included_modules ||= []
24
+ end
25
+
26
+ def predicate_matchers
27
+ @predicate_matchers ||= {}
28
+ end
29
+
30
+ private
31
+
32
+ def mock_framework_path(framework_name)
33
+ File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "plugins", "mock_frameworks", framework_name))
34
+ end
35
+
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,34 @@
1
+ module Spec
2
+ module DSL
3
+ class Description
4
+ attr_reader :description, :described_type
5
+
6
+ def initialize(*args)
7
+ args, @options = args_and_options(*args)
8
+ @described_type = args.first unless args.first.is_a?(String)
9
+ @description = args.shift.to_s
10
+ @description << args.shift.to_s unless args.empty?
11
+ end
12
+
13
+ def [](key)
14
+ @options[key]
15
+ end
16
+
17
+ def []=(key, value)
18
+ @options[key] = value
19
+ end
20
+
21
+ def to_s; @description; end
22
+
23
+ def ==(value)
24
+ case value
25
+ when Description
26
+ @description == value.description
27
+ else
28
+ @description == value
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,114 @@
1
+ require 'timeout'
2
+
3
+ module Spec
4
+ module DSL
5
+ class Example
6
+ def initialize(description, options={}, &example_block)
7
+ @from = caller(0)[3]
8
+ @options = options
9
+ @example_block = example_block
10
+ @description = description
11
+ @description_generated_proc = lambda { |desc| @generated_description = desc }
12
+ end
13
+
14
+ def run(reporter, before_each_block, after_each_block, dry_run, execution_context, timeout=nil)
15
+ reporter.example_started(description)
16
+ return reporter.example_finished(description) if dry_run
17
+
18
+ errors = []
19
+ location = nil
20
+ Timeout.timeout(timeout) do
21
+ before_each_ok = setup_example(execution_context, errors, &before_each_block)
22
+ example_ok = run_example(execution_context, errors) if before_each_ok
23
+ after_each_ok = teardown_example(execution_context, errors, &after_each_block)
24
+ location = failure_location(before_each_ok, example_ok, after_each_ok)
25
+ end
26
+
27
+ ExampleShouldRaiseHandler.new(@from, @options).handle(errors)
28
+ reporter.example_finished(description, errors.first, location) if reporter
29
+ end
30
+
31
+ def matches?(matcher, specified_examples)
32
+ matcher.example_desc = description
33
+ matcher.matches?(specified_examples)
34
+ end
35
+
36
+ private
37
+ def description
38
+ @description == :__generate_description ? generated_description : @description
39
+ end
40
+
41
+ def generated_description
42
+ @generated_description || "NAME NOT GENERATED"
43
+ end
44
+
45
+ def setup_example(execution_context, errors, &behaviour_before_block)
46
+ setup_mocks(execution_context)
47
+ Spec::Matchers.description_generated(&@description_generated_proc)
48
+
49
+ builder = CompositeProcBuilder.new
50
+ before_proc = builder.proc(&append_errors(errors))
51
+ execution_context.instance_eval(&before_proc)
52
+
53
+ execution_context.instance_eval(&behaviour_before_block) if behaviour_before_block
54
+ return errors.empty?
55
+ rescue => e
56
+ errors << e
57
+ return false
58
+ end
59
+
60
+ def run_example(execution_context, errors)
61
+ begin
62
+ execution_context.instance_eval(&@example_block)
63
+ return true
64
+ rescue Exception => e
65
+ errors << e
66
+ return false
67
+ end
68
+ end
69
+
70
+ def teardown_example(execution_context, errors, &behaviour_after_each)
71
+ execution_context.instance_eval(&behaviour_after_each) if behaviour_after_each
72
+
73
+ begin
74
+ verify_mocks(execution_context)
75
+ ensure
76
+ teardown_mocks(execution_context)
77
+ end
78
+
79
+ Spec::Matchers.unregister_description_generated(@description_generated_proc)
80
+
81
+ builder = CompositeProcBuilder.new
82
+ after_proc = builder.proc(&append_errors(errors))
83
+ execution_context.instance_eval(&after_proc)
84
+
85
+ return errors.empty?
86
+ rescue => e
87
+ errors << e
88
+ return false
89
+ end
90
+
91
+ def setup_mocks(execution_context)
92
+ execution_context.setup_mocks_for_rspec if execution_context.respond_to?(:setup_mocks_for_rspec)
93
+ end
94
+
95
+ def verify_mocks(execution_context)
96
+ execution_context.verify_mocks_for_rspec if execution_context.respond_to?(:verify_mocks_for_rspec)
97
+ end
98
+
99
+ def teardown_mocks(execution_context)
100
+ execution_context.teardown_mocks_for_rspec if execution_context.respond_to?(:teardown_mocks_for_rspec)
101
+ end
102
+
103
+ def append_errors(errors)
104
+ proc {|error| errors << error}
105
+ end
106
+
107
+ def failure_location(before_each_ok, example_ok, after_each_ok)
108
+ return 'before(:each)' unless before_each_ok
109
+ return description unless example_ok
110
+ return 'after(:each)' unless after_each_ok
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module DSL
3
+ class ExampleMatcher
4
+
5
+ attr_writer :example_desc
6
+ def initialize(context_desc, example_desc=nil)
7
+ @context_desc = context_desc
8
+ @example_desc = example_desc
9
+ end
10
+
11
+ def matches?(specified_examples)
12
+ specified_examples.each do |specified_example|
13
+ return true if specified_example =~ /(^#{context_regexp} #{example_regexp}$|^#{context_regexp}$|^#{example_regexp}$)/
14
+ end
15
+ false
16
+ end
17
+
18
+ private
19
+ def context_regexp
20
+ Regexp.escape(@context_desc.split('::').last)
21
+ end
22
+
23
+ def example_regexp
24
+ Regexp.escape(@example_desc)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,6 +1,6 @@
1
1
  module Spec
2
- module Runner
3
- class SpecShouldRaiseHandler
2
+ module DSL
3
+ class ExampleShouldRaiseHandler
4
4
  def initialize(file_and_line_number, opts)
5
5
  @file_and_line_number = file_and_line_number
6
6
  @options = opts
@@ -31,9 +31,9 @@ module Spec
31
31
 
32
32
  def build_message(exception=nil)
33
33
  if @expected_error_message.nil?
34
- message = "specify block expected #{@expected_error_class.to_s}"
34
+ message = "example block expected #{@expected_error_class.to_s}"
35
35
  else
36
- message = "specify block expected #{@expected_error_class.new(@expected_error_message.to_s).inspect}"
36
+ message = "example block expected #{@expected_error_class.new(@expected_error_message.to_s).inspect}"
37
37
  end
38
38
  message << " but raised #{exception.inspect}" if exception
39
39
  message << " but nothing was raised" unless exception
@@ -1,9 +1,6 @@
1
- require 'spec/deprecated'
2
1
  require 'spec/matchers'
3
- require 'spec/expectations/sugar'
4
2
  require 'spec/expectations/errors'
5
3
  require 'spec/expectations/extensions'
6
- require 'spec/expectations/should'
7
4
  require 'spec/expectations/handler'
8
5
 
9
6
  module Spec
@@ -10,7 +10,6 @@ module Spec
10
10
  module Expectations
11
11
  module Differs
12
12
 
13
- # TODO add colour support
14
13
  # TODO add some rdoc
15
14
  class Default
16
15
  def initialize(format=:unified,context_lines=nil,colour=nil)
@@ -1,3 +1,2 @@
1
1
  require 'spec/expectations/extensions/object'
2
- require 'spec/expectations/extensions/proc'
3
2
  require 'spec/expectations/extensions/string_and_symbol'
@@ -7,6 +7,7 @@ module Spec
7
7
  # :call-seq:
8
8
  # should(matcher)
9
9
  # should == expected
10
+ # should === expected
10
11
  # should =~ expected
11
12
  #
12
13
  # receiver.should(matcher)
@@ -15,6 +16,9 @@ module Spec
15
16
  # receiver.should == expected #any value
16
17
  # => Passes if (receiver == expected)
17
18
  #
19
+ # receiver.should === expected #any value
20
+ # => Passes if (receiver === expected)
21
+ #
18
22
  # receiver.should =~ regexp
19
23
  # => Passes if (receiver =~ regexp)
20
24
  #
@@ -26,12 +30,13 @@ module Spec
26
30
  # Instead, use receiver.should_not == expected
27
31
  def should(matcher=nil, &block)
28
32
  return ExpectationMatcherHandler.handle_matcher(self, matcher, &block) if matcher
29
- Should::Should.new(self)
33
+ Spec::Matchers::PositiveOperatorMatcher.new(self)
30
34
  end
31
35
 
32
36
  # :call-seq:
33
37
  # should_not(matcher)
34
38
  # should_not == expected
39
+ # should_not === expected
35
40
  # should_not =~ expected
36
41
  #
37
42
  # receiver.should_not(matcher)
@@ -40,70 +45,22 @@ module Spec
40
45
  # receiver.should_not == expected
41
46
  # => Passes unless (receiver == expected)
42
47
  #
48
+ # receiver.should_not === expected
49
+ # => Passes unless (receiver === expected)
50
+ #
43
51
  # receiver.should_not =~ regexp
44
52
  # => Passes unless (receiver =~ regexp)
45
53
  #
46
54
  # See Spec::Matchers for more information about matchers
47
55
  def should_not(matcher=nil, &block)
48
56
  return NegativeExpectationMatcherHandler.handle_matcher(self, matcher, &block) if matcher
49
- should.not
57
+ Spec::Matchers::NegativeOperatorMatcher.new(self)
50
58
  end
51
59
 
52
- deprecated do
53
- # Deprecated: use should have(n).items (see Spec::Matchers)
54
- # This will be removed in 0.9
55
- def should_have(expected)
56
- should.have(expected)
57
- end
58
- alias_method :should_have_exactly, :should_have
59
-
60
- # Deprecated: use should have_at_least(n).items (see Spec::Matchers)
61
- # This will be removed in 0.9
62
- def should_have_at_least(expected)
63
- should.have.at_least(expected)
64
- end
65
-
66
- # Deprecated: use should have_at_most(n).items (see Spec::Matchers)
67
- # This will be removed in 0.9
68
- def should_have_at_most(expected)
69
- should.have.at_most(expected)
70
- end
71
-
72
- # Deprecated: use should include(expected) (see Spec::Matchers)
73
- # This will be removed in 0.9
74
- def should_include(expected)
75
- should.include(expected)
76
- end
77
-
78
- # Deprecated: use should_not include(expected) (see Spec::Matchers)
79
- # This will be removed in 0.9
80
- def should_not_include(expected)
81
- should.not.include(expected)
82
- end
83
-
84
- # Deprecated: use should be(expected) (see Spec::Matchers)
85
- # This will be removed in 0.9
86
- def should_be(expected = :___no_arg)
87
- should.be(expected)
88
- end
89
-
90
- # Deprecated: use should_not be(expected) (see Spec::Matchers)
91
- # This will be removed in 0.9
92
- def should_not_be(expected = :___no_arg)
93
- should_not.be(expected)
94
- end
95
- end
96
60
  end
97
61
  end
98
62
  end
99
63
 
100
64
  class Object
101
65
  include Spec::Expectations::ObjectExpectations
102
- deprecated do
103
- include Spec::Expectations::UnderscoreSugar
104
- end
105
66
  end
106
-
107
- deprecated do
108
- Object.handle_underscores_for_rspec!
109
- end
@@ -11,11 +11,9 @@ module Spec
11
11
  class << self
12
12
  include MatcherHandlerHelper
13
13
  def handle_matcher(actual, matcher, &block)
14
- unless matcher.nil?
15
- match = matcher.matches?(actual, &block)
16
- ::Spec::Matchers.generated_description = "should #{describe(matcher)}"
17
- Spec::Expectations.fail_with(matcher.failure_message) unless match
18
- end
14
+ match = matcher.matches?(actual, &block)
15
+ ::Spec::Matchers.generated_description = "should #{describe(matcher)}"
16
+ Spec::Expectations.fail_with(matcher.failure_message) unless match
19
17
  end
20
18
  end
21
19
  end
@@ -24,20 +22,18 @@ module Spec
24
22
  class << self
25
23
  include MatcherHandlerHelper
26
24
  def handle_matcher(actual, matcher, &block)
27
- unless matcher.nil?
28
- unless matcher.respond_to?(:negative_failure_message)
29
- Spec::Expectations.fail_with(
30
- <<-EOF
31
- Matcher does not support should_not.
32
- See Spec::Matchers for more information
33
- about matchers.
34
- EOF
35
- )
36
- end
37
- match = matcher.matches?(actual, &block)
38
- ::Spec::Matchers.generated_description = "should not #{describe(matcher)}"
39
- Spec::Expectations.fail_with(matcher.negative_failure_message) if match
25
+ unless matcher.respond_to?(:negative_failure_message)
26
+ Spec::Expectations.fail_with(
27
+ <<-EOF
28
+ Matcher does not support should_not.
29
+ See Spec::Matchers for more information
30
+ about matchers.
31
+ EOF
32
+ )
40
33
  end
34
+ match = matcher.matches?(actual, &block)
35
+ ::Spec::Matchers.generated_description = "should not #{describe(matcher)}"
36
+ Spec::Expectations.fail_with(matcher.negative_failure_message) if match
41
37
  end
42
38
  end
43
39
  end