rr 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,7 @@
1
+ * 0.1.4
2
+ - TimesCalledError prints the backtrace to where the Scenario was defined when being verified
3
+ - Error message includes method name when Scenario is not found
4
+
1
5
  * 0.1.3
2
6
  - Fixed issue where Double#placeholder_name issues when Double method name has a ! or ?
3
7
 
data/Rakefile CHANGED
@@ -21,7 +21,7 @@ def run_suite
21
21
  end
22
22
 
23
23
  PKG_NAME = "rr"
24
- PKG_VERSION = "0.1.3"
24
+ PKG_VERSION = "0.1.4"
25
25
  PKG_FILES = FileList[
26
26
  '[A-Z]*',
27
27
  '*.rb',
@@ -96,9 +96,9 @@ describe Double, " method dispatching where there are scenarios" do
96
96
  scenario_2 = @space.create_scenario(@double)
97
97
  scenario_2.with(3)
98
98
 
99
- proc {@object.foobar(:no_matching_args)}.should raise_error(
99
+ proc {@object.foobar(:arg1, :arg2)}.should raise_error(
100
100
  Errors::ScenarioNotFoundError,
101
- "No scenario for arguments [:no_matching_args]"
101
+ "No scenario for foobar(:arg1, :arg2)"
102
102
  )
103
103
  end
104
104
  end
@@ -42,6 +42,25 @@ module Errors
42
42
 
43
43
  backtrace.should include("lib/rr")
44
44
  end
45
+
46
+ it "returns custom backtrace when backtrace is set" do
47
+ error = RRError.new
48
+ custom_backtrace = caller
49
+ error.backtrace = custom_backtrace
50
+ error.backtrace.should == custom_backtrace
51
+ end
52
+
53
+ it "returns normal backtrace when backtrace is not set" do
54
+ error = nil
55
+ expected_line = __LINE__ + 2
56
+ begin
57
+ raise RRError
58
+ rescue RRError => e
59
+ error = e
60
+ end
61
+ error.backtrace.first.should include(__FILE__)
62
+ error.backtrace.first.should include(expected_line.to_s)
63
+ end
45
64
  end
46
65
  end
47
66
  end
@@ -66,6 +66,7 @@ describe TimesCalledExpectation, "#verify! when passed an Integer (2)" do
66
66
 
67
67
  before do
68
68
  @expectation = TimesCalledExpectation.new(2)
69
+ @expected_line = __LINE__ - 1
69
70
  end
70
71
 
71
72
  it "passes after verify_input called 2 times" do
@@ -86,6 +87,17 @@ describe TimesCalledExpectation, "#verify! when passed an Integer (2)" do
86
87
  @expectation.verify_input
87
88
  end.should raise_error(Errors::TimesCalledError)
88
89
  end
90
+
91
+ it "has a backtrace to where the TimesCalledExpectation was instantiated on failure" do
92
+ error = nil
93
+ begin
94
+ @expectation.verify!
95
+ rescue Errors::TimesCalledError => e
96
+ error = e
97
+ end
98
+ e.backtrace.first.should include(__FILE__)
99
+ e.backtrace.first.should include(":#{@expected_line}")
100
+ end
89
101
  end
90
102
 
91
103
  describe TimesCalledExpectation, "#verify! when passed a Range (1..2)" do
@@ -77,7 +77,9 @@ module RR
77
77
  end
78
78
  end
79
79
  matching_scenarios.first.call(*args) unless matching_scenarios.empty?
80
- raise Errors::ScenarioNotFoundError, "No scenario for arguments #{args.inspect}"
80
+
81
+ formatted_errors = args.collect {|arg| arg.inspect}.join(', ')
82
+ raise Errors::ScenarioNotFoundError, "No scenario for #{@method_name}(#{formatted_errors})"
81
83
  end
82
84
 
83
85
  def placeholder_name
@@ -3,8 +3,9 @@ module Errors
3
3
  BACKTRACE_IDENTIFIER = /lib\/rr/
4
4
 
5
5
  class RRError < RuntimeError
6
+ attr_writer :backtrace
6
7
  def backtrace
7
- original_backtrace = super
8
+ original_backtrace = (@backtrace) ? @backtrace : super
8
9
  return original_backtrace unless RR::Space.trim_backtrace
9
10
 
10
11
  return original_backtrace unless original_backtrace.respond_to?(:each)
@@ -7,6 +7,7 @@ module RR
7
7
  raise ArgumentError, "Cannot pass in both an argument and a block" if times && time_condition_block
8
8
  @times = times || time_condition_block
9
9
  @times_called = 0
10
+ @verify_backtrace = caller[1..-1]
10
11
  end
11
12
 
12
13
  def verify_input
@@ -24,7 +25,15 @@ module RR
24
25
  end
25
26
 
26
27
  def verify!
27
- raise Errors::TimesCalledError unless verify
28
+ unless verify
29
+ if @verify_backtrace
30
+ error = Errors::TimesCalledError.new
31
+ error.backtrace = @verify_backtrace
32
+ raise error
33
+ else
34
+ raise Errors::TimesCalledError
35
+ end
36
+ end
28
37
  end
29
38
 
30
39
  protected
metadata CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.3
3
3
  specification_version: 1
4
4
  name: rr
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.3
6
+ version: 0.1.4
7
7
  date: 2007-07-09 00:00:00 -07:00
8
8
  summary: RR (Double Ruby) is a double framework that features a rich selection of double techniques and a terse syntax. http://xunitpatterns.com/Test%20Double.html
9
9
  require_paths: