opal-rspec-cj 0.4.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.
Files changed (176) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/.gitmodules +15 -0
  4. data/.travis.yml +13 -0
  5. data/.yardopts +5 -0
  6. data/CHANGELOG.md +25 -0
  7. data/Gemfile +8 -0
  8. data/README.md +147 -0
  9. data/Rakefile +26 -0
  10. data/config.ru +10 -0
  11. data/example/Gemfile +4 -0
  12. data/example/README.md +13 -0
  13. data/example/Rakefile +8 -0
  14. data/example/opal/user.rb +11 -0
  15. data/example/spec/user_spec.rb +15 -0
  16. data/lib/opal-rspec.rb +2 -0
  17. data/lib/opal/rspec.rb +20 -0
  18. data/lib/opal/rspec/rake_task.rb +63 -0
  19. data/lib/opal/rspec/version.rb +5 -0
  20. data/opal-rspec.gemspec +21 -0
  21. data/opal/opal-rspec.rb +1 -0
  22. data/opal/opal/rspec.rb +25 -0
  23. data/opal/opal/rspec/async.rb +289 -0
  24. data/opal/opal/rspec/browser_formatter.rb +188 -0
  25. data/opal/opal/rspec/fixes.rb +116 -0
  26. data/opal/opal/rspec/requires.rb +45 -0
  27. data/opal/opal/rspec/runner.rb +69 -0
  28. data/opal/opal/rspec/sprockets_runner.rb.erb +11 -0
  29. data/opal/opal/rspec/text_formatter.rb +74 -0
  30. data/spec/async_spec.rb +38 -0
  31. data/spec/example_spec.rb +163 -0
  32. data/spec/matchers_spec.rb +201 -0
  33. data/spec/mock_spec.rb +63 -0
  34. data/spec/named_subject_spec.rb +11 -0
  35. data/spec/should_syntax_spec.rb +17 -0
  36. data/vendor/spec_runner.js +50 -0
  37. data/vendor_lib/rspec-expectations.rb +1 -0
  38. data/vendor_lib/rspec.rb +3 -0
  39. data/vendor_lib/rspec/autorun.rb +2 -0
  40. data/vendor_lib/rspec/core.rb +203 -0
  41. data/vendor_lib/rspec/core/backport_random.rb +302 -0
  42. data/vendor_lib/rspec/core/backtrace_formatter.rb +65 -0
  43. data/vendor_lib/rspec/core/command_line.rb +36 -0
  44. data/vendor_lib/rspec/core/configuration.rb +1129 -0
  45. data/vendor_lib/rspec/core/configuration_options.rb +143 -0
  46. data/vendor_lib/rspec/core/drb_command_line.rb +26 -0
  47. data/vendor_lib/rspec/core/drb_options.rb +87 -0
  48. data/vendor_lib/rspec/core/dsl.rb +26 -0
  49. data/vendor_lib/rspec/core/example.rb +312 -0
  50. data/vendor_lib/rspec/core/example_group.rb +540 -0
  51. data/vendor_lib/rspec/core/filter_manager.rb +224 -0
  52. data/vendor_lib/rspec/core/flat_map.rb +17 -0
  53. data/vendor_lib/rspec/core/formatters.rb +54 -0
  54. data/vendor_lib/rspec/core/formatters/base_formatter.rb +291 -0
  55. data/vendor_lib/rspec/core/formatters/base_text_formatter.rb +307 -0
  56. data/vendor_lib/rspec/core/formatters/deprecation_formatter.rb +193 -0
  57. data/vendor_lib/rspec/core/formatters/documentation_formatter.rb +67 -0
  58. data/vendor_lib/rspec/core/formatters/helpers.rb +82 -0
  59. data/vendor_lib/rspec/core/formatters/html_formatter.rb +155 -0
  60. data/vendor_lib/rspec/core/formatters/html_printer.rb +408 -0
  61. data/vendor_lib/rspec/core/formatters/json_formatter.rb +99 -0
  62. data/vendor_lib/rspec/core/formatters/progress_formatter.rb +32 -0
  63. data/vendor_lib/rspec/core/formatters/snippet_extractor.rb +101 -0
  64. data/vendor_lib/rspec/core/hooks.rb +535 -0
  65. data/vendor_lib/rspec/core/memoized_helpers.rb +431 -0
  66. data/vendor_lib/rspec/core/metadata.rb +313 -0
  67. data/vendor_lib/rspec/core/mocking/with_absolutely_nothing.rb +11 -0
  68. data/vendor_lib/rspec/core/mocking/with_flexmock.rb +27 -0
  69. data/vendor_lib/rspec/core/mocking/with_mocha.rb +52 -0
  70. data/vendor_lib/rspec/core/mocking/with_rr.rb +27 -0
  71. data/vendor_lib/rspec/core/mocking/with_rspec.rb +27 -0
  72. data/vendor_lib/rspec/core/option_parser.rb +234 -0
  73. data/vendor_lib/rspec/core/ordering.rb +154 -0
  74. data/vendor_lib/rspec/core/pending.rb +110 -0
  75. data/vendor_lib/rspec/core/project_initializer.rb +88 -0
  76. data/vendor_lib/rspec/core/rake_task.rb +128 -0
  77. data/vendor_lib/rspec/core/reporter.rb +132 -0
  78. data/vendor_lib/rspec/core/ruby_project.rb +44 -0
  79. data/vendor_lib/rspec/core/runner.rb +97 -0
  80. data/vendor_lib/rspec/core/shared_context.rb +53 -0
  81. data/vendor_lib/rspec/core/shared_example_group.rb +146 -0
  82. data/vendor_lib/rspec/core/shared_example_group/collection.rb +27 -0
  83. data/vendor_lib/rspec/core/version.rb +7 -0
  84. data/vendor_lib/rspec/core/warnings.rb +22 -0
  85. data/vendor_lib/rspec/core/world.rb +131 -0
  86. data/vendor_lib/rspec/expectations.rb +75 -0
  87. data/vendor_lib/rspec/expectations/differ.rb +154 -0
  88. data/vendor_lib/rspec/expectations/errors.rb +9 -0
  89. data/vendor_lib/rspec/expectations/expectation_target.rb +87 -0
  90. data/vendor_lib/rspec/expectations/extensions.rb +1 -0
  91. data/vendor_lib/rspec/expectations/extensions/object.rb +29 -0
  92. data/vendor_lib/rspec/expectations/fail_with.rb +79 -0
  93. data/vendor_lib/rspec/expectations/handler.rb +68 -0
  94. data/vendor_lib/rspec/expectations/syntax.rb +182 -0
  95. data/vendor_lib/rspec/expectations/version.rb +8 -0
  96. data/vendor_lib/rspec/matchers.rb +633 -0
  97. data/vendor_lib/rspec/matchers/built_in.rb +39 -0
  98. data/vendor_lib/rspec/matchers/built_in/base_matcher.rb +68 -0
  99. data/vendor_lib/rspec/matchers/built_in/be.rb +213 -0
  100. data/vendor_lib/rspec/matchers/built_in/be_instance_of.rb +15 -0
  101. data/vendor_lib/rspec/matchers/built_in/be_kind_of.rb +11 -0
  102. data/vendor_lib/rspec/matchers/built_in/be_within.rb +55 -0
  103. data/vendor_lib/rspec/matchers/built_in/change.rb +141 -0
  104. data/vendor_lib/rspec/matchers/built_in/cover.rb +21 -0
  105. data/vendor_lib/rspec/matchers/built_in/eq.rb +22 -0
  106. data/vendor_lib/rspec/matchers/built_in/eql.rb +23 -0
  107. data/vendor_lib/rspec/matchers/built_in/equal.rb +48 -0
  108. data/vendor_lib/rspec/matchers/built_in/exist.rb +26 -0
  109. data/vendor_lib/rspec/matchers/built_in/has.rb +48 -0
  110. data/vendor_lib/rspec/matchers/built_in/include.rb +61 -0
  111. data/vendor_lib/rspec/matchers/built_in/match.rb +17 -0
  112. data/vendor_lib/rspec/matchers/built_in/match_array.rb +51 -0
  113. data/vendor_lib/rspec/matchers/built_in/raise_error.rb +154 -0
  114. data/vendor_lib/rspec/matchers/built_in/respond_to.rb +74 -0
  115. data/vendor_lib/rspec/matchers/built_in/satisfy.rb +30 -0
  116. data/vendor_lib/rspec/matchers/built_in/start_and_end_with.rb +48 -0
  117. data/vendor_lib/rspec/matchers/built_in/throw_symbol.rb +94 -0
  118. data/vendor_lib/rspec/matchers/built_in/yield.rb +297 -0
  119. data/vendor_lib/rspec/matchers/compatibility.rb +14 -0
  120. data/vendor_lib/rspec/matchers/configuration.rb +113 -0
  121. data/vendor_lib/rspec/matchers/dsl.rb +23 -0
  122. data/vendor_lib/rspec/matchers/generated_descriptions.rb +35 -0
  123. data/vendor_lib/rspec/matchers/matcher.rb +301 -0
  124. data/vendor_lib/rspec/matchers/method_missing.rb +12 -0
  125. data/vendor_lib/rspec/matchers/operator_matcher.rb +99 -0
  126. data/vendor_lib/rspec/matchers/pretty.rb +70 -0
  127. data/vendor_lib/rspec/matchers/test_unit_integration.rb +11 -0
  128. data/vendor_lib/rspec/mocks.rb +100 -0
  129. data/vendor_lib/rspec/mocks/any_instance/chain.rb +92 -0
  130. data/vendor_lib/rspec/mocks/any_instance/expectation_chain.rb +47 -0
  131. data/vendor_lib/rspec/mocks/any_instance/message_chains.rb +75 -0
  132. data/vendor_lib/rspec/mocks/any_instance/recorder.rb +200 -0
  133. data/vendor_lib/rspec/mocks/any_instance/stub_chain.rb +45 -0
  134. data/vendor_lib/rspec/mocks/any_instance/stub_chain_chain.rb +23 -0
  135. data/vendor_lib/rspec/mocks/argument_list_matcher.rb +104 -0
  136. data/vendor_lib/rspec/mocks/argument_matchers.rb +264 -0
  137. data/vendor_lib/rspec/mocks/arity_calculator.rb +66 -0
  138. data/vendor_lib/rspec/mocks/configuration.rb +111 -0
  139. data/vendor_lib/rspec/mocks/error_generator.rb +203 -0
  140. data/vendor_lib/rspec/mocks/errors.rb +12 -0
  141. data/vendor_lib/rspec/mocks/example_methods.rb +201 -0
  142. data/vendor_lib/rspec/mocks/extensions/marshal.rb +17 -0
  143. data/vendor_lib/rspec/mocks/framework.rb +36 -0
  144. data/vendor_lib/rspec/mocks/instance_method_stasher.rb +112 -0
  145. data/vendor_lib/rspec/mocks/matchers/have_received.rb +99 -0
  146. data/vendor_lib/rspec/mocks/matchers/receive.rb +112 -0
  147. data/vendor_lib/rspec/mocks/matchers/receive_messages.rb +72 -0
  148. data/vendor_lib/rspec/mocks/message_expectation.rb +643 -0
  149. data/vendor_lib/rspec/mocks/method_double.rb +209 -0
  150. data/vendor_lib/rspec/mocks/method_reference.rb +95 -0
  151. data/vendor_lib/rspec/mocks/mock.rb +7 -0
  152. data/vendor_lib/rspec/mocks/mutate_const.rb +406 -0
  153. data/vendor_lib/rspec/mocks/object_reference.rb +90 -0
  154. data/vendor_lib/rspec/mocks/order_group.rb +82 -0
  155. data/vendor_lib/rspec/mocks/proxy.rb +269 -0
  156. data/vendor_lib/rspec/mocks/proxy_for_nil.rb +37 -0
  157. data/vendor_lib/rspec/mocks/space.rb +95 -0
  158. data/vendor_lib/rspec/mocks/standalone.rb +3 -0
  159. data/vendor_lib/rspec/mocks/stub_chain.rb +51 -0
  160. data/vendor_lib/rspec/mocks/syntax.rb +374 -0
  161. data/vendor_lib/rspec/mocks/targets.rb +90 -0
  162. data/vendor_lib/rspec/mocks/test_double.rb +109 -0
  163. data/vendor_lib/rspec/mocks/verifying_double.rb +77 -0
  164. data/vendor_lib/rspec/mocks/verifying_message_expecation.rb +60 -0
  165. data/vendor_lib/rspec/mocks/verifying_proxy.rb +151 -0
  166. data/vendor_lib/rspec/mocks/version.rb +7 -0
  167. data/vendor_lib/rspec/support.rb +6 -0
  168. data/vendor_lib/rspec/support/caller_filter.rb +56 -0
  169. data/vendor_lib/rspec/support/spec.rb +14 -0
  170. data/vendor_lib/rspec/support/spec/deprecation_helpers.rb +29 -0
  171. data/vendor_lib/rspec/support/spec/in_sub_process.rb +40 -0
  172. data/vendor_lib/rspec/support/spec/stderr_splitter.rb +50 -0
  173. data/vendor_lib/rspec/support/version.rb +7 -0
  174. data/vendor_lib/rspec/support/warnings.rb +41 -0
  175. data/vendor_lib/rspec/version.rb +5 -0
  176. metadata +268 -0
@@ -0,0 +1,21 @@
1
+ module RSpec
2
+ module Matchers
3
+ module BuiltIn
4
+ class Cover < BaseMatcher
5
+ def initialize(*expected)
6
+ @expected = expected
7
+ end
8
+
9
+ def matches?(range)
10
+ @actual = range
11
+ @expected.all? { |e| range.cover?(e) }
12
+ end
13
+
14
+ def does_not_match?(range)
15
+ @actual = range
16
+ expected.none? { |e| range.cover?(e) }
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ module RSpec
2
+ module Matchers
3
+ module BuiltIn
4
+ class Eq < BaseMatcher
5
+ def match(expected, actual)
6
+ actual == expected
7
+ end
8
+
9
+ def failure_message_for_should
10
+ "\nexpected: #{expected.inspect}\n got: #{actual.inspect}\n\n(compared using ==)\n"
11
+ end
12
+
13
+ def failure_message_for_should_not
14
+ "\nexpected: value != #{expected.inspect}\n got: #{actual.inspect}\n\n(compared using ==)\n"
15
+ end
16
+
17
+ def diffable?; true; end
18
+ end
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,23 @@
1
+ module RSpec
2
+ module Matchers
3
+ module BuiltIn
4
+ class Eql < BaseMatcher
5
+ def match(expected, actual)
6
+ actual.eql? expected
7
+ end
8
+
9
+ def failure_message_for_should
10
+ "\nexpected: #{expected.inspect}\n got: #{actual.inspect}\n\n(compared using eql?)\n"
11
+ end
12
+
13
+ def failure_message_for_should_not
14
+ "\nexpected: value != #{expected.inspect}\n got: #{actual.inspect}\n\n(compared using eql?)\n"
15
+ end
16
+
17
+ def diffable?
18
+ true
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,48 @@
1
+ module RSpec
2
+ module Matchers
3
+ module BuiltIn
4
+ class Equal < BaseMatcher
5
+ def match(expected, actual)
6
+ actual.equal? expected
7
+ end
8
+
9
+ def failure_message_for_should
10
+ return <<-MESSAGE
11
+
12
+ expected #{inspect_object(expected)}
13
+ got #{inspect_object(actual)}
14
+
15
+ Compared using equal?, which compares object identity,
16
+ but expected and actual are not the same object. Use
17
+ `#{eq_expression}` if you don't care about
18
+ object identity in this example.
19
+
20
+ MESSAGE
21
+ end
22
+
23
+ def failure_message_for_should_not
24
+ return <<-MESSAGE
25
+
26
+ expected not #{inspect_object(actual)}
27
+ got #{inspect_object(expected)}
28
+
29
+ Compared using equal?, which compares object identity.
30
+
31
+ MESSAGE
32
+ end
33
+
34
+ def diffable?; true; end
35
+
36
+ private
37
+
38
+ def inspect_object(o)
39
+ "#<#{o.class}:#{o.object_id}> => #{o.inspect}"
40
+ end
41
+
42
+ def eq_expression
43
+ Expectations::Syntax.positive_expression("actual", "eq(expected)")
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,26 @@
1
+ module RSpec
2
+ module Matchers
3
+ module BuiltIn
4
+ class Exist < BaseMatcher
5
+ def initialize(*expected)
6
+ @expected = expected
7
+ end
8
+
9
+ def matches?(actual)
10
+ @actual = actual
11
+ predicates = [:exist?, :exists?].select { |p| @actual.respond_to?(p) }
12
+ existence_values = predicates.map { |p| @actual.__send__(p, *@expected) }
13
+ uniq_truthy_values = existence_values.map { |v| !!v }.uniq
14
+
15
+ case uniq_truthy_values.size
16
+ when 0; raise NoMethodError.new("#{@actual.inspect} does not respond to either #exist? or #exists?")
17
+ when 1; existence_values.first
18
+ else raise "#exist? and #exists? returned different values:\n\n" +
19
+ " exist?: #{existence_values.first}\n" +
20
+ "exists?: #{existence_values.last}"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,48 @@
1
+ module RSpec
2
+ module Matchers
3
+ module BuiltIn
4
+ class Has
5
+ def initialize(expected, *args)
6
+ @expected, @args = expected, args
7
+ end
8
+
9
+ def matches?(actual)
10
+ actual.__send__(predicate(@expected), *@args)
11
+ end
12
+ alias == matches?
13
+
14
+ def failure_message_for_should
15
+ "expected ##{predicate(@expected)}#{failure_message_args_description} to return true, got false"
16
+ end
17
+
18
+ def failure_message_for_should_not
19
+ "expected ##{predicate(@expected)}#{failure_message_args_description} to return false, got true"
20
+ end
21
+
22
+ def description
23
+ [method_description(@expected), args_description].compact.join(' ')
24
+ end
25
+
26
+ private
27
+
28
+ def predicate(sym)
29
+ "#{sym.to_s.sub("have_","has_")}?".to_sym
30
+ end
31
+
32
+ def method_description(method)
33
+ method.to_s.gsub('_', ' ')
34
+ end
35
+
36
+ def args_description
37
+ return nil if @args.empty?
38
+ @args.map { |arg| arg.inspect }.join(', ')
39
+ end
40
+
41
+ def failure_message_args_description
42
+ desc = args_description
43
+ "(#{desc})" if desc
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,61 @@
1
+ module RSpec
2
+ module Matchers
3
+ module BuiltIn
4
+ class Include < BaseMatcher
5
+ def initialize(*expected)
6
+ @expected = expected
7
+ end
8
+
9
+ def matches?(actual)
10
+ @actual = actual
11
+ perform_match(:all?, :all?, @actual, @expected)
12
+ end
13
+
14
+ def does_not_match?(actual)
15
+ @actual = actual
16
+ perform_match(:none?, :any?, @actual, @expected)
17
+ end
18
+
19
+ def description
20
+ "include#{expected_to_sentence}"
21
+ end
22
+
23
+ def diffable?
24
+ # Matchers do not diff well, since diff uses their inspect
25
+ # output, which includes their instance variables and such.
26
+ @expected.none? { |e| RSpec::Matchers.is_a_matcher?(e) }
27
+ end
28
+
29
+ private
30
+
31
+ def perform_match(predicate, hash_predicate, actuals, expecteds)
32
+ expecteds.__send__(predicate) do |expected|
33
+ if comparing_hash_values?(actuals, expected)
34
+ expected.__send__(hash_predicate) { |k,v|
35
+ actuals.has_key?(k) && actuals[k] == v
36
+ }
37
+ elsif comparing_hash_keys?(actuals, expected)
38
+ actuals.has_key?(expected)
39
+ elsif comparing_with_matcher?(actual, expected)
40
+ actual.any? { |value| expected.matches?(value) }
41
+ else
42
+ actuals.include?(expected)
43
+ end
44
+ end
45
+ end
46
+
47
+ def comparing_hash_keys?(actual, expected)
48
+ actual.is_a?(Hash) && !expected.is_a?(Hash)
49
+ end
50
+
51
+ def comparing_hash_values?(actual, expected)
52
+ actual.is_a?(Hash) && expected.is_a?(Hash)
53
+ end
54
+
55
+ def comparing_with_matcher?(actual, expected)
56
+ actual.is_a?(Array) && RSpec::Matchers.is_a_matcher?(expected)
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,17 @@
1
+ module RSpec
2
+ module Matchers
3
+ module BuiltIn
4
+ class Match < BaseMatcher
5
+
6
+ def match(expected, actual)
7
+ actual.match expected
8
+ end
9
+
10
+ def diffable?
11
+ true
12
+ end
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,51 @@
1
+ module RSpec
2
+ module Matchers
3
+ module BuiltIn
4
+ class MatchArray < BaseMatcher
5
+ def match(expected, actual)
6
+ return false unless actual.respond_to? :to_ary
7
+ @extra_items = difference_between_arrays(actual, expected)
8
+ @missing_items = difference_between_arrays(expected, actual)
9
+ @extra_items.empty? & @missing_items.empty?
10
+ end
11
+
12
+ def failure_message_for_should
13
+ if actual.respond_to? :to_ary
14
+ message = "expected collection contained: #{safe_sort(expected).inspect}\n"
15
+ message += "actual collection contained: #{safe_sort(actual).inspect}\n"
16
+ message += "the missing elements were: #{safe_sort(@missing_items).inspect}\n" unless @missing_items.empty?
17
+ message += "the extra elements were: #{safe_sort(@extra_items).inspect}\n" unless @extra_items.empty?
18
+ else
19
+ message = "expected an array, actual collection was #{actual.inspect}"
20
+ end
21
+
22
+ message
23
+ end
24
+
25
+ def failure_message_for_should_not
26
+ "Matcher does not support should_not"
27
+ end
28
+
29
+ def description
30
+ "contain exactly #{_pretty_print(expected)}"
31
+ end
32
+
33
+ private
34
+
35
+ def safe_sort(array)
36
+ array.sort rescue array
37
+ end
38
+
39
+ def difference_between_arrays(array_1, array_2)
40
+ difference = array_1.to_ary.dup
41
+ array_2.to_ary.each do |element|
42
+ if index = difference.index(element)
43
+ difference.delete_at(index)
44
+ end
45
+ end
46
+ difference
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,154 @@
1
+ module RSpec
2
+ module Matchers
3
+ module BuiltIn
4
+ class RaiseError
5
+ def initialize(expected_error_or_message=Exception, expected_message=nil, &block)
6
+ @block = block
7
+ @actual_error = nil
8
+ case expected_error_or_message
9
+ when String, Regexp
10
+ @expected_error, @expected_message = Exception, expected_error_or_message
11
+ else
12
+ @expected_error, @expected_message = expected_error_or_message, expected_message
13
+ end
14
+ end
15
+
16
+ def with_message(expected_message)
17
+ raise_message_already_set if @expected_message
18
+ @expected_message = expected_message
19
+ self
20
+ end
21
+
22
+ def matches?(given_proc, negative_expectation = false, &block)
23
+ @block ||= block
24
+ @raised_expected_error = false
25
+ @with_expected_message = false
26
+ @eval_block = false
27
+ @eval_block_passed = false
28
+
29
+ unless given_proc.respond_to?(:call)
30
+ ::Kernel.warn "`raise_error` was called with non-proc object #{given_proc.inspect}"
31
+ return false
32
+ end
33
+
34
+ begin
35
+ given_proc.call
36
+ rescue Exception => @actual_error
37
+ if @actual_error == @expected_error || @expected_error === @actual_error
38
+ @raised_expected_error = true
39
+ @with_expected_message = verify_message
40
+ end
41
+ end
42
+
43
+ unless negative_expectation
44
+ eval_block if @raised_expected_error && @with_expected_message && @block
45
+ end
46
+
47
+ expectation_matched?
48
+ end
49
+
50
+ alias == matches?
51
+
52
+ def expectation_matched?
53
+ error_and_message_match? && block_matches?
54
+ end
55
+
56
+ def error_and_message_match?
57
+ @raised_expected_error && @with_expected_message
58
+ end
59
+
60
+ def block_matches?
61
+ @eval_block ? @eval_block_passed : true
62
+ end
63
+
64
+ def does_not_match?(given_proc)
65
+ prevent_invalid_expectations
66
+ !matches?(given_proc, :negative_expectation)
67
+ end
68
+
69
+ def eval_block
70
+ @eval_block = true
71
+ begin
72
+ @block[@actual_error]
73
+ @eval_block_passed = true
74
+ rescue Exception => err
75
+ @actual_error = err
76
+ end
77
+ end
78
+
79
+ def verify_message
80
+ case @expected_message
81
+ when nil
82
+ true
83
+ when Regexp
84
+ @expected_message =~ @actual_error.message
85
+ else
86
+ @expected_message == @actual_error.message
87
+ end
88
+ end
89
+
90
+ def failure_message_for_should
91
+ @eval_block ? @actual_error.message : "expected #{expected_error}#{given_error}"
92
+ end
93
+
94
+ def failure_message_for_should_not
95
+ "expected no #{expected_error}#{given_error}"
96
+ end
97
+
98
+ def description
99
+ "raise #{expected_error}"
100
+ end
101
+
102
+ private
103
+
104
+ def prevent_invalid_expectations
105
+ if (expecting_specific_exception? || @expected_message)
106
+ what_to_raise = if expecting_specific_exception? && @expected_message
107
+ "`expect { }.not_to raise_error(SpecificErrorClass, message)`"
108
+ elsif expecting_specific_exception?
109
+ "`expect { }.not_to raise_error(SpecificErrorClass)`"
110
+ elsif @expected_message
111
+ "`expect { }.not_to raise_error(message)`"
112
+ end
113
+ specific_class_error = ArgumentError.new("#{what_to_raise} is not valid, use `expect { }.not_to raise_error` (with no args) instead")
114
+ raise specific_class_error
115
+ end
116
+ end
117
+
118
+ def expected_error
119
+ case @expected_message
120
+ when nil
121
+ @expected_error.inspect
122
+ when Regexp
123
+ "#{@expected_error} with message matching #{@expected_message.inspect}"
124
+ else
125
+ "#{@expected_error} with #{@expected_message.inspect}"
126
+ end
127
+ end
128
+
129
+ def format_backtrace(backtrace)
130
+ formatter = Matchers.configuration.backtrace_formatter
131
+ formatter.format_backtrace(backtrace)
132
+ end
133
+
134
+ def given_error
135
+ return " but nothing was raised" unless @actual_error
136
+
137
+ backtrace = format_backtrace(@actual_error.backtrace)
138
+ [
139
+ ", got #{@actual_error.inspect} with backtrace:",
140
+ *backtrace
141
+ ].join("\n # ")
142
+ end
143
+
144
+ def expecting_specific_exception?
145
+ @expected_error != Exception
146
+ end
147
+
148
+ def raise_message_already_set
149
+ raise "`expect { }.to raise_error(message).with_message(message)` is not valid. The matcher only allows the expected message to be specified once"
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end