synthesis 0.1.0 → 0.1.1

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/Rakefile CHANGED
@@ -25,22 +25,22 @@ Rake::TestTask.new('test:spec') do |t|
25
25
  t.pattern = 'test/synthesis/adapter/rspec/*_test.rb'
26
26
  end
27
27
 
28
- Synthesis::Task.new('synthesis:test:expectations') do |t|
28
+ Synthesis::Task.new do |t|
29
+ t.pattern = 'test_project/mocha/test/*_test.rb'
30
+ t.ignored = [Array, Hash]
31
+ # t.out = File.new('synthesis.test.txt', 'a')
32
+ end
33
+
34
+ Synthesis::Task.new('synthesis:expectations') do |t|
29
35
  t.adapter = :expectations
30
36
  t.pattern = 'test_project/expectations/test/*_test.rb'
31
37
  end
32
38
 
33
- Synthesis::Task.new('synthesis:test:rspec') do |t|
39
+ Synthesis::Task.new('synthesis:spec') do |t|
34
40
  t.adapter = :rspec
35
41
  t.pattern = 'test_project/rspec/*_spec.rb'
36
42
  end
37
43
 
38
- Synthesis::Task.new do |t|
39
- t.pattern = 'test_project/mocha/test/*_test.rb'
40
- t.ignored = [Array, Hash]
41
- # t.out = File.new('synthesis.test.txt', 'a')
42
- end
43
-
44
44
  desc 'Generate RDoc'
45
45
  Rake::RDocTask.new do |task|
46
46
  task.main = 'README'
@@ -58,7 +58,7 @@ end
58
58
 
59
59
  gem_spec = Gem::Specification.new do |s|
60
60
  s.name = 'synthesis'
61
- s.version = '0.1.0'
61
+ s.version = '0.1.1'
62
62
  s.platform = Gem::Platform::RUBY
63
63
  s.rubyforge_project = "synthesis"
64
64
  s.summary, s.description = 'A tool for Synthesized Testing'
@@ -15,7 +15,7 @@ module Synthesis
15
15
  def fail_unless(&block)
16
16
  log "Collecting expectations..."
17
17
  collect_expectations
18
- Dir[@pattern].each { |t| require t }
18
+ Dir[*@pattern].each { |t| require t }
19
19
  exit -1 unless yield
20
20
  log "Verifying expectation invocations..."
21
21
  stop_collecting_expectations
@@ -15,7 +15,7 @@ module Synthesis
15
15
  Object.extend(ExpectationRecordEnabled)
16
16
  Object.record_expectations_on(:expects)
17
17
  Mocha::Expectation.extend(ExpectationInterceptor)
18
- Mocha::Expectation.record_expected_argument_types_on(:with)
18
+ Mocha::Expectation.record_expected_arguments_on(:with)
19
19
  Mocha::Expectation.record_expected_return_values_on(:returns)
20
20
  Mocha::Expectation.record_expected_return_values_on(:raises)
21
21
  end
@@ -16,7 +16,7 @@ module Synthesis
16
16
  Object.extend(ExpectationRecordEnabled)
17
17
  Object.record_expectations_on(:expects)
18
18
  Mocha::Expectation.extend(ExpectationInterceptor)
19
- Mocha::Expectation.record_expected_argument_types_on(:with)
19
+ Mocha::Expectation.record_expected_arguments_on(:with)
20
20
  Mocha::Expectation.record_expected_return_values_on(:returns)
21
21
  Mocha::Expectation.record_expected_return_values_on(:raises)
22
22
  end
@@ -20,7 +20,7 @@ module Synthesis
20
20
  Spec::Mocks::Methods.extend(ExpectationRecordEnabled)
21
21
  Spec::Mocks::Methods.record_expectations_on(:should_receive)
22
22
  Spec::Mocks::MessageExpectation.extend(ExpectationInterceptor)
23
- Spec::Mocks::MessageExpectation.record_expected_argument_types_on(:with)
23
+ Spec::Mocks::MessageExpectation.record_expected_arguments_on(:with)
24
24
  Spec::Mocks::MessageExpectation.record_expected_return_values_on(:and_return)
25
25
  Spec::Mocks::MessageExpectation.record_expected_return_values_on(:and_raise)
26
26
  end
@@ -6,7 +6,8 @@ module Synthesis
6
6
 
7
7
  class Expectation
8
8
  include Logging
9
- attr_reader :receiver, :method
9
+ attr_reader :receiver, :method, :return_values
10
+ protected :return_values
10
11
  attr_accessor :args
11
12
 
12
13
  def initialize(receiver, method, track, args, return_values)
@@ -39,6 +40,10 @@ module Synthesis
39
40
  eql?(other)
40
41
  end
41
42
 
43
+ def <=>(other)
44
+ @return_values.size <=> other.return_values.size
45
+ end
46
+
42
47
  def invoked?
43
48
  @invoked
44
49
  end
@@ -52,7 +57,7 @@ module Synthesis
52
57
  end
53
58
 
54
59
  def return_value_type
55
- @return_values[0] ? @return_values[0].class : nil
60
+ @return_values.size == 1 ? @return_values[0].class : nil
56
61
  end
57
62
 
58
63
  def add_return_values(*vals)
@@ -5,7 +5,7 @@ module Synthesis
5
5
  module ExpectationInterceptor
6
6
  # Intercept the mock object framework's expectation method for declaring a mocked
7
7
  # method's arguments so that Synthesis can record them.
8
- def record_expected_argument_types_on(method_name)
8
+ def record_expected_arguments_on(method_name)
9
9
  (@original_methods ||= []) << method_name
10
10
 
11
11
  class_eval do
@@ -65,7 +65,7 @@ module Synthesis
65
65
 
66
66
  private
67
67
  def expectations_hash
68
- @expectations_hash ||= expectations.inject({}) do |hash, expectation|
68
+ @expectations_hash ||= expectations.sort.inject({}) do |hash, expectation|
69
69
  hash[expectation] = expectation
70
70
  hash
71
71
  end
@@ -51,12 +51,30 @@ module Synthesis
51
51
  expectation = Expectation.new(String.new, :new, :track, [:sym, "str"], [])
52
52
  assert_equal([Symbol, String], expectation.arg_types)
53
53
  end
54
-
54
+
55
55
  def test_return_value_type
56
- expectation = Expectation.new(String.new, :new, :track, [], [:sym])
56
+ expectation = Expectation.new(String, :new, :track)
57
+ expectation.add_return_values(:sym)
57
58
  assert_equal(Symbol, expectation.return_value_type)
58
59
  end
59
60
 
61
+ def test_true_class_return_value_type
62
+ expectation = Expectation.new(String, :new, :track)
63
+ expectation.add_return_values(true)
64
+ assert_equal(TrueClass, expectation.return_value_type)
65
+ end
66
+
67
+ def test_false_class_return_value_type
68
+ expectation = Expectation.new(String, :new, :track)
69
+ expectation.add_return_values(false)
70
+ assert_equal(FalseClass, expectation.return_value_type)
71
+ end
72
+
73
+ def test_returns_nil_return_value_type_when_no_return_values
74
+ expectation = Expectation.new(String, :new, :track)
75
+ assert_nil(expectation.return_value_type)
76
+ end
77
+
60
78
  def test_adds_return_value
61
79
  expectation = Expectation.new(String.new, :new, :track, [], [:sym])
62
80
  expectation.add_return_values("str")
@@ -91,9 +109,12 @@ module Synthesis
91
109
  assert_equal(expectation, expectation.explode)
92
110
  end
93
111
 
94
- def test_returns_nil_when_no_return_values_on_return_value_type
95
- expectation = Expectation.new(String, :new, :track, [])
96
- assert_nil(expectation.return_value_type)
112
+ def test_expectation_sorting
113
+ light = Expectation.new(Object.new, :bar, :track, [])
114
+ heavy = Expectation.new(Object.new, :foo, :track, [], [:retval])
115
+ sorted = [light, heavy].sort.reverse
116
+ assert_equal(heavy, sorted[0])
117
+ assert_equal(light, sorted[1])
97
118
  end
98
119
  end
99
120
  end
@@ -19,4 +19,18 @@ class DataBranderTest < Test::Unit::TestCase
19
19
  storage.expects(:ouch!).raises(Problem.new)
20
20
  assert_raise(Problem) { DataBrander.new(storage).dont_do_this }
21
21
  end
22
+
23
+ def test_is_ok
24
+ storage = Storage.new("")
25
+ storage.expects(:ok_or_problem).with(:ok).returns(:ok)
26
+ DataBrander.new(storage).ok
27
+ end
28
+
29
+ def test_does_not_rescue_problem_on_not_ok
30
+ assert_raise(Problem) do
31
+ storage = Storage.new("")
32
+ storage.expects(:ok_or_problem).with(:not_ok).raises(Problem.new)
33
+ DataBrander.new(storage).not_ok
34
+ end
35
+ end
22
36
  end
@@ -13,4 +13,12 @@ class StorageTest < Test::Unit::TestCase
13
13
  def test_ouch_raises_problem
14
14
  assert_raise(Problem) { Storage.new("").ouch! }
15
15
  end
16
+
17
+ def test_ok_or_problem_returns_ok_when_given_ok
18
+ assert_equal(:ok, Storage.new("").ok_or_problem(:ok))
19
+ end
20
+
21
+ def test_ok_raises_problem_when_not_given_ok
22
+ assert_raise(Problem) { Storage.new("").ok_or_problem(:not_ok) }
23
+ end
16
24
  end
@@ -19,4 +19,18 @@ describe DataBrander do
19
19
  storage.should_receive(:ouch!).and_raise(Problem.new)
20
20
  proc {DataBrander.new(storage).dont_do_this}.should raise_error(Problem)
21
21
  end
22
+
23
+ it "should return :ok when given :ok" do
24
+ storage = Storage.new("")
25
+ storage.should_receive(:ok_or_problem).with(:ok).and_return(:ok)
26
+ DataBrander.new(storage).ok
27
+ end
28
+
29
+ it "should not rescue problem on not ok" do
30
+ proc do
31
+ storage = Storage.new("")
32
+ storage.should_receive(:ok_or_problem).with(:not_ok).and_raise(Problem.new)
33
+ DataBrander.new(storage).not_ok
34
+ end.should raise_error(Problem)
35
+ end
22
36
  end
@@ -14,4 +14,12 @@ describe Storage do
14
14
  it "should raise problem on ouch!" do
15
15
  proc { Storage.new("").ouch! }.should raise_error(Problem)
16
16
  end
17
+
18
+ it "should return :ok when given :ok" do
19
+ Storage.new("").ok_or_problem(:ok).should == :ok
20
+ end
21
+
22
+ it "should raise problem when not give :ok" do
23
+ proc { Storage.new("").ok_or_problem(:not_ok) }.should raise_error(Problem)
24
+ end
17
25
  end
@@ -12,6 +12,14 @@ class DataBrander
12
12
  def dont_do_this
13
13
  @storage.ouch!
14
14
  end
15
+
16
+ def ok
17
+ @storage.ok_or_problem(:ok)
18
+ end
19
+
20
+ def not_ok
21
+ @storage.ok_or_problem(:not_ok)
22
+ end
15
23
  end
16
24
 
17
25
  class Storage
@@ -26,6 +34,10 @@ class Storage
26
34
  def ouch!
27
35
  raise Problem
28
36
  end
37
+
38
+ def ok_or_problem(ok)
39
+ ok == :ok ? ok : raise(Problem)
40
+ end
29
41
  end
30
42
 
31
43
  class Problem < Exception;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.1.0
4
+ version: 0.1.1
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-05-29 00:00:00 +01:00
12
+ date: 2008-06-04 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15