flexmock 0.3.1 → 0.3.2
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/CHANGELOG +5 -0
- data/README +1 -1
- data/Rakefile +1 -1
- data/lib/flexmock.rb +17 -6
- data/test/test_class_interception.rb +35 -12
- metadata +3 -2
data/CHANGELOG
CHANGED
data/README
CHANGED
data/Rakefile
CHANGED
data/lib/flexmock.rb
CHANGED
@@ -49,6 +49,8 @@ require 'test/unit'
|
|
49
49
|
class FlexMock
|
50
50
|
include Test::Unit::Assertions
|
51
51
|
|
52
|
+
class BadInterceptionError < RuntimeError; end
|
53
|
+
|
52
54
|
attr_reader :mock_name, :mock_groups
|
53
55
|
attr_accessor :mock_current_order
|
54
56
|
|
@@ -774,6 +776,7 @@ class FlexMock
|
|
774
776
|
@intercepted = nil
|
775
777
|
@target = nil
|
776
778
|
@replacement = nil
|
779
|
+
@proxy = nil
|
777
780
|
intercept(intercepted_class)
|
778
781
|
update
|
779
782
|
end
|
@@ -823,15 +826,15 @@ class FlexMock
|
|
823
826
|
|
824
827
|
# Implement interception on the classes defined.
|
825
828
|
def do_interception
|
826
|
-
@target_class = coerce_class(@target)
|
827
|
-
@replacement_class = coerce_class(@replacement)
|
829
|
+
@target_class = coerce_class(@target, "target")
|
830
|
+
@replacement_class = coerce_class(@replacement, "replacement")
|
828
831
|
case @intercepted
|
829
832
|
when String, Symbol
|
830
833
|
@intercepted_name = @intercepted.to_s
|
831
834
|
when Class
|
832
835
|
@intercepted_name = @intercepted.name
|
833
836
|
end
|
834
|
-
@intercepted_class = coerce_class(@intercepted)
|
837
|
+
@intercepted_class = coerce_class(@intercepted, "intercepted")
|
835
838
|
current_class = @target_class.const_get(@intercepted_name)
|
836
839
|
if ClassProxy === current_class
|
837
840
|
@proxy = current_class
|
@@ -845,14 +848,22 @@ class FlexMock
|
|
845
848
|
end
|
846
849
|
|
847
850
|
# Coerce a class object, string to symbol to be the class object.
|
848
|
-
def coerce_class(klass)
|
851
|
+
def coerce_class(klass, where)
|
849
852
|
case klass
|
850
853
|
when String, Symbol
|
851
|
-
|
852
|
-
|
854
|
+
lookup_const(klass.to_s, where)
|
855
|
+
else
|
853
856
|
klass
|
854
857
|
end
|
855
858
|
end
|
859
|
+
|
860
|
+
def lookup_const(name, where, target=Object)
|
861
|
+
begin
|
862
|
+
target.const_get(name)
|
863
|
+
rescue NameError
|
864
|
+
raise BadInterceptionError, "in #{where} class #{name}"
|
865
|
+
end
|
866
|
+
end
|
856
867
|
end
|
857
868
|
|
858
869
|
####################################################################
|
@@ -3,14 +3,6 @@
|
|
3
3
|
require 'test/unit'
|
4
4
|
require 'flexmock'
|
5
5
|
|
6
|
-
module A
|
7
|
-
class B
|
8
|
-
def sample
|
9
|
-
:ab
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
6
|
class Bark
|
15
7
|
def listen
|
16
8
|
:woof
|
@@ -30,9 +22,6 @@ class Dog
|
|
30
22
|
def bark
|
31
23
|
Bark.new
|
32
24
|
end
|
33
|
-
def wag
|
34
|
-
A::B.new
|
35
|
-
end
|
36
25
|
def bark_id
|
37
26
|
Bark.identify
|
38
27
|
end
|
@@ -44,7 +33,6 @@ class TestClassInterception < Test::Unit::TestCase
|
|
44
33
|
def test_original_functionality
|
45
34
|
dog = Dog.new
|
46
35
|
assert_equal :woof, dog.bark.listen
|
47
|
-
assert_equal :ab, dog.wag.sample
|
48
36
|
end
|
49
37
|
|
50
38
|
def test_interception
|
@@ -97,6 +85,41 @@ class TestClassInterception < Test::Unit::TestCase
|
|
97
85
|
assert_equal :barking, d.bark_id
|
98
86
|
end
|
99
87
|
|
88
|
+
def test_interceptions_fails_with_bad_class_names
|
89
|
+
ex = assert_raises(FlexMock::BadInterceptionError) {
|
90
|
+
intercept("BADNAME").in("Dog").with("Meow")
|
91
|
+
}
|
92
|
+
assert_match(/intercepted/, ex.message)
|
93
|
+
assert_match(/BADNAME/, ex.message)
|
94
|
+
|
95
|
+
ex = assert_raises(FlexMock::BadInterceptionError) {
|
96
|
+
intercept(Bark).in("BADNAME").with("Meow")
|
97
|
+
}
|
98
|
+
assert_match(/target/, ex.message)
|
99
|
+
assert_match(/BADNAME/, ex.message)
|
100
|
+
|
101
|
+
ex = assert_raises(FlexMock::BadInterceptionError) {
|
102
|
+
intercept(Bark).in("Dog").with("BADNAME")
|
103
|
+
}
|
104
|
+
assert_match(/replacement/, ex.message)
|
105
|
+
assert_match(/BADNAME/, ex.message)
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
class TestClassInterceptionExample < Test::Unit::TestCase
|
111
|
+
include FlexMock::TestCase
|
112
|
+
|
113
|
+
def setup
|
114
|
+
@dog = Dog.new
|
115
|
+
@mock = flexmock('bark')
|
116
|
+
intercept(Bark).in(Dog).with(@mock)
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_interception
|
120
|
+
@mock.should_receive(:new).with_no_args.once.and_return(:purr)
|
121
|
+
assert_equal :purr, @dog.bark
|
122
|
+
end
|
100
123
|
end
|
101
124
|
|
102
125
|
class TestMockFactory < Test::Unit::TestCase
|
metadata
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.
|
2
|
+
rubygems_version: 0.8.99.1
|
3
3
|
specification_version: 1
|
4
4
|
name: flexmock
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.3.
|
6
|
+
version: 0.3.2
|
7
7
|
date: 2006-06-17 00:00:00 -04:00
|
8
8
|
summary: Simple and Flexible Mock Objects for Testing
|
9
9
|
require_paths:
|
@@ -25,6 +25,7 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
25
25
|
platform: ruby
|
26
26
|
signing_key:
|
27
27
|
cert_chain:
|
28
|
+
post_install_message:
|
28
29
|
authors:
|
29
30
|
- Jim Weirich
|
30
31
|
files:
|