synthesis 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -1
- data/Rakefile +1 -1
- data/lib/synthesis.rb +2 -0
- data/lib/synthesis/adapter/expectations.rb +1 -0
- data/lib/synthesis/adapter/mocha.rb +1 -0
- data/lib/synthesis/adapter/mocha/mocha_expectation.rb +12 -0
- data/lib/synthesis/adapter/mocha/object.rb +4 -2
- data/lib/synthesis/class.rb +5 -0
- data/lib/synthesis/expectation.rb +17 -10
- data/lib/synthesis/expectation_record.rb +8 -2
- data/lib/synthesis/module.rb +5 -0
- data/lib/synthesis/object.rb +4 -0
- data/lib/synthesis/task.rb +1 -2
- data/test/synthesis/adapter/mocha/mocha_expectation_test.rb +19 -0
- data/test/synthesis/class_test.rb +8 -0
- data/test/synthesis/expectation_record_test.rb +6 -0
- data/test/synthesis/expectation_test.rb +12 -0
- data/test/synthesis/module_test.rb +8 -0
- data/test/synthesis/object_test.rb +8 -0
- metadata +9 -2
data/README
CHANGED
@@ -51,5 +51,5 @@ Synthesis will currently ignore dynamically generated at runtime methods.
|
|
51
51
|
== Related reading
|
52
52
|
|
53
53
|
* Synthesized Testing: A Primer ( http://nutrun.com/weblog/synthesized-testing-a-primer )
|
54
|
-
* Using Synthesis With Test::Unit and Mocha ( http://nutrun.com/weblog/using-synthesis-with-
|
54
|
+
* Using Synthesis With Test::Unit and Mocha ( http://nutrun.com/weblog/using-synthesis-with-testunit-and-mocha )
|
55
55
|
* Using Synthesis With Expectations ( http://nutrun.com/weblog/using-synthesis-with-expectations )
|
data/Rakefile
CHANGED
data/lib/synthesis.rb
CHANGED
@@ -5,6 +5,8 @@ $: << File.dirname(__FILE__)
|
|
5
5
|
require "synthesis/logging"
|
6
6
|
require "synthesis/recordable"
|
7
7
|
require "synthesis/object"
|
8
|
+
require "synthesis/class"
|
9
|
+
require "synthesis/module"
|
8
10
|
require "synthesis/expectation_record"
|
9
11
|
require "synthesis/method_invocation_watcher"
|
10
12
|
require "synthesis/expectation"
|
@@ -9,5 +9,6 @@ require "synthesis/adapter/mocha/object"
|
|
9
9
|
require "synthesis/adapter/mocha/class_method"
|
10
10
|
require "synthesis/adapter/mocha/expectation_record"
|
11
11
|
require "synthesis/adapter/mocha/method_invocation_watcher"
|
12
|
+
require "synthesis/adapter/mocha/mocha_expectation"
|
12
13
|
require "synthesis/adapter/expectations/expectations_adapter"
|
13
14
|
require "synthesis/adapter/expectations/suite_runner"
|
@@ -9,4 +9,5 @@ require "synthesis/adapter/mocha/object"
|
|
9
9
|
require "synthesis/adapter/mocha/class_method"
|
10
10
|
require "synthesis/adapter/mocha/expectation_record"
|
11
11
|
require "synthesis/adapter/mocha/method_invocation_watcher"
|
12
|
+
require "synthesis/adapter/mocha/mocha_expectation"
|
12
13
|
require "synthesis/adapter/mocha/mocha_adapter"
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Mocha
|
2
|
+
class Expectation
|
3
|
+
attr_accessor :synthesis_expectation
|
4
|
+
|
5
|
+
alias mocha_with with
|
6
|
+
|
7
|
+
def with(*expected_parameters, &matching_block)
|
8
|
+
synthesis_expectation.args = expected_parameters if synthesis_expectation
|
9
|
+
mocha_with *expected_parameters, &matching_block
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -2,8 +2,10 @@ class Object
|
|
2
2
|
alias mocha_expects expects
|
3
3
|
|
4
4
|
def expects(meth)
|
5
|
-
Synthesis::ExpectationRecord.add_expectation(self, meth)
|
6
|
-
mocha_expects(meth)
|
5
|
+
s_expectation = Synthesis::ExpectationRecord.add_expectation(self, meth)
|
6
|
+
m_expectation = mocha_expects(meth)
|
7
|
+
m_expectation.synthesis_expectation = s_expectation
|
8
|
+
m_expectation
|
7
9
|
end
|
8
10
|
|
9
11
|
def mocked!
|
@@ -1,16 +1,13 @@
|
|
1
1
|
module Synthesis
|
2
2
|
module Expectation
|
3
3
|
def self.new(receiver, method, args = [])
|
4
|
-
|
5
|
-
Singleton.new(receiver, method, args)
|
6
|
-
else
|
7
|
-
Instance.new(receiver, method, args)
|
8
|
-
end
|
4
|
+
receiver.expectation method, args
|
9
5
|
end
|
10
6
|
|
11
7
|
class Expectation
|
12
8
|
include Logging
|
13
|
-
attr_reader :receiver, :method
|
9
|
+
attr_reader :receiver, :method
|
10
|
+
attr_accessor :args
|
14
11
|
|
15
12
|
def initialize(receiver, method, args)
|
16
13
|
@receiver, @method, @args = receiver, method, args
|
@@ -34,6 +31,12 @@ module Synthesis
|
|
34
31
|
def invoked!
|
35
32
|
@invoked = true
|
36
33
|
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def args_match?(other)
|
38
|
+
self.args.map { |arg| arg.class } == other.args.map { |arg| arg.class }
|
39
|
+
end
|
37
40
|
end
|
38
41
|
|
39
42
|
class Singleton < Expectation
|
@@ -42,7 +45,9 @@ module Synthesis
|
|
42
45
|
end
|
43
46
|
|
44
47
|
def eql?(other)
|
45
|
-
@receiver.name == other.receiver.name &&
|
48
|
+
@receiver.name == other.receiver.name &&
|
49
|
+
@method == other.method &&
|
50
|
+
args_match?(other)
|
46
51
|
end
|
47
52
|
|
48
53
|
def hash
|
@@ -50,7 +55,7 @@ module Synthesis
|
|
50
55
|
end
|
51
56
|
|
52
57
|
def to_s
|
53
|
-
"#{@receiver.name}.#{@method}"
|
58
|
+
"#{@receiver.name}.#{@method}(#{@args.map { |arg| arg.class } * ', '})"
|
54
59
|
end
|
55
60
|
end
|
56
61
|
|
@@ -60,7 +65,9 @@ module Synthesis
|
|
60
65
|
end
|
61
66
|
|
62
67
|
def eql?(other)
|
63
|
-
meta_receiver.name == other.meta_receiver.name &&
|
68
|
+
meta_receiver.name == other.meta_receiver.name &&
|
69
|
+
@method == other.method &&
|
70
|
+
args_match?(other)
|
64
71
|
end
|
65
72
|
|
66
73
|
def hash
|
@@ -68,7 +75,7 @@ module Synthesis
|
|
68
75
|
end
|
69
76
|
|
70
77
|
def to_s
|
71
|
-
"#{meta_receiver.name}.new.#{@method}"
|
78
|
+
"#{meta_receiver.name}.new.#{@method}(#{@args.map { |arg| arg.class } * ', '})"
|
72
79
|
end
|
73
80
|
end
|
74
81
|
|
@@ -4,7 +4,11 @@ module Synthesis
|
|
4
4
|
include Logging
|
5
5
|
|
6
6
|
def add_expectation(receiver, method, args = [])
|
7
|
-
|
7
|
+
unless ignore? receiver
|
8
|
+
expectation = Expectation.new(receiver, method, args)
|
9
|
+
expectations << expectation
|
10
|
+
expectation
|
11
|
+
end
|
8
12
|
end
|
9
13
|
|
10
14
|
def ignore(*args)
|
@@ -12,7 +16,9 @@ module Synthesis
|
|
12
16
|
end
|
13
17
|
|
14
18
|
def expectations
|
15
|
-
@expectations ||=
|
19
|
+
@expectations ||= []
|
20
|
+
@expectations.uniq!
|
21
|
+
@expectations
|
16
22
|
end
|
17
23
|
|
18
24
|
def ignored
|
data/lib/synthesis/object.rb
CHANGED
data/lib/synthesis/task.rb
CHANGED
@@ -7,8 +7,7 @@ module Synthesis
|
|
7
7
|
attr_accessor :verbose, :pattern, :ruby_opts, :adapter, :out
|
8
8
|
|
9
9
|
def initialize(name='synthesis:test')
|
10
|
-
@name = name
|
11
|
-
@ignored = []
|
10
|
+
@name, @ignored = name, []
|
12
11
|
yield self if block_given?
|
13
12
|
@pattern ||= 'test/**/*.rb'
|
14
13
|
@ruby_opts ||= []
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require File.dirname(__FILE__) + "/../../../../lib/synthesis/adapter/mocha"
|
3
|
+
|
4
|
+
class MochaExpectationTest < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@mocha_expectation = Mocha::Expectation.new :mock, :blah
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_holds_synthesis_expectation
|
10
|
+
@mocha_expectation.synthesis_expectation = 1
|
11
|
+
assert_equal 1, @mocha_expectation.synthesis_expectation
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_with_passes_expected_params_to_synthesis_expectation
|
15
|
+
@mocha_expectation.synthesis_expectation = Synthesis::Expectation.new(Hash, :foo)
|
16
|
+
@mocha_expectation.with 1, 2
|
17
|
+
assert_equal([1, 2], @mocha_expectation.synthesis_expectation.args)
|
18
|
+
end
|
19
|
+
end
|
@@ -42,5 +42,11 @@ module Synthesis
|
|
42
42
|
ExpectationRecord.add_expectation Hash, :foo
|
43
43
|
assert ExpectationRecord.expectations.empty?
|
44
44
|
end
|
45
|
+
|
46
|
+
def test_returns_added_expectation_on_add
|
47
|
+
expected = Expectation.new Hash, :foo
|
48
|
+
actual = ExpectationRecord.add_expectation Hash, :foo
|
49
|
+
assert_equal expected, actual
|
50
|
+
end
|
45
51
|
end
|
46
52
|
end
|
@@ -43,6 +43,18 @@ module Synthesis
|
|
43
43
|
exp2 = Expectation.new Array.new, :foo
|
44
44
|
assert_not_equal exp1, exp2
|
45
45
|
end
|
46
|
+
|
47
|
+
def test_equality_based_on_same_type_args
|
48
|
+
exp1 = Expectation.new Object.new, :foo, [1, 2]
|
49
|
+
exp2 = Expectation.new Object.new, :foo, [1, 2]
|
50
|
+
assert_equal exp1, exp2
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_args_based_non_equality_based_on_different_type_args
|
54
|
+
exp1 = Expectation.new Object.new, :foo, [1, Hash.new]
|
55
|
+
exp2 = Expectation.new Object.new, :foo, [1, 2]
|
56
|
+
assert_not_equal exp1, exp2
|
57
|
+
end
|
46
58
|
|
47
59
|
def test_make_sure_equality_works_with_uniq
|
48
60
|
arr = [
|
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.2
|
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-01-
|
12
|
+
date: 2008-01-14 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -30,13 +30,16 @@ files:
|
|
30
30
|
- lib/synthesis/adapter/mocha/expectation_record.rb
|
31
31
|
- lib/synthesis/adapter/mocha/method_invocation_watcher.rb
|
32
32
|
- lib/synthesis/adapter/mocha/mocha_adapter.rb
|
33
|
+
- lib/synthesis/adapter/mocha/mocha_expectation.rb
|
33
34
|
- lib/synthesis/adapter/mocha/object.rb
|
34
35
|
- lib/synthesis/adapter/mocha.rb
|
35
36
|
- lib/synthesis/adapter.rb
|
37
|
+
- lib/synthesis/class.rb
|
36
38
|
- lib/synthesis/expectation.rb
|
37
39
|
- lib/synthesis/expectation_record.rb
|
38
40
|
- lib/synthesis/logging.rb
|
39
41
|
- lib/synthesis/method_invocation_watcher.rb
|
42
|
+
- lib/synthesis/module.rb
|
40
43
|
- lib/synthesis/object.rb
|
41
44
|
- lib/synthesis/recordable.rb
|
42
45
|
- lib/synthesis/report.rb
|
@@ -45,10 +48,14 @@ files:
|
|
45
48
|
- lib/synthesis.rb
|
46
49
|
- test/synthesis/adapter/mocha/expectation_record_test.rb
|
47
50
|
- test/synthesis/adapter/mocha/method_invocation_watcher_test.rb
|
51
|
+
- test/synthesis/adapter/mocha/mocha_expectation_test.rb
|
48
52
|
- test/synthesis/adapter/mocha/object_test.rb
|
53
|
+
- test/synthesis/class_test.rb
|
49
54
|
- test/synthesis/expectation_record_test.rb
|
50
55
|
- test/synthesis/expectation_test.rb
|
51
56
|
- test/synthesis/method_invocation_watcher_test.rb
|
57
|
+
- test/synthesis/module_test.rb
|
58
|
+
- test/synthesis/object_test.rb
|
52
59
|
- test/synthesis/recordable_test.rb
|
53
60
|
- test_project/expectations/test/data_brander_test.rb
|
54
61
|
- test_project/expectations/test/storage_test.rb
|