expectations 0.1.6 → 0.1.7
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/README +1 -1
- data/lib/expectations/delegate_expectation.rb +24 -0
- data/lib/expectations/delegate_recorder.rb +22 -0
- data/lib/expectations/expectation.rb +4 -4
- data/lib/expectations/object.rb +4 -0
- data/lib/expectations/results.rb +3 -1
- data/lib/expectations.rb +2 -0
- data/rakefile.rb +1 -1
- data/test/expectations/expectation_test.rb +8 -8
- data/test/successes_test.rb +14 -1
- metadata +4 -2
data/README
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Expectations::DelegateExpectation
|
2
|
+
def execute
|
3
|
+
begin
|
4
|
+
mocha_setup
|
5
|
+
actual = instance_exec expected.mock, &block
|
6
|
+
if expected.verify(actual)
|
7
|
+
self.extend(Expectations::Results::Fulfilled)
|
8
|
+
else
|
9
|
+
self.extend(Expectations::Results::StateBasedFailure)
|
10
|
+
self.message = "Delegation may have occurred; however, the return value could not be verified. Did you specify something after the delegation method?"
|
11
|
+
end
|
12
|
+
rescue Mocha::ExpectationError => ex
|
13
|
+
self.extend(Expectations::Results::BehaviorBasedFailure)
|
14
|
+
self.message = "Expected #{expected.klass} to delegate #{expected.meth} to #{expected.subject}; however, #{expected.subject}.#{expected.meth} was never called"
|
15
|
+
rescue Exception => ex
|
16
|
+
self.extend(Expectations::Results::Error)
|
17
|
+
self.exception = ex
|
18
|
+
ensure
|
19
|
+
mocha_teardown
|
20
|
+
end
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Expectations::DelegateRecorder
|
2
|
+
attr_reader :klass, :subject, :meth
|
3
|
+
def initialize(klass, meth)
|
4
|
+
@klass, @subject_mock, @meth = klass, Mocha::Mock.new, meth
|
5
|
+
@subject_mock.expects(meth).returns(:the_subjects_response)
|
6
|
+
end
|
7
|
+
|
8
|
+
def to(subject)
|
9
|
+
@subject = subject
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
def mock
|
14
|
+
@klass.stubs(@subject).returns(@subject_mock)
|
15
|
+
@klass
|
16
|
+
end
|
17
|
+
|
18
|
+
def verify(actual)
|
19
|
+
@subject_mock.verify
|
20
|
+
actual == :the_subjects_response
|
21
|
+
end
|
22
|
+
end
|
@@ -5,10 +5,10 @@ class Expectations::Expectation
|
|
5
5
|
def initialize(expected, &block)
|
6
6
|
self.expected, self.block = expected, block
|
7
7
|
self.file, self.line = eval "[__FILE__, __LINE__]", block.binding
|
8
|
-
|
9
|
-
extend(Expectations::
|
10
|
-
|
11
|
-
extend(Expectations::StateBasedExpectation)
|
8
|
+
case
|
9
|
+
when expected.is_a?(Expectations::DelegateRecorder) then extend(Expectations::DelegateExpectation)
|
10
|
+
when expected.is_a?(Expectations::MockRecorder) then extend(Expectations::BehaviorBasedExpectation)
|
11
|
+
else extend(Expectations::StateBasedExpectation)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
data/lib/expectations/object.rb
CHANGED
data/lib/expectations/results.rb
CHANGED
@@ -32,7 +32,9 @@ module Expectations::Results
|
|
32
32
|
module StateBasedFailure
|
33
33
|
include Expectations::Results
|
34
34
|
char "F"
|
35
|
-
|
35
|
+
attr_writer :message
|
36
|
+
def message
|
37
|
+
return @message if @message
|
36
38
|
result = "expected: <#{expected.inspect}> got: <#{actual.inspect}>"
|
37
39
|
result += "\nstring details: #{expected.diff(actual)}" if expected.is_a?(String) && actual.is_a?(String)
|
38
40
|
result
|
data/lib/expectations.rb
CHANGED
@@ -16,6 +16,8 @@ require 'benchmark'
|
|
16
16
|
require 'erb'
|
17
17
|
require 'fileutils'
|
18
18
|
require File.expand_path(File.dirname(__FILE__) + '/expectations/object')
|
19
|
+
require File.expand_path(File.dirname(__FILE__) + '/expectations/delegate_expectation')
|
20
|
+
require File.expand_path(File.dirname(__FILE__) + '/expectations/delegate_recorder')
|
19
21
|
require File.expand_path(File.dirname(__FILE__) + '/expectations/xml_string')
|
20
22
|
require File.expand_path(File.dirname(__FILE__) + '/expectations/regexp')
|
21
23
|
require File.expand_path(File.dirname(__FILE__) + '/expectations/range')
|
data/rakefile.rb
CHANGED
@@ -46,7 +46,7 @@ specification = Gem::Specification.new do |s|
|
|
46
46
|
expect NoMethodError do
|
47
47
|
Object.invalid_method_call
|
48
48
|
end."
|
49
|
-
s.version = "0.1.
|
49
|
+
s.version = "0.1.7"
|
50
50
|
s.author = 'Jay Fields'
|
51
51
|
s.description = "A lightweight unit testing framework. Tests (expectations) will be written as follows
|
52
52
|
expect 2 do
|
@@ -1,24 +1,24 @@
|
|
1
1
|
require File.dirname(__FILE__) + "/../test_helper"
|
2
2
|
|
3
3
|
Expectations do
|
4
|
-
expect
|
5
|
-
Expectations::Expectation.new(1) { 2 }.execute
|
4
|
+
expect Expectations::Results::StateBasedFailure do
|
5
|
+
Expectations::Expectation.new(1) { 2 }.execute
|
6
6
|
end
|
7
7
|
|
8
|
-
expect
|
9
|
-
Expectations::Expectation.new(1) { 1 }.execute
|
8
|
+
expect Expectations::Results::Fulfilled do
|
9
|
+
Expectations::Expectation.new(1) { 1 }.execute
|
10
10
|
end
|
11
11
|
|
12
|
-
expect
|
13
|
-
Expectations::Expectation.new(1) { raise }.execute
|
12
|
+
expect Expectations::Results::Error do
|
13
|
+
Expectations::Expectation.new(1) { raise }.execute
|
14
14
|
end
|
15
15
|
|
16
16
|
expect "undefined method `no_method' for Object:Class" do
|
17
17
|
Expectations::Expectation.new(ArgumentError) { Object.no_method }.execute.exception.to_s
|
18
18
|
end
|
19
19
|
|
20
|
-
expect
|
21
|
-
Expectations::Expectation.new(NoMethodError) { Object.no_method }.execute
|
20
|
+
expect Expectations::Results::Fulfilled do
|
21
|
+
Expectations::Expectation.new(NoMethodError) { Object.no_method }.execute
|
22
22
|
end
|
23
23
|
|
24
24
|
expect nil do
|
data/test/successes_test.rb
CHANGED
@@ -70,10 +70,12 @@ Expectations do
|
|
70
70
|
String
|
71
71
|
end
|
72
72
|
|
73
|
+
# State based test with XML strings, whitespace between tags is ignored
|
73
74
|
expect xml("<a><foo>bar</foo></a>") do
|
74
75
|
"<a>\n\t<foo>bar</foo> \n</a>"
|
75
76
|
end
|
76
77
|
|
78
|
+
# State based test with XML strings, whitespace between tags is ignored
|
77
79
|
expect xml(<<-eos) do
|
78
80
|
<one>
|
79
81
|
<two>
|
@@ -84,7 +86,18 @@ Expectations do
|
|
84
86
|
eos
|
85
87
|
"<one><two><three>4</three>
|
86
88
|
<five> 6 </five>
|
87
|
-
</two></one>"
|
89
|
+
</two></one>"
|
90
|
+
end
|
91
|
+
|
92
|
+
# this is normally defined in the file specific to the class
|
93
|
+
klass = Class.new do
|
94
|
+
def save(arg)
|
95
|
+
record.save(arg)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
# State based delegation test
|
99
|
+
expect klass.new.to_delegate(:save).to(:record) do |instance|
|
100
|
+
instance.save(1)
|
88
101
|
end
|
89
102
|
|
90
103
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: expectations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jay Fields
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-02-15 00:00:00 -10:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -23,6 +23,8 @@ extra_rdoc_files:
|
|
23
23
|
- README
|
24
24
|
files:
|
25
25
|
- lib/expectations/behavior_based_expectation.rb
|
26
|
+
- lib/expectations/delegate_expectation.rb
|
27
|
+
- lib/expectations/delegate_recorder.rb
|
26
28
|
- lib/expectations/expectation.rb
|
27
29
|
- lib/expectations/mock_recorder.rb
|
28
30
|
- lib/expectations/module.rb
|