synthesis 0.0.9 → 0.0.10
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 +4 -0
- data/Rakefile +1 -1
- data/lib/synthesis/expectation_record.rb +32 -17
- data/test/synthesis/adapter/mocha/expectation_record_test.rb +1 -1
- data/test/synthesis/adapter/rspec/expectation_record_test.rb +1 -1
- data/test/synthesis/adapter/rspec/methods_test.rb +1 -1
- data/test/synthesis/expectation_record_test.rb +1 -2
- data/test/synthesis/method_invocation_watcher_test.rb +4 -0
- metadata +2 -2
data/README
CHANGED
@@ -67,6 +67,10 @@ To use with Expectations, redirecting output to a file
|
|
67
67
|
|
68
68
|
Reporting the location (filename and line number) of tested/untested expectations doesn't work as intended with the Expectations adapter.
|
69
69
|
|
70
|
+
== Contributors
|
71
|
+
|
72
|
+
Danilo Sato, Paul Nasrat
|
73
|
+
|
70
74
|
== Related reading
|
71
75
|
|
72
76
|
* Synthesized Testing: A Primer ( http://nutrun.com/weblog/synthesized-testing-a-primer )
|
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ module Synthesis
|
|
2
2
|
class ExpectationRecord
|
3
3
|
class << self
|
4
4
|
include Logging
|
5
|
-
|
5
|
+
|
6
6
|
def add_expectation(receiver, method, track, args = [])
|
7
7
|
unless ignore? receiver
|
8
8
|
expectation = Expectation.new(receiver, method, track, args)
|
@@ -10,56 +10,71 @@ module Synthesis
|
|
10
10
|
expectation
|
11
11
|
end
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def ignore(*args)
|
15
15
|
ignored.merge args
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def expectations
|
19
|
+
# Using an Array instead of a Set because the +Expectation+ instance is not complete when first added
|
20
|
+
# obj.expects(:method).with(:args)
|
21
|
+
# the +Expectation+ will be added when obj.expects(:method) is called
|
22
|
+
# the +Expectation+ arguments will be added when .with(:args) is called
|
19
23
|
@expectations ||= []
|
20
24
|
@expectations.uniq!
|
21
25
|
@expectations
|
22
26
|
end
|
23
|
-
|
27
|
+
|
24
28
|
def ignored
|
25
29
|
@ignored ||= Set.new
|
26
30
|
end
|
27
|
-
|
31
|
+
|
28
32
|
def [](matcher)
|
29
|
-
|
33
|
+
# Using a hash when recording invocations for improving performance
|
34
|
+
expectations_hash[matcher] || Expectation::NilExpectation.new
|
30
35
|
end
|
31
|
-
|
36
|
+
|
32
37
|
def record_invocations
|
33
38
|
expectations.each { |e| e.record_invocations }
|
34
39
|
end
|
35
|
-
|
40
|
+
|
36
41
|
def tested_expectations
|
37
42
|
expectations.select { |e| e.invoked? }
|
38
43
|
end
|
39
|
-
|
44
|
+
|
40
45
|
def untested_expectations
|
41
46
|
expectations.select { |e| !e.invoked? }
|
42
|
-
end
|
43
|
-
|
47
|
+
end
|
48
|
+
|
44
49
|
def print_tested_expectations
|
45
50
|
log; log "Tested Expectations: "
|
46
51
|
tested_expectations.each { |e| log e }
|
47
52
|
end
|
48
|
-
|
53
|
+
|
49
54
|
def print_untested_expectations
|
50
55
|
log; log "Untested Expectations: "
|
51
56
|
untested_expectations.each { |e| log e }
|
52
57
|
end
|
53
|
-
|
58
|
+
|
54
59
|
def print_ignored
|
55
|
-
log; log "Ignoring: #{ignored.to_a * ', '}"
|
60
|
+
log; log "Ignoring: #{ignored.to_a * ', '}"
|
56
61
|
end
|
57
|
-
|
62
|
+
|
58
63
|
private
|
59
|
-
|
64
|
+
def expectations_hash
|
65
|
+
@expectations_hash ||= expectations.inject({}) do |hash, expectation|
|
66
|
+
hash[expectation] = expectation
|
67
|
+
hash
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
60
71
|
def ignore?(obj)
|
61
72
|
ignored.include?(obj.class) || ignored.include?(obj) || obj.is_a?(MOCK_OBJECT)
|
62
|
-
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def reset!
|
76
|
+
@expectations_hash, @expectations, @ignored = nil
|
77
|
+
end
|
63
78
|
end
|
64
79
|
end
|
65
80
|
end
|
@@ -3,8 +3,7 @@ require File.dirname(__FILE__) + "/helper"
|
|
3
3
|
module Synthesis
|
4
4
|
class ExpectationRecordTest < Test::Unit::TestCase
|
5
5
|
def teardown
|
6
|
-
ExpectationRecord.
|
7
|
-
ExpectationRecord.ignored.clear
|
6
|
+
ExpectationRecord.send(:reset!)
|
8
7
|
end
|
9
8
|
|
10
9
|
def test_adds_expectation
|
@@ -2,6 +2,10 @@ require File.dirname(__FILE__) + "/helper"
|
|
2
2
|
|
3
3
|
module Synthesis
|
4
4
|
class MethodInvocationWatcherTest < Test::Unit::TestCase
|
5
|
+
def teardown
|
6
|
+
ExpectationRecord.send(:reset!)
|
7
|
+
end
|
8
|
+
|
5
9
|
def test_marks_expectation_invoked
|
6
10
|
ExpectationRecord.add_expectation(Hash, :to_s, :track, []).add_return_values(1)
|
7
11
|
MethodInvocationWatcher.invoked(Hash, :to_s, [], [1])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: synthesis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stuart Caborn, George Malamidis
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-04-
|
12
|
+
date: 2008-04-30 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|