synthesis 0.0.1 → 0.0.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/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
|