test/unit/expectation_test.rb in bourne-1.1.1 vs test/unit/expectation_test.rb in bourne-1.1.2
- old
+ new
@@ -5,11 +5,11 @@
require 'bourne/mockery'
require 'execution_point'
require 'simple_counter'
class ExpectationTest < Test::Unit::TestCase
-
+
include Mocha
class FakeMockery
attr_reader :invocations
@@ -34,71 +34,71 @@
end
def new_expectation
Expectation.new(nil, :expected_method)
end
-
+
def test_should_match_calls_to_same_method_with_any_parameters
assert new_expectation.match?(:expected_method, 1, 2, 3)
end
-
+
def test_should_match_calls_to_same_method_with_exactly_zero_parameters
expectation = new_expectation.with()
assert expectation.match?(:expected_method)
end
-
+
def test_should_not_match_calls_to_same_method_with_more_than_zero_parameters
expectation = new_expectation.with()
assert !expectation.match?(:expected_method, 1, 2, 3)
end
-
+
def test_should_match_calls_to_same_method_with_expected_parameter_values
expectation = new_expectation.with(1, 2, 3)
assert expectation.match?(:expected_method, 1, 2, 3)
end
-
+
def test_should_match_calls_to_same_method_with_parameters_constrained_as_expected
expectation = new_expectation.with() {|x, y, z| x + y == z}
assert expectation.match?(:expected_method, 1, 2, 3)
end
-
+
def test_should_not_match_calls_to_different_method_with_parameters_constrained_as_expected
expectation = new_expectation.with() {|x, y, z| x + y == z}
assert !expectation.match?(:different_method, 1, 2, 3)
end
-
+
def test_should_not_match_calls_to_different_methods_with_no_parameters
assert !new_expectation.match?(:unexpected_method)
end
-
+
def test_should_not_match_calls_to_same_method_with_too_few_parameters
expectation = new_expectation.with(1, 2, 3)
assert !expectation.match?(:unexpected_method, 1, 2)
end
-
+
def test_should_not_match_calls_to_same_method_with_too_many_parameters
expectation = new_expectation.with(1, 2)
assert !expectation.match?(:unexpected_method, 1, 2, 3)
end
-
+
def test_should_not_match_calls_to_same_method_with_unexpected_parameter_values
expectation = new_expectation.with(1, 2, 3)
assert !expectation.match?(:unexpected_method, 1, 0, 3)
end
-
+
def test_should_not_match_calls_to_same_method_with_parameters_not_constrained_as_expected
expectation = new_expectation.with() {|x, y, z| x + y == z}
assert !expectation.match?(:expected_method, 1, 0, 3)
end
-
+
def test_should_allow_invocations_until_expected_invocation_count_is_one_and_actual_invocation_count_would_be_two
expectation = new_expectation.times(1)
assert expectation.invocations_allowed?
expectation.invoke([])
assert !expectation.invocations_allowed?
end
-
+
def test_should_allow_invocations_until_expected_invocation_count_is_two_and_actual_invocation_count_would_be_three
expectation = new_expectation.times(2)
assert expectation.invocations_allowed?
expectation.invoke([])
assert expectation.invocations_allowed?
@@ -114,22 +114,22 @@
expectation.invoke([])
assert expectation.invocations_allowed?
expectation.invoke([])
assert !expectation.invocations_allowed?
end
-
+
def test_should_store_provided_backtrace
backtrace = Object.new
expectation = Expectation.new(nil, :expected_method, backtrace)
assert_equal backtrace, expectation.backtrace
end
-
+
def test_should_default_backtrace_to_caller
execution_point = ExecutionPoint.current; expectation = Expectation.new(nil, :expected_method)
assert_equal execution_point, ExecutionPoint.new(expectation.backtrace)
end
-
+
def test_should_not_yield
yielded = false
new_expectation.invoke([]) { yielded = true }
assert_equal false, yielded
end
@@ -153,11 +153,11 @@
yielded_parameters = []
expectation.invoke([]) { |*parameters| yielded_parameters << parameters }
expectation.invoke([]) { |*parameters| yielded_parameters << parameters }
assert_equal [[1, 2, 3], [4, 5]], yielded_parameters
end
-
+
def test_should_yield_multiple_times_for_single_invocation
expectation = new_expectation().multiple_yields([1, 2, 3], [4, 5])
yielded_parameters = []
expectation.invoke([]) { |*parameters| yielded_parameters << parameters }
assert_equal [[1, 2, 3], [4, 5]], yielded_parameters
@@ -173,94 +173,94 @@
def test_should_return_specified_value
expectation = new_expectation.returns(99)
assert_equal 99, expectation.invoke([])
end
-
+
def test_should_return_same_specified_value_multiple_times
expectation = new_expectation.returns(99)
assert_equal 99, expectation.invoke([])
assert_equal 99, expectation.invoke([])
end
-
+
def test_should_return_specified_values_on_consecutive_calls
expectation = new_expectation.returns(99, 100, 101)
assert_equal 99, expectation.invoke([])
assert_equal 100, expectation.invoke([])
assert_equal 101, expectation.invoke([])
end
-
+
def test_should_return_specified_values_on_consecutive_calls_even_if_values_are_modified
values = [99, 100, 101]
expectation = new_expectation.returns(*values)
values.shift
assert_equal 99, expectation.invoke([])
assert_equal 100, expectation.invoke([])
assert_equal 101, expectation.invoke([])
end
-
+
def test_should_return_nil_by_default
assert_nil new_expectation.invoke([])
end
-
+
def test_should_return_nil_if_no_value_specified
expectation = new_expectation.returns()
assert_nil expectation.invoke([])
end
-
+
def test_should_raise_runtime_exception
expectation = new_expectation.raises
assert_raise(RuntimeError) { expectation.invoke([]) }
end
-
+
def test_should_raise_custom_exception
exception = Class.new(Exception)
expectation = new_expectation.raises(exception)
assert_raise(exception) { expectation.invoke([]) }
end
-
+
def test_should_raise_same_instance_of_custom_exception
exception_klass = Class.new(StandardError)
expected_exception = exception_klass.new
expectation = new_expectation.raises(expected_exception)
actual_exception = assert_raise(exception_klass) { expectation.invoke([]) }
assert_same expected_exception, actual_exception
end
-
+
def test_should_use_the_default_exception_message
expectation = new_expectation.raises(Exception)
exception = assert_raise(Exception) { expectation.invoke([]) }
assert_equal Exception.new.message, exception.message
end
-
+
def test_should_raise_custom_exception_with_message
exception_msg = "exception message"
expectation = new_expectation.raises(Exception, exception_msg)
exception = assert_raise(Exception) { expectation.invoke([]) }
assert_equal exception_msg, exception.message
end
-
+
def test_should_return_values_then_raise_exception
expectation = new_expectation.returns(1, 2).then.raises()
assert_equal 1, expectation.invoke([])
assert_equal 2, expectation.invoke([])
assert_raise(RuntimeError) { expectation.invoke([]) }
end
-
+
def test_should_raise_exception_then_return_values
expectation = new_expectation.raises().then.returns(1, 2)
assert_raise(RuntimeError) { expectation.invoke([]) }
assert_equal 1, expectation.invoke([])
assert_equal 2, expectation.invoke([])
end
-
+
def test_should_verify_successfully_if_expected_call_was_made
expectation = new_expectation
expectation.invoke([])
assert expectation.verified?
end
-
+
def test_should_not_verify_successfully_if_call_expected_once_but_invoked_twice
expectation = new_expectation.once
expectation.invoke([])
expectation.invoke([])
assert !expectation.verified?
@@ -301,108 +301,108 @@
def test_should_verify_successfully_if_expected_call_was_made_at_least_once
expectation = new_expectation.at_least_once
3.times {expectation.invoke([])}
assert expectation.verified?
end
-
+
def test_should_not_verify_successfully_if_expected_call_was_not_made_at_least_once
expectation = new_expectation.with(1, 2, 3).at_least_once
assert !expectation.verified?
assert_match(/expected at least once, not yet invoked/i, expectation.mocha_inspect)
end
-
+
def test_should_verify_successfully_if_expected_call_was_made_expected_number_of_times
expectation = new_expectation.times(2)
2.times {expectation.invoke([])}
assert expectation.verified?
end
-
+
def test_should_not_verify_successfully_if_expected_call_was_made_too_few_times
expectation = new_expectation.times(2)
1.times {expectation.invoke([])}
assert !expectation.verified?
assert_match(/expected exactly twice/i, expectation.mocha_inspect)
assert_match(/invoked once/i, expectation.mocha_inspect)
end
-
+
def test_should_not_verify_successfully_if_expected_call_was_made_too_many_times
expectation = new_expectation.times(2)
3.times {expectation.invoke([])}
assert !expectation.verified?
end
-
+
def test_should_increment_assertion_counter_for_expectation_because_it_does_need_verifyng
expectation = new_expectation
expectation.invoke([])
assertion_counter = SimpleCounter.new
expectation.verified?(assertion_counter)
assert_equal 1, assertion_counter.count
end
-
+
def test_should_not_increment_assertion_counter_for_stub_because_it_does_not_need_verifying
stub = Expectation.new(nil, :expected_method).at_least(0)
assertion_counter = SimpleCounter.new
stub.verified?(assertion_counter)
assert_equal 0, assertion_counter.count
end
-
+
def test_should_store_backtrace_from_point_where_expectation_was_created
execution_point = ExecutionPoint.current; expectation = Expectation.new(nil, :expected_method)
assert_equal execution_point, ExecutionPoint.new(expectation.backtrace)
end
-
+
class FakeMock
-
+
def initialize(name)
@name = name
end
def mocha_inspect
@name
end
-
+
end
-
+
def test_should_raise_error_with_message_indicating_which_method_was_expected_to_be_called_on_which_mock_object_with_which_parameters_and_in_what_sequences
mock = FakeMock.new('mock')
sequence_one = Sequence.new('one')
sequence_two = Sequence.new('two')
expectation = Expectation.new(mock, :expected_method).with(1, 2, {'a' => true}, {:b => false}, [1, 2, 3]).in_sequence(sequence_one, sequence_two)
assert !expectation.verified?
assert_match "mock.expected_method(1, 2, {'a' => true}, {:b => false}, [1, 2, 3]); in sequence 'one'; in sequence 'two'", expectation.mocha_inspect
end
-
+
class FakeConstraint
-
+
def initialize(allows_invocation_now)
@allows_invocation_now = allows_invocation_now
end
-
+
def allows_invocation_now?
@allows_invocation_now
end
-
+
end
-
+
def test_should_be_in_correct_order_if_all_ordering_constraints_allow_invocation_now
constraint_one = FakeConstraint.new(allows_invocation_now = true)
constraint_two = FakeConstraint.new(allows_invocation_now = true)
expectation = Expectation.new(nil, :method_one)
expectation.add_ordering_constraint(constraint_one)
expectation.add_ordering_constraint(constraint_two)
assert expectation.in_correct_order?
end
-
+
def test_should_not_be_in_correct_order_if_one_ordering_constraint_does_not_allow_invocation_now
constraint_one = FakeConstraint.new(allows_invocation_now = true)
constraint_two = FakeConstraint.new(allows_invocation_now = false)
expectation = Expectation.new(nil, :method_one)
expectation.add_ordering_constraint(constraint_one)
expectation.add_ordering_constraint(constraint_two)
assert !expectation.in_correct_order?
end
-
+
def test_should_match_if_all_ordering_constraints_allow_invocation_now
constraint_one = FakeConstraint.new(allows_invocation_now = true)
constraint_two = FakeConstraint.new(allows_invocation_now = true)
expectation = Expectation.new(nil, :method_one)
expectation.add_ordering_constraint(constraint_one)
@@ -439,67 +439,67 @@
def test_should_be_satisfied_when_minimum_number_of_invocations_has_been_made
expectation = Expectation.new(nil, :method_one).at_least(2)
2.times { expectation.invoke([]) }
assert expectation.satisfied?
end
-
+
class FakeSequence
-
+
attr_reader :expectations
-
+
def initialize
@expectations = []
end
-
+
def constrain_as_next_in_sequence(expectation)
@expectations << expectation
end
-
+
end
-
+
def test_should_tell_sequences_to_constrain_expectation_as_next_in_sequence
sequence_one = FakeSequence.new
sequence_two = FakeSequence.new
expectation = Expectation.new(nil, :method_one)
assert_equal expectation, expectation.in_sequence(sequence_one, sequence_two)
assert_equal [expectation], sequence_one.expectations
assert_equal [expectation], sequence_two.expectations
end
-
+
class FakeState
-
+
def initialize
@active = false
end
-
+
def activate
@active = true
end
-
+
def active?
@active
end
-
+
end
-
+
def test_should_change_state_when_expectation_is_invoked
state = FakeState.new
expectation = Expectation.new(nil, :method_one)
expectation.then(state)
expectation.invoke([])
assert state.active?
end
-
+
def test_should_match_when_state_is_active
state = FakeState.new
expectation = Expectation.new(nil, :method_one)
expectation.when(state)
assert !expectation.match?(:method_one)
-
+
state.activate
assert expectation.match?(:method_one)
end
def test_should_record_invocation
@@ -524,7 +524,7 @@
expectation.invoke(1)
assert_equal 1, expectation.invocation_count
expectation.invocation_count = 3
assert_equal 3, expectation.invocation_count
end
-
+
end