mocha 0.14.0 → 1.0.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.
- checksums.yaml +7 -0
- data/README.md +79 -21
- data/RELEASE.md +43 -0
- data/bin/build-matrix +71 -0
- data/lib/mocha/any_instance_method.rb +2 -2
- data/lib/mocha/class_method.rb +5 -2
- data/lib/mocha/detection/mini_test.rb +25 -0
- data/lib/mocha/detection/test_unit.rb +29 -0
- data/lib/mocha/expectation_list.rb +6 -2
- data/lib/mocha/integration/mini_test.rb +6 -11
- data/lib/mocha/integration/test_unit.rb +4 -9
- data/lib/mocha/integration.rb +2 -2
- data/lib/mocha/mini_test.rb +3 -0
- data/lib/mocha/mock.rb +73 -8
- data/lib/mocha/mockery.rb +3 -2
- data/lib/mocha/object_methods.rb +4 -2
- data/lib/mocha/parameter_matchers/responds_with.rb +1 -1
- data/lib/mocha/receivers.rb +49 -0
- data/lib/mocha/setup.rb +0 -1
- data/lib/mocha/test_unit.rb +3 -0
- data/lib/mocha/unexpected_invocation.rb +10 -5
- data/lib/mocha/version.rb +1 -1
- data/lib/mocha.rb +0 -7
- data/test/acceptance/stub_any_instance_method_defined_on_superclass_test.rb +34 -0
- data/test/acceptance/stub_any_instance_method_test.rb +1 -0
- data/test/acceptance/stub_class_method_defined_on_class_test.rb +3 -0
- data/test/acceptance/stub_class_method_defined_on_superclass_test.rb +40 -3
- data/test/acceptance/stub_instance_method_defined_on_class_test.rb +3 -0
- data/test/acceptance/unexpected_invocation_test.rb +25 -0
- data/test/assertions.rb +6 -0
- data/test/integration/mini_test_test.rb +4 -18
- data/test/integration/test_unit_test.rb +2 -3
- data/test/test_helper.rb +6 -2
- data/test/test_runner.rb +22 -18
- data/test/unit/expectation_list_test.rb +11 -0
- data/test/unit/parameter_matchers/responds_with_test.rb +7 -0
- data/test/unit/receivers_test.rb +66 -0
- data/yard-templates/default/layout/html/google_analytics.erb +9 -9
- metadata +91 -107
- data/build-matrix.rb +0 -71
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module Mocha
|
|
2
|
+
|
|
3
|
+
class ObjectReceiver
|
|
4
|
+
|
|
5
|
+
def initialize(object)
|
|
6
|
+
@object = object
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def mocks
|
|
10
|
+
object, mocks = @object, []
|
|
11
|
+
while object do
|
|
12
|
+
mocks << object.mocha
|
|
13
|
+
object = object.is_a?(Class) ? object.superclass : nil
|
|
14
|
+
end
|
|
15
|
+
mocks
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class AnyInstanceReceiver
|
|
21
|
+
|
|
22
|
+
def initialize(klass)
|
|
23
|
+
@klass = klass
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def mocks
|
|
27
|
+
klass, mocks = @klass, []
|
|
28
|
+
while klass do
|
|
29
|
+
mocks << klass.any_instance.mocha
|
|
30
|
+
klass = klass.superclass
|
|
31
|
+
end
|
|
32
|
+
mocks
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class DefaultReceiver
|
|
38
|
+
|
|
39
|
+
def initialize(mock)
|
|
40
|
+
@mock = mock
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def mocks
|
|
44
|
+
[@mock]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
data/lib/mocha/setup.rb
CHANGED
|
@@ -5,17 +5,22 @@ module Mocha
|
|
|
5
5
|
|
|
6
6
|
# @private
|
|
7
7
|
def initialize(mock, symbol, *arguments)
|
|
8
|
-
@mock = mock
|
|
9
|
-
@method_matcher = MethodMatcher.new(symbol)
|
|
10
|
-
@parameters_matcher = ParametersMatcher.new(arguments)
|
|
8
|
+
@mock, @symbol, @arguments = mock, symbol, arguments
|
|
11
9
|
end
|
|
12
10
|
|
|
13
11
|
# @private
|
|
14
|
-
def
|
|
15
|
-
|
|
12
|
+
def full_description
|
|
13
|
+
method_matcher = MethodMatcher.new(@symbol)
|
|
14
|
+
parameters_matcher = ParametersMatcher.new(@arguments)
|
|
15
|
+
method_signature = "#{@mock.mocha_inspect}.#{method_matcher.mocha_inspect}#{parameters_matcher.mocha_inspect}"
|
|
16
16
|
"unexpected invocation: #{method_signature}\n"
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
+
# @private
|
|
20
|
+
def short_description
|
|
21
|
+
"unexpected invocation: #{@symbol}(#{@arguments.join(', ')})"
|
|
22
|
+
end
|
|
23
|
+
|
|
19
24
|
end
|
|
20
25
|
|
|
21
26
|
end
|
data/lib/mocha/version.rb
CHANGED
data/lib/mocha.rb
CHANGED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require File.expand_path('../acceptance_test_helper', __FILE__)
|
|
2
|
+
require 'mocha/setup'
|
|
3
|
+
|
|
4
|
+
class StubAnyInstanceMethodDefinedOnSuperclassTest < Mocha::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_method_and_leave_it_unchanged_after_test
|
|
17
|
+
superklass = Class.new do
|
|
18
|
+
def my_superclass_method
|
|
19
|
+
:original_return_value
|
|
20
|
+
end
|
|
21
|
+
public :my_superclass_method
|
|
22
|
+
end
|
|
23
|
+
klass = Class.new(superklass)
|
|
24
|
+
instance = klass.new
|
|
25
|
+
assert_snapshot_unchanged(instance) do
|
|
26
|
+
test_result = run_as_test do
|
|
27
|
+
superklass.any_instance.stubs(:my_superclass_method).returns(:new_return_value)
|
|
28
|
+
assert_equal :new_return_value, instance.my_superclass_method
|
|
29
|
+
end
|
|
30
|
+
assert_passed(test_result)
|
|
31
|
+
end
|
|
32
|
+
assert_equal :original_return_value, instance.my_superclass_method
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -22,6 +22,7 @@ class StubAnyInstanceMethodTest < Mocha::TestCase
|
|
|
22
22
|
instance = klass.new
|
|
23
23
|
test_result = run_as_test do
|
|
24
24
|
klass.any_instance.stubs(:my_instance_method).returns(:new_return_value)
|
|
25
|
+
assert_method_visiblity instance, :my_instance_method, :public
|
|
25
26
|
assert_equal :new_return_value, instance.my_instance_method
|
|
26
27
|
end
|
|
27
28
|
assert_passed(test_result)
|
|
@@ -26,6 +26,7 @@ class StubClassMethodDefinedOnClassTest < Mocha::TestCase
|
|
|
26
26
|
assert_snapshot_unchanged(klass) do
|
|
27
27
|
test_result = run_as_test do
|
|
28
28
|
klass.stubs(:my_class_method).returns(:new_return_value)
|
|
29
|
+
assert_method_visiblity klass, :my_class_method, :public
|
|
29
30
|
assert_equal :new_return_value, klass.my_class_method
|
|
30
31
|
end
|
|
31
32
|
assert_passed(test_result)
|
|
@@ -46,6 +47,7 @@ class StubClassMethodDefinedOnClassTest < Mocha::TestCase
|
|
|
46
47
|
assert_snapshot_unchanged(klass) do
|
|
47
48
|
test_result = run_as_test do
|
|
48
49
|
klass.stubs(:my_class_method).returns(:new_return_value)
|
|
50
|
+
assert_method_visiblity klass, :my_class_method, :protected
|
|
49
51
|
assert_equal :new_return_value, klass.send(:my_class_method)
|
|
50
52
|
end
|
|
51
53
|
assert_passed(test_result)
|
|
@@ -66,6 +68,7 @@ class StubClassMethodDefinedOnClassTest < Mocha::TestCase
|
|
|
66
68
|
assert_snapshot_unchanged(klass) do
|
|
67
69
|
test_result = run_as_test do
|
|
68
70
|
klass.stubs(:my_class_method).returns(:new_return_value)
|
|
71
|
+
assert_method_visiblity klass, :my_class_method, :private
|
|
69
72
|
assert_equal :new_return_value, klass.send(:my_class_method)
|
|
70
73
|
end
|
|
71
74
|
assert_passed(test_result)
|
|
@@ -13,7 +13,7 @@ class StubClassMethodDefinedOnSuperclassTest < Mocha::TestCase
|
|
|
13
13
|
teardown_acceptance_test
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
def
|
|
16
|
+
def test_should_stub_public_method_on_child_class_and_leave_it_unchanged_after_test
|
|
17
17
|
superklass = Class.new do
|
|
18
18
|
class << self
|
|
19
19
|
def my_class_method
|
|
@@ -33,7 +33,7 @@ class StubClassMethodDefinedOnSuperclassTest < Mocha::TestCase
|
|
|
33
33
|
assert_equal :original_return_value, klass.my_class_method
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
def
|
|
36
|
+
def test_should_stub_protected_method_on_child_class_and_leave_it_unchanged_after_test
|
|
37
37
|
superklass = Class.new do
|
|
38
38
|
class << self
|
|
39
39
|
def my_class_method
|
|
@@ -53,7 +53,7 @@ class StubClassMethodDefinedOnSuperclassTest < Mocha::TestCase
|
|
|
53
53
|
assert_equal :original_return_value, klass.send(:my_class_method)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
def
|
|
56
|
+
def test_should_stub_private_method_on_child_class_and_leave_it_unchanged_after_test
|
|
57
57
|
superklass = Class.new do
|
|
58
58
|
class << self
|
|
59
59
|
def my_class_method
|
|
@@ -72,4 +72,41 @@ class StubClassMethodDefinedOnSuperclassTest < Mocha::TestCase
|
|
|
72
72
|
end
|
|
73
73
|
assert_equal :original_return_value, klass.send(:my_class_method)
|
|
74
74
|
end
|
|
75
|
+
|
|
76
|
+
def test_should_stub_method_on_superclass_and_leave_it_unchanged_after_test
|
|
77
|
+
superklass = Class.new do
|
|
78
|
+
class << self
|
|
79
|
+
def my_class_method
|
|
80
|
+
:original_return_value
|
|
81
|
+
end
|
|
82
|
+
public :my_class_method
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
klass = Class.new(superklass)
|
|
86
|
+
assert_snapshot_unchanged(klass) do
|
|
87
|
+
test_result = run_as_test do
|
|
88
|
+
superklass.stubs(:my_class_method).returns(:new_return_value)
|
|
89
|
+
assert_equal :new_return_value, klass.my_class_method
|
|
90
|
+
end
|
|
91
|
+
assert_passed(test_result)
|
|
92
|
+
end
|
|
93
|
+
assert_equal :original_return_value, klass.my_class_method
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_stub_on_earliest_receiver_should_take_priority
|
|
97
|
+
superklass = Class.new do
|
|
98
|
+
class << self
|
|
99
|
+
def my_class_method
|
|
100
|
+
:original_return_value
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
klass = Class.new(superklass)
|
|
105
|
+
test_result = run_as_test do
|
|
106
|
+
klass.stubs(:my_class_method).returns(:klass_return_value)
|
|
107
|
+
superklass.stubs(:my_class_method).returns(:superklass_return_value)
|
|
108
|
+
assert_equal :klass_return_value, klass.my_class_method
|
|
109
|
+
end
|
|
110
|
+
assert_passed(test_result)
|
|
111
|
+
end
|
|
75
112
|
end
|
|
@@ -23,6 +23,7 @@ class StubInstanceMethodDefinedOnClassTest < Mocha::TestCase
|
|
|
23
23
|
assert_snapshot_unchanged(instance) do
|
|
24
24
|
test_result = run_as_test do
|
|
25
25
|
instance.stubs(:my_instance_method).returns(:new_return_value)
|
|
26
|
+
assert_method_visiblity instance, :my_instance_method, :public
|
|
26
27
|
assert_equal :new_return_value, instance.my_instance_method
|
|
27
28
|
end
|
|
28
29
|
assert_passed(test_result)
|
|
@@ -40,6 +41,7 @@ class StubInstanceMethodDefinedOnClassTest < Mocha::TestCase
|
|
|
40
41
|
assert_snapshot_unchanged(instance) do
|
|
41
42
|
test_result = run_as_test do
|
|
42
43
|
instance.stubs(:my_instance_method).returns(:new_return_value)
|
|
44
|
+
assert_method_visiblity instance, :my_instance_method, :protected
|
|
43
45
|
assert_equal :new_return_value, instance.send(:my_instance_method)
|
|
44
46
|
end
|
|
45
47
|
assert_passed(test_result)
|
|
@@ -57,6 +59,7 @@ class StubInstanceMethodDefinedOnClassTest < Mocha::TestCase
|
|
|
57
59
|
assert_snapshot_unchanged(instance) do
|
|
58
60
|
test_result = run_as_test do
|
|
59
61
|
instance.stubs(:my_instance_method).returns(:new_return_value)
|
|
62
|
+
assert_method_visiblity instance, :my_instance_method, :private
|
|
60
63
|
assert_equal :new_return_value, instance.send(:my_instance_method)
|
|
61
64
|
end
|
|
62
65
|
assert_passed(test_result)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require File.expand_path('../acceptance_test_helper', __FILE__)
|
|
2
|
+
require 'mocha/setup'
|
|
3
|
+
|
|
4
|
+
class UnexpectedInvocationTest < Mocha::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_avoid_recursion_when_unexpected_invocation_exception_message_depends_on_uninspectable_object
|
|
17
|
+
test_result = run_as_test do
|
|
18
|
+
instance = Class.new.new
|
|
19
|
+
instance.expects(:inspect).never
|
|
20
|
+
instance.inspect(1, 2, 'foo')
|
|
21
|
+
end
|
|
22
|
+
assert_failed(test_result)
|
|
23
|
+
assert_equal "unexpected invocation: inspect(1, 2, foo)", test_result.failure_message_lines[0]
|
|
24
|
+
end
|
|
25
|
+
end
|
data/test/assertions.rb
ADDED
|
@@ -1,22 +1,8 @@
|
|
|
1
1
|
require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
require "minitest"
|
|
5
|
-
rescue LoadError
|
|
6
|
-
end
|
|
7
|
-
begin
|
|
8
|
-
require "minitest/unit"
|
|
9
|
-
rescue LoadError
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
require "mocha/setup"
|
|
3
|
+
require "mocha/mini_test"
|
|
13
4
|
require "integration/shared_tests"
|
|
14
5
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
include SharedTests
|
|
19
|
-
end
|
|
20
|
-
else
|
|
21
|
-
puts "MiniTest not available - no point in running tests."
|
|
22
|
-
end
|
|
6
|
+
class MiniTestTest < Mocha::TestCase
|
|
7
|
+
include SharedTests
|
|
8
|
+
end
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
|
|
3
|
-
require "
|
|
4
|
-
require "mocha/setup"
|
|
3
|
+
require "mocha/test_unit"
|
|
5
4
|
require "integration/shared_tests"
|
|
6
5
|
|
|
7
|
-
class TestUnitTest <
|
|
6
|
+
class TestUnitTest < Mocha::TestCase
|
|
8
7
|
include SharedTests
|
|
9
8
|
end
|
data/test/test_helper.rb
CHANGED
|
@@ -8,6 +8,8 @@ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'unit'))
|
|
|
8
8
|
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'unit', 'parameter_matchers'))
|
|
9
9
|
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'acceptance'))
|
|
10
10
|
|
|
11
|
+
require 'mocha/detection/mini_test'
|
|
12
|
+
|
|
11
13
|
begin
|
|
12
14
|
require 'minitest'
|
|
13
15
|
rescue LoadError
|
|
@@ -17,13 +19,15 @@ begin
|
|
|
17
19
|
rescue LoadError
|
|
18
20
|
end
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
module Mocha; end
|
|
23
|
+
|
|
24
|
+
if (minitest_testcase = Mocha::Detection::MiniTest.testcase) && (ENV['MOCHA_RUN_INTEGRATION_TESTS'] != 'test-unit')
|
|
21
25
|
begin
|
|
22
26
|
require 'minitest/autorun'
|
|
23
27
|
rescue LoadError
|
|
24
28
|
MiniTest::Unit.autorun
|
|
25
29
|
end
|
|
26
|
-
class Mocha::TestCase <
|
|
30
|
+
class Mocha::TestCase < minitest_testcase
|
|
27
31
|
def assert_nothing_raised(exception = StandardError)
|
|
28
32
|
yield
|
|
29
33
|
rescue exception => e
|
data/test/test_runner.rb
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
require File.expand_path('../mini_test_result', __FILE__)
|
|
5
|
-
else
|
|
6
|
-
require File.expand_path('../test_unit_result', __FILE__)
|
|
7
|
-
end
|
|
1
|
+
require 'assertions'
|
|
2
|
+
|
|
3
|
+
require 'mocha/detection/mini_test'
|
|
8
4
|
|
|
9
5
|
module TestRunner
|
|
10
6
|
def run_as_test(&block)
|
|
@@ -14,6 +10,8 @@ module TestRunner
|
|
|
14
10
|
def run_as_tests(methods = {})
|
|
15
11
|
base_class = Mocha::TestCase
|
|
16
12
|
test_class = Class.new(base_class) do
|
|
13
|
+
include Assertions
|
|
14
|
+
|
|
17
15
|
methods.each do |(method_name, proc)|
|
|
18
16
|
define_method(method_name, proc)
|
|
19
17
|
end
|
|
@@ -21,19 +19,25 @@ module TestRunner
|
|
|
21
19
|
|
|
22
20
|
tests = methods.keys.select { |m| m.to_s[/^test/] }.map { |m| test_class.new(m) }
|
|
23
21
|
|
|
24
|
-
if
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
22
|
+
if Mocha::Detection::MiniTest.testcase && (ENV['MOCHA_RUN_INTEGRATION_TESTS'] != 'test-unit')
|
|
23
|
+
minitest_version = Gem::Version.new(Mocha::Detection::MiniTest.version)
|
|
24
|
+
if Gem::Requirement.new('>= 5.0.0').satisfied_by?(minitest_version)
|
|
25
|
+
require File.expand_path('../minitest_result', __FILE__)
|
|
26
|
+
tests.each do |test|
|
|
27
|
+
test.run
|
|
28
|
+
end
|
|
29
|
+
Minitest::Runnable.runnables.delete(test_class)
|
|
30
|
+
test_result = MinitestResult.new(tests)
|
|
31
|
+
elsif Gem::Requirement.new('> 0.0.0', '< 5.0.0').satisfied_by?(minitest_version)
|
|
32
|
+
require File.expand_path('../mini_test_result', __FILE__)
|
|
33
|
+
runner = MiniTest::Unit.new
|
|
34
|
+
tests.each do |test|
|
|
35
|
+
test.run(runner)
|
|
36
|
+
end
|
|
37
|
+
test_result = MiniTestResult.new(runner, tests)
|
|
34
38
|
end
|
|
35
|
-
test_result = MiniTestResult.new(runner, tests)
|
|
36
39
|
else
|
|
40
|
+
require File.expand_path('../test_unit_result', __FILE__)
|
|
37
41
|
test_result = TestUnitResult.build_test_result
|
|
38
42
|
tests.each do |test|
|
|
39
43
|
test.run(test_result) {}
|
|
@@ -68,4 +68,15 @@ class ExpectationListTest < Mocha::TestCase
|
|
|
68
68
|
assert_same expectation1, expectation_list.match_allowing_invocation(:my_method)
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
+
def test_should_combine_two_expectation_lists_into_one
|
|
72
|
+
expectation_list1 = ExpectationList.new
|
|
73
|
+
expectation_list2 = ExpectationList.new
|
|
74
|
+
expectation1 = Expectation.new(nil, :my_method)
|
|
75
|
+
expectation2 = Expectation.new(nil, :my_method)
|
|
76
|
+
expectation_list1.add(expectation1)
|
|
77
|
+
expectation_list2.add(expectation2)
|
|
78
|
+
expectation_list = expectation_list1 + expectation_list2
|
|
79
|
+
assert_equal [expectation1, expectation2], expectation_list.to_a
|
|
80
|
+
end
|
|
81
|
+
|
|
71
82
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require File.expand_path('../../../test_helper', __FILE__)
|
|
2
2
|
|
|
3
3
|
require 'mocha/parameter_matchers/responds_with'
|
|
4
|
+
require 'mocha/parameter_matchers/object'
|
|
4
5
|
require 'mocha/inspect'
|
|
5
6
|
|
|
6
7
|
class RespondsWithTest < Mocha::TestCase
|
|
@@ -17,6 +18,12 @@ class RespondsWithTest < Mocha::TestCase
|
|
|
17
18
|
assert !matcher.matches?(['bar'])
|
|
18
19
|
end
|
|
19
20
|
|
|
21
|
+
def test_should_match_parameter_responding_with_nested_responds_with_matcher
|
|
22
|
+
matcher = responds_with(:foo, responds_with(:bar, 'baz'))
|
|
23
|
+
object = Class.new { def foo; Class.new { def bar; 'baz'; end }.new; end }.new
|
|
24
|
+
assert matcher.matches?([object])
|
|
25
|
+
end
|
|
26
|
+
|
|
20
27
|
def test_should_describe_matcher
|
|
21
28
|
matcher = responds_with(:foo, :bar)
|
|
22
29
|
assert_equal 'responds_with(:foo, :bar)', matcher.mocha_inspect
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require File.expand_path('../../test_helper', __FILE__)
|
|
2
|
+
require 'mocha/receivers'
|
|
3
|
+
|
|
4
|
+
class ObjectReceiverTest < Mocha::TestCase
|
|
5
|
+
include Mocha
|
|
6
|
+
|
|
7
|
+
class FakeObject < Struct.new(:mocha)
|
|
8
|
+
def is_a?(klass)
|
|
9
|
+
false
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class FakeClass < Struct.new(:superclass, :mocha)
|
|
14
|
+
def is_a?(klass)
|
|
15
|
+
klass == Class
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_mocks_returns_mock_for_object
|
|
20
|
+
object = FakeObject.new(:mocha)
|
|
21
|
+
receiver = ObjectReceiver.new(object)
|
|
22
|
+
assert_equal [:mocha], receiver.mocks
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_mocks_returns_mocks_for_class_and_its_superclasses
|
|
26
|
+
grandparent = FakeClass.new(nil, :grandparent_mocha)
|
|
27
|
+
parent = FakeClass.new(grandparent, :parent_mocha)
|
|
28
|
+
klass = FakeClass.new(parent, :mocha)
|
|
29
|
+
receiver = ObjectReceiver.new(klass)
|
|
30
|
+
assert_equal [:mocha, :parent_mocha, :grandparent_mocha], receiver.mocks
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class AnyInstanceReceiverTest < Mocha::TestCase
|
|
35
|
+
include Mocha
|
|
36
|
+
|
|
37
|
+
class FakeAnyInstanceClass
|
|
38
|
+
attr_reader :superclass
|
|
39
|
+
|
|
40
|
+
def initialize(superclass, mocha)
|
|
41
|
+
@superclass, @mocha = superclass, mocha
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def any_instance
|
|
45
|
+
Struct.new(:mocha).new(@mocha)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_mocks_returns_mocks_for_class_and_its_superclasses
|
|
50
|
+
grandparent = FakeAnyInstanceClass.new(nil, :grandparent_mocha)
|
|
51
|
+
parent = FakeAnyInstanceClass.new(grandparent, :parent_mocha)
|
|
52
|
+
klass = FakeAnyInstanceClass.new(parent, :mocha)
|
|
53
|
+
receiver = AnyInstanceReceiver.new(klass)
|
|
54
|
+
assert_equal [:mocha, :parent_mocha, :grandparent_mocha], receiver.mocks
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class DefaultReceiverTest < Mocha::TestCase
|
|
59
|
+
include Mocha
|
|
60
|
+
|
|
61
|
+
def test_mocks_returns_mock
|
|
62
|
+
mock = :mocha
|
|
63
|
+
receiver = DefaultReceiver.new(mock)
|
|
64
|
+
assert_equal [:mocha], receiver.mocks
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<script src="/javascripts/app.js" type="text/javascript" charset="utf-8"></script>
|
|
2
2
|
|
|
3
|
-
<script
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
<script>
|
|
4
|
+
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
|
5
|
+
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
|
6
|
+
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
|
7
|
+
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
|
8
|
+
|
|
9
|
+
ga('create', '<%= ENV['GOOGLE_ANALYTICS_WEB_PROPERTY_ID'] %>', 'gofreerange.com');
|
|
10
|
+
ga('send', 'pageview');
|
|
11
|
+
</script>
|