synthesis 0.0.5 → 0.0.6
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 +16 -5
- data/Rakefile +25 -5
- data/lib/synthesis/adapter/expectations.rb +16 -7
- data/lib/synthesis/adapter/mocha.rb +14 -8
- data/lib/synthesis/adapter/rspec.rb +19 -0
- data/lib/synthesis/adapter.rb +51 -7
- data/lib/synthesis/expectation_record.rb +1 -1
- data/test/synthesis/adapter/mocha/expectation_record_test.rb +1 -2
- data/test/synthesis/adapter/mocha/helper.rb +2 -0
- data/test/synthesis/adapter/mocha/mocha_expectation_test.rb +1 -2
- data/test/synthesis/adapter/mocha/mocha_test.rb +9 -0
- data/test/synthesis/adapter/mocha/object_test.rb +1 -2
- data/test/synthesis/adapter/rspec/expectation_record_test.rb +15 -0
- data/test/synthesis/adapter/rspec/helper.rb +2 -0
- data/test/synthesis/adapter/rspec/message_expectation_test.rb +19 -0
- data/test/synthesis/adapter/rspec/methods_test.rb +18 -0
- data/test/synthesis/class_test.rb +1 -2
- data/test/synthesis/expectation_record_test.rb +1 -2
- data/test/synthesis/expectation_test.rb +1 -2
- data/test/synthesis/helper.rb +3 -0
- data/test/synthesis/method_invocation_watcher_test.rb +1 -2
- data/test/synthesis/module_test.rb +1 -2
- data/test/synthesis/object_test.rb +1 -2
- data/test/synthesis/recordable_test.rb +1 -2
- data/test_project/expectations/test/data_brander_test.rb +1 -1
- data/test_project/mocha/test/data_brander_test.rb +6 -0
- data/test_project/rspec/data_brander_spec.rb +16 -0
- data/test_project/rspec/storage_spec.rb +13 -0
- metadata +12 -11
- data/lib/synthesis/adapter/expectations/expectations_adapter.rb +0 -7
- data/lib/synthesis/adapter/expectations/suite_runner.rb +0 -7
- data/lib/synthesis/adapter/mocha/class_method.rb +0 -17
- data/lib/synthesis/adapter/mocha/expectation_record.rb +0 -12
- data/lib/synthesis/adapter/mocha/method_invocation_watcher.rb +0 -11
- data/lib/synthesis/adapter/mocha/mocha_adapter.rb +0 -8
- data/lib/synthesis/adapter/mocha/mocha_expectation.rb +0 -12
- data/lib/synthesis/adapter/mocha/object.rb +0 -22
- data/test/synthesis/adapter/mocha/method_invocation_watcher_test.rb +0 -29
data/README
CHANGED
@@ -16,13 +16,15 @@ Synthesis RubyForge page ( http://rubyforge.org/projects/synthesis )
|
|
16
16
|
|
17
17
|
Synthesis's core doesn't have any dependencies.
|
18
18
|
|
19
|
-
When used with the Expectations adapter, it will depend on the Expectations[http://expectations.rubyforge.org] library.
|
20
|
-
|
21
19
|
When used with the Mocha adapter, it will depend on the Mocha[http://mocha.rubyforge.org] library.
|
22
20
|
|
21
|
+
When used with the RSpec adapter, it will depend on the RSpec[http://rspec.info/] library.
|
22
|
+
|
23
|
+
When used with the Expectations adapter, it will depend on the Expectations[http://expectations.rubyforge.org] library.
|
24
|
+
|
23
25
|
== Usage
|
24
26
|
|
25
|
-
Synthesis can be used through its Rake task. It currently has
|
27
|
+
Synthesis can be used through its Rake task. It currently has three supported adapters: Mocha (with Test::Unit), RSpec and Expectations. If +adapter+ is not explicitly specified, the Mocha adapter will be used by default.
|
26
28
|
|
27
29
|
By default, Synthesis outputs to +STDOUT+, but output can be redirected to alternative IO streams.
|
28
30
|
|
@@ -30,6 +32,8 @@ Synthesis can be setup to ignore certain classes or modules when collecting expe
|
|
30
32
|
|
31
33
|
If +pattern+ is not specified, it will default to <tt>test/**/*.rb</tt>
|
32
34
|
|
35
|
+
== Usage examples
|
36
|
+
|
33
37
|
To use with Test::Unit and Mocha, ignoring Array and Hash:
|
34
38
|
|
35
39
|
require "synthesis/task"
|
@@ -39,6 +43,15 @@ To use with Test::Unit and Mocha, ignoring Array and Hash:
|
|
39
43
|
t.ignore Array, Hash
|
40
44
|
end
|
41
45
|
|
46
|
+
To use with RSpec, running all specs in the <tt>specs</tt> directory:
|
47
|
+
|
48
|
+
require "synthesis/task"
|
49
|
+
|
50
|
+
Synthesis::Task.new do |t|
|
51
|
+
t.adapter = :rspec
|
52
|
+
t.pattern = 'specs/*_spec.rb'
|
53
|
+
end
|
54
|
+
|
42
55
|
To use with Expectations, redirecting output to a file
|
43
56
|
|
44
57
|
require "synthesis/task"
|
@@ -50,8 +63,6 @@ To use with Expectations, redirecting output to a file
|
|
50
63
|
|
51
64
|
== Known Issues
|
52
65
|
|
53
|
-
Synthesis will currently ignore dynamically generated at runtime methods.
|
54
|
-
|
55
66
|
Reporting the location (filename and line number) of tested/untested expectations doesn't work as intended with the Expectations adapter.
|
56
67
|
|
57
68
|
== Related reading
|
data/Rakefile
CHANGED
@@ -6,8 +6,23 @@ require 'rake/contrib/sshpublisher'
|
|
6
6
|
require File.dirname(__FILE__) + "/lib/synthesis/task"
|
7
7
|
|
8
8
|
task :default => :test
|
9
|
-
|
10
|
-
|
9
|
+
|
10
|
+
desc "Run all tests"
|
11
|
+
task :test => %w[test:core test:mocha test:spec]
|
12
|
+
|
13
|
+
desc "Run core tests"
|
14
|
+
Rake::TestTask.new('test:core') do |t|
|
15
|
+
t.pattern = 'test/synthesis/*_test.rb'
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "Run Mocha adapter tests"
|
19
|
+
Rake::TestTask.new('test:mocha') do |t|
|
20
|
+
t.pattern = 'test/synthesis/adapter/mocha/*_test.rb'
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "Run RSpec adapter tests"
|
24
|
+
Rake::TestTask.new('test:spec') do |t|
|
25
|
+
t.pattern = 'test/synthesis/adapter/rspec/*_test.rb'
|
11
26
|
end
|
12
27
|
|
13
28
|
Synthesis::Task.new('synthesis:test:expectations') do |t|
|
@@ -15,6 +30,11 @@ Synthesis::Task.new('synthesis:test:expectations') do |t|
|
|
15
30
|
t.pattern = 'test_project/expectations/test/*_test.rb'
|
16
31
|
end
|
17
32
|
|
33
|
+
Synthesis::Task.new('synthesis:test:rspec') do |t|
|
34
|
+
t.adapter = :rspec
|
35
|
+
t.pattern = 'test_project/rspec/*_spec.rb'
|
36
|
+
end
|
37
|
+
|
18
38
|
Synthesis::Task.new do |t|
|
19
39
|
t.pattern = 'test_project/mocha/test/*_test.rb'
|
20
40
|
t.ignore Array, Hash
|
@@ -66,12 +86,12 @@ namespace :svn do
|
|
66
86
|
end
|
67
87
|
|
68
88
|
desc "Run before checking in"
|
69
|
-
task :pc => [
|
89
|
+
task :pc => %w[svn:add svn:delete svn:up default svn:st]
|
70
90
|
end
|
71
91
|
|
72
92
|
gem_spec = Gem::Specification.new do |s|
|
73
93
|
s.name = 'synthesis'
|
74
|
-
s.version = '0.0.
|
94
|
+
s.version = '0.0.6'
|
75
95
|
s.platform = Gem::Platform::RUBY
|
76
96
|
s.rubyforge_project = "synthesis"
|
77
97
|
s.summary, s.description = 'A tool for Synthesized Testing'
|
@@ -92,4 +112,4 @@ Rake::GemPackageTask.new(gem_spec) do |t|
|
|
92
112
|
end
|
93
113
|
|
94
114
|
desc "Remove rdoc and package artefacts"
|
95
|
-
task :clean => [
|
115
|
+
task :clean => %w[clobber_package clobber_rdoc]
|
@@ -5,10 +5,19 @@ require "expectations"
|
|
5
5
|
$: << File.dirname(__FILE__) + "/../../"
|
6
6
|
|
7
7
|
require "synthesis"
|
8
|
-
require "synthesis/adapter/mocha
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
require "synthesis/adapter/mocha"
|
9
|
+
|
10
|
+
module Synthesis
|
11
|
+
class ExpectationsAdapter < Adapter
|
12
|
+
def run
|
13
|
+
fail_unless { Expectations::SuiteRunner.instance.suite.execute }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Expectations::SuiteRunner
|
19
|
+
def initialize
|
20
|
+
self.suite = Expectations::Suite.new
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -2,12 +2,18 @@ require "rubygems"
|
|
2
2
|
require "mocha_standalone"
|
3
3
|
require "test/unit"
|
4
4
|
|
5
|
-
|
5
|
+
require File.dirname(__FILE__) + "/../../synthesis"
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
module Synthesis
|
8
|
+
class MochaAdapter < Adapter
|
9
|
+
|
10
|
+
mock_object_type Class::AnyInstance
|
11
|
+
expectation_class Mocha::Expectation
|
12
|
+
intercept :method => :expects, :on => Object
|
13
|
+
|
14
|
+
def run
|
15
|
+
Test::Unit.run = true # Yes means no...
|
16
|
+
fail_unless { Test::Unit::AutoRunner.run }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "spec"
|
3
|
+
require "spec/mocks"
|
4
|
+
|
5
|
+
require File.dirname(__FILE__) + "/../../synthesis"
|
6
|
+
|
7
|
+
module Synthesis
|
8
|
+
class RSpecAdapter < Adapter
|
9
|
+
|
10
|
+
mock_object_type Spec::Mocks::Mock
|
11
|
+
expectation_class Spec::Mocks::MessageExpectation
|
12
|
+
intercept :method => :should_receive, :on => Spec::Mocks::Methods
|
13
|
+
|
14
|
+
def run
|
15
|
+
rspec_options.files.clear
|
16
|
+
fail_unless { rspec_options.run_examples }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/synthesis/adapter.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Synthesis
|
2
|
-
# Subclasses of
|
2
|
+
# Subclasses of Adapter must implement the "run" method.
|
3
|
+
# For example implementations, refer to Synthesis::MochaAdapter and
|
4
|
+
# Synthesis::RSpecAdapter
|
3
5
|
class Adapter
|
4
6
|
include Logging
|
5
7
|
|
@@ -7,6 +9,8 @@ module Synthesis
|
|
7
9
|
@pattern = pattern
|
8
10
|
end
|
9
11
|
|
12
|
+
# The block parameter will yield twice, once for collecting and
|
13
|
+
# once for verifying the collected expectations.
|
10
14
|
def fail_unless(&block)
|
11
15
|
log "Collecting expectations..."
|
12
16
|
Dir[@pattern].each { |t| require t }
|
@@ -16,12 +20,52 @@ module Synthesis
|
|
16
20
|
yield
|
17
21
|
end
|
18
22
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
class << self
|
24
|
+
# The type of object representing a mock or stub for the test framework.
|
25
|
+
# Objects of this type will be ignored by Synthesis.
|
26
|
+
def mock_object_type(type)
|
27
|
+
Synthesis.const_set(:MOCK_OBJECT, type)
|
28
|
+
end
|
29
|
+
|
30
|
+
# The class representing a mock object expectation in the test framework.
|
31
|
+
# Synthesis will intercept its "with" method in order to collect the
|
32
|
+
# expectation method parameters being passed to it.
|
33
|
+
def expectation_class(klass)
|
34
|
+
klass.class_eval do
|
35
|
+
attr_accessor :synthesis_expectation
|
36
|
+
|
37
|
+
alias original_with with
|
38
|
+
|
39
|
+
def with(*expected_parameters, &matching_block)
|
40
|
+
synthesis_expectation.args = expected_parameters if synthesis_expectation
|
41
|
+
original_with *expected_parameters, &matching_block
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Accepts a Hash parameter with two entries, :method and :on. These
|
47
|
+
# represent the name of the method used for declaring a method interaction
|
48
|
+
# expectation on an object and the name of the object the method is defined
|
49
|
+
# on respectively. Synthesis will intercept this method in order to collect
|
50
|
+
# simulated method interactions.
|
51
|
+
def intercept(params)
|
52
|
+
method_name, obj = params[:method], params[:on]
|
53
|
+
obj.send(:alias_method, :original_meth, method_name)
|
54
|
+
obj.send(:define_method, method_name) do |meth|
|
55
|
+
s_expectation = Synthesis::ExpectationRecord.add_expectation(self, meth, caller[0])
|
56
|
+
m_expectation = original_meth(meth)
|
57
|
+
m_expectation.synthesis_expectation = s_expectation
|
58
|
+
m_expectation
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def inherited(subclass)
|
63
|
+
@adapter = subclass
|
64
|
+
end
|
65
|
+
|
66
|
+
def load(pattern)
|
67
|
+
@adapter.new(pattern)
|
68
|
+
end
|
25
69
|
end
|
26
70
|
end
|
27
71
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/helper"
|
2
|
+
|
3
|
+
module Synthesis
|
4
|
+
class ExpectationRecordTest < Test::Unit::TestCase
|
5
|
+
def teardown
|
6
|
+
ExpectationRecord.expectations.clear
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_does_not_add_any_instance_expectation
|
10
|
+
mock = Spec::Mocks::Mock.new(Numeric)
|
11
|
+
ExpectationRecord.add_expectation(mock, :foo, :track)
|
12
|
+
assert_equal(0, ExpectationRecord.expectations.size)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/helper"
|
2
|
+
|
3
|
+
class MessageExpectationTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
error_generator = Class.new {def opts=(param)end}.new
|
6
|
+
@spec_expectation = Spec::Mocks::MessageExpectation.new error_generator, :n, :n, :n, :n
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_holds_synthesis_expectation
|
10
|
+
@spec_expectation.synthesis_expectation = 1
|
11
|
+
assert_equal 1, @spec_expectation.synthesis_expectation
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_with_passes_expected_params_to_synthesis_expectation
|
15
|
+
@spec_expectation.synthesis_expectation = Synthesis::Expectation.new Hash, :foo, :track
|
16
|
+
@spec_expectation.with 1, 2
|
17
|
+
assert_equal([1, 2], @spec_expectation.synthesis_expectation.args)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/helper"
|
2
|
+
|
3
|
+
module Synthesis
|
4
|
+
class MethodsTest < Test::Unit::TestCase
|
5
|
+
def test_records_singleton_method_expectation
|
6
|
+
ExpectationRecord.should_receive(:add_expectation).with(Hash, :foo, an_instance_of(String))
|
7
|
+
Hash.should_receive(:foo)
|
8
|
+
Hash.foo
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_records_instance_method_expectation
|
12
|
+
hash = Hash.new
|
13
|
+
ExpectationRecord.should_receive(:add_expectation).with(hash, :foo, an_instance_of(String))
|
14
|
+
hash.should_receive(:foo)
|
15
|
+
hash.foo
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -3,7 +3,7 @@ require "expectations"
|
|
3
3
|
require File.dirname(__FILE__) + "/../../test_project"
|
4
4
|
|
5
5
|
Expectations do
|
6
|
-
expect Storage.new('whatever').
|
6
|
+
expect Storage.new('whatever').to.receive(:save).with('METAL - rock') do |storage|
|
7
7
|
DataBrander.new(storage).save_branded 'rock'
|
8
8
|
end
|
9
9
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
%w(rubygems spec fileutils).each { |l| require l }
|
2
|
+
require File.dirname(__FILE__) + "/../test_project"
|
3
|
+
|
4
|
+
describe DataBrander do
|
5
|
+
it "should save branded to pstore" do
|
6
|
+
pstore = Storage.new 'whatever'
|
7
|
+
pstore.should_receive(:save).with('METAL - rock')
|
8
|
+
DataBrander.new(pstore).save_branded 'rock'
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should ignore total ducks" do
|
12
|
+
m = mock(Storage)
|
13
|
+
m.should_receive(:foo)
|
14
|
+
m.foo
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
%w(rubygems spec fileutils).each { |l| require l }
|
2
|
+
require File.dirname(__FILE__) + "/../test_project"
|
3
|
+
|
4
|
+
describe Storage do
|
5
|
+
it "should save to file" do
|
6
|
+
begin
|
7
|
+
Storage.new('test.txt').save('rock')
|
8
|
+
File.read('test.txt').should == 'rock'
|
9
|
+
ensure
|
10
|
+
FileUtils.rm_f('test.txt')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
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.6
|
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-
|
12
|
+
date: 2008-03-09 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -23,16 +23,9 @@ extra_rdoc_files:
|
|
23
23
|
- README
|
24
24
|
- COPYING
|
25
25
|
files:
|
26
|
-
- lib/synthesis/adapter/expectations/expectations_adapter.rb
|
27
|
-
- lib/synthesis/adapter/expectations/suite_runner.rb
|
28
26
|
- lib/synthesis/adapter/expectations.rb
|
29
|
-
- lib/synthesis/adapter/mocha/class_method.rb
|
30
|
-
- lib/synthesis/adapter/mocha/expectation_record.rb
|
31
|
-
- lib/synthesis/adapter/mocha/method_invocation_watcher.rb
|
32
|
-
- lib/synthesis/adapter/mocha/mocha_adapter.rb
|
33
|
-
- lib/synthesis/adapter/mocha/mocha_expectation.rb
|
34
|
-
- lib/synthesis/adapter/mocha/object.rb
|
35
27
|
- lib/synthesis/adapter/mocha.rb
|
28
|
+
- lib/synthesis/adapter/rspec.rb
|
36
29
|
- lib/synthesis/adapter.rb
|
37
30
|
- lib/synthesis/class.rb
|
38
31
|
- lib/synthesis/expectation.rb
|
@@ -47,12 +40,18 @@ files:
|
|
47
40
|
- lib/synthesis/task.rb
|
48
41
|
- lib/synthesis.rb
|
49
42
|
- test/synthesis/adapter/mocha/expectation_record_test.rb
|
50
|
-
- test/synthesis/adapter/mocha/
|
43
|
+
- test/synthesis/adapter/mocha/helper.rb
|
51
44
|
- test/synthesis/adapter/mocha/mocha_expectation_test.rb
|
45
|
+
- test/synthesis/adapter/mocha/mocha_test.rb
|
52
46
|
- test/synthesis/adapter/mocha/object_test.rb
|
47
|
+
- test/synthesis/adapter/rspec/expectation_record_test.rb
|
48
|
+
- test/synthesis/adapter/rspec/helper.rb
|
49
|
+
- test/synthesis/adapter/rspec/message_expectation_test.rb
|
50
|
+
- test/synthesis/adapter/rspec/methods_test.rb
|
53
51
|
- test/synthesis/class_test.rb
|
54
52
|
- test/synthesis/expectation_record_test.rb
|
55
53
|
- test/synthesis/expectation_test.rb
|
54
|
+
- test/synthesis/helper.rb
|
56
55
|
- test/synthesis/method_invocation_watcher_test.rb
|
57
56
|
- test/synthesis/module_test.rb
|
58
57
|
- test/synthesis/object_test.rb
|
@@ -63,6 +62,8 @@ files:
|
|
63
62
|
- test_project/lib/storage.rb
|
64
63
|
- test_project/mocha/test/data_brander_test.rb
|
65
64
|
- test_project/mocha/test/storage_test.rb
|
65
|
+
- test_project/rspec/data_brander_spec.rb
|
66
|
+
- test_project/rspec/storage_spec.rb
|
66
67
|
- test_project/test_project.rb
|
67
68
|
- COPYING
|
68
69
|
- README
|
@@ -1,12 +0,0 @@
|
|
1
|
-
module Synthesis
|
2
|
-
class ExpectationRecord
|
3
|
-
class << self
|
4
|
-
alias_method :add_mocha_expectation, :add_expectation
|
5
|
-
|
6
|
-
def add_expectation(obj, meth, track, args = [])
|
7
|
-
# Ignone things like "foo = mock"
|
8
|
-
add_mocha_expectation(obj, meth, track, args) unless obj.is_a?(Class::AnyInstance)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,12 +0,0 @@
|
|
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
|
@@ -1,22 +0,0 @@
|
|
1
|
-
class Object
|
2
|
-
alias mocha_expects expects
|
3
|
-
|
4
|
-
def expects(meth)
|
5
|
-
s_expectation = Synthesis::ExpectationRecord.add_expectation(self, meth, caller[0])
|
6
|
-
m_expectation = mocha_expects(meth)
|
7
|
-
m_expectation.synthesis_expectation = s_expectation
|
8
|
-
m_expectation
|
9
|
-
end
|
10
|
-
|
11
|
-
def mocked!
|
12
|
-
@mocked = true
|
13
|
-
end
|
14
|
-
|
15
|
-
def unmocked!
|
16
|
-
@mocked = false
|
17
|
-
end
|
18
|
-
|
19
|
-
def mocked?
|
20
|
-
@mocked
|
21
|
-
end
|
22
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
%w(test/unit rubygems mocha).each { |l| require l }
|
2
|
-
require File.dirname(__FILE__) + "/../../../../lib/synthesis/adapter/mocha"
|
3
|
-
|
4
|
-
module Synthesis
|
5
|
-
class MethodInvocationWatcherTest < Test::Unit::TestCase
|
6
|
-
def teardown
|
7
|
-
ExpectationRecord.expectations.clear
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_ignores_invocation_for_mocked_object
|
11
|
-
foo = Class.new { def self.bar;end }
|
12
|
-
ExpectationRecord.add_expectation foo, :bar, :track
|
13
|
-
ExpectationRecord.record_invocations
|
14
|
-
e = ExpectationRecord.expectations.to_a[0]
|
15
|
-
foo.expects(:bar)
|
16
|
-
foo.bar
|
17
|
-
assert !e.invoked?
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_records_invocation_for_non_mocked_object
|
21
|
-
foo = Class.new { def self.bar;end }
|
22
|
-
ExpectationRecord.add_expectation foo, :bar, :track
|
23
|
-
ExpectationRecord.record_invocations
|
24
|
-
e = ExpectationRecord.expectations.to_a[0]
|
25
|
-
foo.bar
|
26
|
-
assert e.invoked?
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|