mocha 0.9.12 → 0.10.0

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.
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