mocha 0.9.12 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/Gemfile +3 -0
  2. data/Gemfile.minitest.1.3.0 +7 -0
  3. data/Gemfile.minitest.1.4.0 +7 -0
  4. data/Gemfile.minitest.1.4.1 +7 -0
  5. data/Gemfile.minitest.1.4.2 +7 -0
  6. data/Gemfile.minitest.2.0.0 +7 -0
  7. data/Gemfile.minitest.2.0.1 +7 -0
  8. data/Gemfile.minitest.2.3.0 +7 -0
  9. data/Gemfile.minitest.latest +7 -0
  10. data/Gemfile.test-unit.2.0.0 +8 -0
  11. data/Gemfile.test-unit.2.0.1 +7 -0
  12. data/Gemfile.test-unit.2.0.3 +7 -0
  13. data/Gemfile.test-unit.latest +7 -0
  14. data/README.rdoc +4 -0
  15. data/RELEASE.rdoc +22 -3
  16. data/Rakefile +17 -90
  17. data/init.rb +3 -0
  18. data/lib/mocha.rb +1 -1
  19. data/lib/mocha/central.rb +4 -4
  20. data/lib/mocha/class_method.rb +20 -20
  21. data/lib/mocha/expectation.rb +33 -6
  22. data/lib/mocha/instance_method.rb +17 -1
  23. data/lib/mocha/integration/mini_test.rb +17 -13
  24. data/lib/mocha/integration/mini_test/{version_201_to_202.rb → version_201_to_222.rb} +9 -9
  25. data/lib/mocha/integration/mini_test/version_230_to_251.rb +59 -0
  26. data/lib/mocha/integration/test_unit.rb +17 -13
  27. data/lib/mocha/integration/test_unit/{gem_version_203_to_209.rb → gem_version_203_to_220.rb} +8 -8
  28. data/lib/mocha/integration/test_unit/gem_version_230_to_233.rb +58 -0
  29. data/lib/mocha/mock.rb +14 -14
  30. data/lib/mocha/object.rb +1 -1
  31. data/lib/mocha/thrower.rb +15 -0
  32. data/lib/mocha/version.rb +3 -0
  33. data/mocha.gemspec +43 -0
  34. data/test/acceptance/acceptance_test_helper.rb +3 -0
  35. data/test/acceptance/expectations_on_multiple_methods_test.rb +55 -0
  36. data/test/acceptance/minitest_test.rb +12 -7
  37. data/test/acceptance/raise_exception_test.rb +39 -0
  38. data/test/acceptance/{stub_class_method_test.rb → stub_class_method_defined_on_active_record_association_proxy_test.rb} +3 -103
  39. data/test/acceptance/stub_class_method_defined_on_class_test.rb +72 -0
  40. data/test/acceptance/stub_class_method_defined_on_module_test.rb +75 -0
  41. data/test/acceptance/stub_class_method_defined_on_superclass_test.rb +75 -0
  42. data/test/acceptance/stub_instance_method_defined_on_active_record_association_proxy_test.rb +93 -0
  43. data/test/acceptance/stub_instance_method_defined_on_class_and_aliased_test.rb +69 -0
  44. data/test/acceptance/stub_instance_method_defined_on_class_test.rb +66 -0
  45. data/test/acceptance/stub_instance_method_defined_on_kernel_module_test.rb +75 -0
  46. data/test/acceptance/stub_instance_method_defined_on_module_test.rb +75 -0
  47. data/test/acceptance/stub_instance_method_defined_on_object_class_test.rb +75 -0
  48. data/test/acceptance/stub_instance_method_defined_on_singleton_class_test.rb +70 -0
  49. data/test/acceptance/stub_instance_method_defined_on_superclass_test.rb +72 -0
  50. data/test/acceptance/throw_test.rb +45 -0
  51. data/test/method_definer.rb +3 -3
  52. data/test/test_helper.rb +0 -6
  53. data/test/unit/central_test.rb +7 -3
  54. data/test/unit/class_method_test.rb +10 -10
  55. data/test/unit/mockery_test.rb +1 -0
  56. data/test/unit/thrower_test.rb +20 -0
  57. metadata +110 -33
  58. data/lib/mocha/metaclass.rb +0 -13
  59. data/test/acceptance/stub_instance_method_test.rb +0 -206
  60. data/test/unit/metaclass_test.rb +0 -22
@@ -0,0 +1,15 @@
1
+ module Mocha # :nodoc:
2
+
3
+ class Thrower # :nodoc:
4
+
5
+ def initialize(tag, object = nil)
6
+ @tag, @object = tag, object
7
+ end
8
+
9
+ def evaluate
10
+ throw @tag, @object
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,3 @@
1
+ module Mocha
2
+ VERSION = "0.10.0"
3
+ end
@@ -0,0 +1,43 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib/', __FILE__)
3
+ $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
4
+ require "mocha/version"
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "mocha"
8
+ s.version = Mocha::VERSION
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["James Mead"]
12
+ s.description = "Mocking and stubbing library with JMock/SchMock syntax, which allows mocking and stubbing of methods on real (non-mock) classes."
13
+ s.email = "mocha-developer@googlegroups.com"
14
+ s.extra_rdoc_files = ["README.rdoc", "COPYING.rdoc"]
15
+
16
+ s.files = `git ls-files`.split("\n") - ["TODO", ".travis.yml", ".gitignore"]
17
+
18
+ s.homepage = "http://mocha.rubyforge.org"
19
+ s.rdoc_options = ["--title", "Mocha", "--main", "README.rdoc", "--line-numbers"]
20
+ s.require_paths = ["lib"]
21
+ s.rubyforge_project = "mocha"
22
+ s.summary = "Mocking and stubbing library"
23
+
24
+ s.add_dependency("metaclass", "~> 0.0.1")
25
+ if s.respond_to? :specification_version then
26
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
27
+ s.specification_version = 3
28
+
29
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
30
+ s.add_development_dependency("rake", ">= 0")
31
+ s.add_development_dependency("introspection", "~> 0.0.1")
32
+ s.add_development_dependency("rdoc", "~> 2.4.2")
33
+ else
34
+ s.add_dependency("rake", ">= 0")
35
+ s.add_dependency("introspection", "~> 0.0.1")
36
+ s.add_dependency("rdoc", "~> 2.4.2")
37
+ end
38
+ else
39
+ s.add_dependency("rake", ">= 0")
40
+ s.add_dependency("introspection", "~> 0.0.1")
41
+ s.add_dependency("rdoc", "~> 2.4.2")
42
+ end
43
+ end
@@ -1,6 +1,7 @@
1
1
  require File.expand_path('../../test_helper', __FILE__)
2
2
  require 'test_runner'
3
3
  require 'mocha/configuration'
4
+ require 'introspection'
4
5
 
5
6
  module AcceptanceTest
6
7
 
@@ -35,4 +36,6 @@ module AcceptanceTest
35
36
  Mocha::Mockery.instance.logger = @original_logger
36
37
  end
37
38
 
39
+ include Introspection::Assertions
40
+
38
41
  end
@@ -0,0 +1,55 @@
1
+ require File.expand_path('../acceptance_test_helper', __FILE__)
2
+ require 'mocha'
3
+
4
+ class ExpectationsOnMultipleMethodsTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_expect_calls_to_multiple_methods
17
+ instance = Class.new do
18
+ def my_instance_method_1
19
+ :original_return_value_1
20
+ end
21
+ def my_instance_method_2
22
+ :original_return_value_2
23
+ end
24
+ end.new
25
+ test_result = run_as_test do
26
+ instance.expects(
27
+ :my_instance_method_1 => :new_return_value_1,
28
+ :my_instance_method_2 => :new_return_value_2
29
+ )
30
+ assert_equal :new_return_value_1, instance.my_instance_method_1
31
+ assert_equal :new_return_value_2, instance.my_instance_method_2
32
+ end
33
+ assert_passed(test_result)
34
+ end
35
+
36
+ def test_should_stub_calls_to_multiple_methods
37
+ instance = Class.new do
38
+ def my_instance_method_1
39
+ :original_return_value_1
40
+ end
41
+ def my_instance_method_2
42
+ :original_return_value_2
43
+ end
44
+ end.new
45
+ test_result = run_as_test do
46
+ instance.stubs(
47
+ :my_instance_method_1 => :new_return_value_1,
48
+ :my_instance_method_2 => :new_return_value_2
49
+ )
50
+ assert_equal :new_return_value_1, instance.my_instance_method_1
51
+ assert_equal :new_return_value_2, instance.my_instance_method_2
52
+ end
53
+ assert_passed(test_result)
54
+ end
55
+ end
@@ -75,7 +75,7 @@ else
75
75
  attr_reader :runner
76
76
 
77
77
  def test_should_pass_mocha_test
78
- runner.run(%w(-n test_mocha_with_fulfilled_expectation))
78
+ run_test :test_mocha_with_fulfilled_expectation
79
79
 
80
80
  assert_equal 0, runner.failures
81
81
  assert_equal 0, runner.errors
@@ -83,7 +83,7 @@ else
83
83
  end
84
84
 
85
85
  def test_should_fail_mocha_test_due_to_unfulfilled_expectation
86
- runner.run(%w(-n test_mocha_with_unfulfilled_expectation))
86
+ run_test :test_mocha_with_unfulfilled_expectation
87
87
 
88
88
  assert_equal 1, runner.failures
89
89
  assert_equal 0, runner.errors
@@ -92,7 +92,7 @@ else
92
92
  end
93
93
 
94
94
  def test_should_fail_mocha_test_due_to_unexpected_invocation
95
- runner.run(%w(-n test_mocha_with_unexpected_invocation))
95
+ run_test :test_mocha_with_unexpected_invocation
96
96
 
97
97
  assert_equal 1, runner.failures
98
98
  assert_equal 0, runner.errors
@@ -101,7 +101,7 @@ else
101
101
  end
102
102
 
103
103
  def test_should_pass_stubba_test
104
- runner.run(%w(-n test_stubba_with_fulfilled_expectation))
104
+ run_test :test_stubba_with_fulfilled_expectation
105
105
 
106
106
  assert_equal 0, runner.failures
107
107
  assert_equal 0, runner.errors
@@ -109,7 +109,7 @@ else
109
109
  end
110
110
 
111
111
  def test_should_fail_stubba_test_due_to_unfulfilled_expectation
112
- runner.run(%w(-n test_stubba_with_unfulfilled_expectation))
112
+ run_test :test_stubba_with_unfulfilled_expectation
113
113
 
114
114
  assert_equal 1, runner.failures
115
115
  assert_equal 0, runner.errors
@@ -118,7 +118,7 @@ else
118
118
  end
119
119
 
120
120
  def test_should_pass_mocha_test_with_matching_parameter
121
- runner.run(%w(-n test_mocha_with_matching_parameter))
121
+ run_test :test_mocha_with_matching_parameter
122
122
 
123
123
  assert_equal 0, runner.failures
124
124
  assert_equal 0, runner.errors
@@ -126,7 +126,7 @@ else
126
126
  end
127
127
 
128
128
  def test_should_fail_mocha_test_with_non_matching_parameter
129
- runner.run(%w(-n test_mocha_with_non_matching_parameter))
129
+ run_test :test_mocha_with_non_matching_parameter
130
130
 
131
131
  assert_equal 1, runner.failures
132
132
  assert_equal 0, runner.errors
@@ -135,6 +135,11 @@ else
135
135
  end
136
136
 
137
137
  private
138
+
139
+ def run_test(method_name)
140
+ run_method = (MiniTest::Unit::VERSION >= "2.1.0") ? :_run : :run
141
+ runner.send(run_method, ["-n", method_name.to_s])
142
+ end
138
143
 
139
144
  def output
140
145
  @output.rewind
@@ -0,0 +1,39 @@
1
+ require File.expand_path('../acceptance_test_helper', __FILE__)
2
+ require 'mocha'
3
+
4
+ class RaiseExceptionTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_raise_exception
17
+ exception_class = Class.new(StandardError)
18
+ test_result = run_as_test do
19
+ foo = stub('foo')
20
+ foo.stubs(:bar).raises(exception_class, "my-message")
21
+ exception = assert_raises(exception_class) { foo.bar }
22
+ assert_equal "my-message", exception.message
23
+ end
24
+ assert_passed(test_result)
25
+ end
26
+
27
+ def test_should_raise_two_different_exceptions
28
+ exception_one_class = Class.new(StandardError)
29
+ exception_two_class = Class.new(StandardError)
30
+ test_result = run_as_test do
31
+ foo = stub('foo')
32
+ foo.stubs(:bar).raises(exception_one_class).then.raises(exception_two_class)
33
+ assert_raises(exception_one_class) { foo.bar }
34
+ assert_raises(exception_two_class) { foo.bar }
35
+ end
36
+ assert_passed(test_result)
37
+ end
38
+
39
+ end
@@ -1,118 +1,18 @@
1
1
  require File.expand_path('../acceptance_test_helper', __FILE__)
2
2
  require 'mocha'
3
3
 
4
- class StubClassMethodTest < Test::Unit::TestCase
4
+ class StubClassMethodDefinedOnActiveRecordAssociationProxyTest < Test::Unit::TestCase
5
5
 
6
6
  include AcceptanceTest
7
-
7
+
8
8
  def setup
9
9
  setup_acceptance_test
10
10
  end
11
-
11
+
12
12
  def teardown
13
13
  teardown_acceptance_test
14
14
  end
15
-
16
- def test_should_stub_method_within_test
17
- klass = Class.new do
18
- class << self
19
- def my_class_method
20
- :original_return_value
21
- end
22
- end
23
- end
24
- test_result = run_as_test do
25
- klass.stubs(:my_class_method).returns(:new_return_value)
26
- assert_equal :new_return_value, klass.my_class_method
27
- end
28
- assert_passed(test_result)
29
- end
30
15
 
31
- def test_should_leave_stubbed_public_method_unchanged_after_test
32
- klass = Class.new do
33
- class << self
34
- def my_class_method
35
- :original_return_value
36
- end
37
- end
38
- end
39
- run_as_test do
40
- klass.stubs(:my_class_method).returns(:new_return_value)
41
- end
42
- assert klass.public_methods(false).any? { |m| m.to_s == 'my_class_method' }
43
- assert_equal :original_return_value, klass.my_class_method
44
- end
45
-
46
- def test_should_leave_stubbed_protected_method_unchanged_after_test
47
- klass = Class.new do
48
- class << self
49
- def my_class_method
50
- :original_return_value
51
- end
52
- protected :my_class_method
53
- def my_unprotected_class_method
54
- my_class_method
55
- end
56
- end
57
- end
58
- run_as_test do
59
- klass.stubs(:my_class_method).returns(:new_return_value)
60
- end
61
- assert klass.protected_methods(false).any? { |m| m.to_s == 'my_class_method' }
62
- assert_equal :original_return_value, klass.my_unprotected_class_method
63
- end
64
-
65
- def test_should_leave_stubbed_private_method_unchanged_after_test
66
- klass = Class.new do
67
- class << self
68
- def my_class_method
69
- :original_return_value
70
- end
71
- private :my_class_method
72
- end
73
- end
74
- run_as_test do
75
- klass.stubs(:my_class_method).returns(:new_return_value)
76
- end
77
- assert klass.private_methods(false).any? { |m| m.to_s == 'my_class_method' }
78
- assert_equal :original_return_value, klass.send(:my_class_method)
79
- end
80
-
81
- def test_should_reset_class_expectations_after_test
82
- klass = Class.new do
83
- class << self
84
- def my_class_method
85
- :original_return_value
86
- end
87
- end
88
- end
89
- run_as_test do
90
- klass.stubs(:my_class_method)
91
- end
92
- assert_equal 0, klass.mocha.expectations.length
93
- end
94
-
95
- def test_should_be_able_to_stub_a_superclass_method
96
- superklass = Class.new do
97
- class << self
98
- def my_superclass_method
99
- :original_return_value
100
- end
101
- end
102
- end
103
- klass = Class.new(superklass)
104
- test_result = run_as_test do
105
- klass.stubs(:my_superclass_method).returns(:new_return_value)
106
- assert_equal :new_return_value, klass.my_superclass_method
107
- end
108
- assert_passed(test_result)
109
- superklass_public_methods = superklass.public_methods - superklass.superclass.public_methods
110
- assert superklass_public_methods.any? { |m| m.to_s == 'my_superclass_method' }
111
- klass_public_methods = klass.public_methods - klass.superclass.public_methods
112
- assert !klass_public_methods.any? { |m| m.to_s == 'my_superclass_method' }
113
- assert_equal :original_return_value, superklass.my_superclass_method
114
- end
115
-
116
16
  def test_should_be_able_to_stub_method_if_ruby18_public_methods_include_method_but_method_does_not_actually_exist_like_active_record_association_proxy
117
17
  ruby18_klass = Class.new do
118
18
  class << self
@@ -0,0 +1,72 @@
1
+ require File.expand_path('../acceptance_test_helper', __FILE__)
2
+ require 'mocha'
3
+
4
+ class StubClassMethodDefinedOnClassTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_stub_public_method_and_leave_it_unchanged_after_test
17
+ klass = Class.new do
18
+ class << self
19
+ def my_class_method
20
+ :original_return_value
21
+ end
22
+ public :my_class_method
23
+ end
24
+ end
25
+ assert_snapshot_unchanged(klass) do
26
+ test_result = run_as_test do
27
+ klass.stubs(:my_class_method).returns(:new_return_value)
28
+ assert_equal :new_return_value, klass.my_class_method
29
+ end
30
+ assert_passed(test_result)
31
+ end
32
+ assert_equal :original_return_value, klass.my_class_method
33
+ end
34
+
35
+ def test_should_stub_protected_method_and_leave_it_unchanged_after_test
36
+ klass = Class.new do
37
+ class << self
38
+ def my_class_method
39
+ :original_return_value
40
+ end
41
+ protected :my_class_method
42
+ end
43
+ end
44
+ assert_snapshot_unchanged(klass) do
45
+ test_result = run_as_test do
46
+ klass.stubs(:my_class_method).returns(:new_return_value)
47
+ assert_equal :new_return_value, klass.send(:my_class_method)
48
+ end
49
+ assert_passed(test_result)
50
+ end
51
+ assert_equal :original_return_value, klass.send(:my_class_method)
52
+ end
53
+
54
+ def test_should_stub_private_method_and_leave_it_unchanged_after_test
55
+ klass = Class.new do
56
+ class << self
57
+ def my_class_method
58
+ :original_return_value
59
+ end
60
+ private :my_class_method
61
+ end
62
+ end
63
+ assert_snapshot_unchanged(klass) do
64
+ test_result = run_as_test do
65
+ klass.stubs(:my_class_method).returns(:new_return_value)
66
+ assert_equal :new_return_value, klass.send(:my_class_method)
67
+ end
68
+ assert_passed(test_result)
69
+ end
70
+ assert_equal :original_return_value, klass.send(:my_class_method)
71
+ end
72
+ end
@@ -0,0 +1,75 @@
1
+ require File.expand_path('../acceptance_test_helper', __FILE__)
2
+ require 'mocha'
3
+
4
+ class StubClassMethodDefinedOnModuleTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_stub_public_method_and_leave_it_unchanged_after_test
17
+ mod = Module.new do
18
+ def my_class_method
19
+ :original_return_value
20
+ end
21
+ public :my_class_method
22
+ end
23
+ klass = Class.new do
24
+ extend mod
25
+ end
26
+ assert_snapshot_unchanged(klass) do
27
+ test_result = run_as_test do
28
+ klass.stubs(:my_class_method).returns(:new_return_value)
29
+ assert_equal :new_return_value, klass.my_class_method
30
+ end
31
+ assert_passed(test_result)
32
+ end
33
+ assert_equal :original_return_value, klass.my_class_method
34
+ end
35
+
36
+ def test_should_stub_protected_method_and_leave_it_unchanged_after_test
37
+ mod = Module.new do
38
+ def my_class_method
39
+ :original_return_value
40
+ end
41
+ protected :my_class_method
42
+ end
43
+ klass = Class.new do
44
+ extend mod
45
+ end
46
+ assert_snapshot_unchanged(klass) do
47
+ test_result = run_as_test do
48
+ klass.stubs(:my_class_method).returns(:new_return_value)
49
+ assert_equal :new_return_value, klass.send(:my_class_method)
50
+ end
51
+ assert_passed(test_result)
52
+ end
53
+ assert_equal :original_return_value, klass.send(:my_class_method)
54
+ end
55
+
56
+ def test_should_stub_private_method_and_leave_it_unchanged_after_test
57
+ mod = Module.new do
58
+ def my_class_method
59
+ :original_return_value
60
+ end
61
+ private :my_class_method
62
+ end
63
+ klass = Class.new do
64
+ extend mod
65
+ end
66
+ assert_snapshot_unchanged(klass) do
67
+ test_result = run_as_test do
68
+ klass.stubs(:my_class_method).returns(:new_return_value)
69
+ assert_equal :new_return_value, klass.send(:my_class_method)
70
+ end
71
+ assert_passed(test_result)
72
+ end
73
+ assert_equal :original_return_value, klass.send(:my_class_method)
74
+ end
75
+ end