public RealCoinIdentifier(ICoinIdentifier successor, ICoinCheck coinCheck, CoinInput coinSpec, string value)
 {
     _coinSpec = coinSpec;
     _successor = successor;
     _coinCheck = coinCheck;
     _value = value;
 }
        public void Calls_coin_identifier()
        {
            var coinInput = new CoinInput();

            _sorter.Sort(coinInput);

            _coinIdentifier.AssertWasCalled(i => i.Identify(coinInput));
        }
        public void Should_call_check_coin()
        {
            var coinInput = new CoinInput {Mass = 20};

            _realCoinIdentifier.Identify(coinInput);

            _coinCheck.AssertWasCalled(cc => cc.CheckCoin(Arg<CoinInput>.Is.Equal(coinInput), Arg<CoinInput>.Matches(x => Math.Abs(x.Mass - _expectedMass) < 0.0001)));
        }
        public void Calls_successor_if_diameter_is_the_same()
        {
            var coinInput = new CoinInput {Diameter = 12};
            var coinSpec = new CoinInput {Diameter = 12};

            _coinDiameterCheck.CheckCoin(coinInput, coinSpec);

            _successor.AssertWasCalled(s => s.CheckCoin(coinInput, coinSpec));
        }
        public void Should_return_correct_value_if_coin_check_passes()
        {
            var coinInput = new CoinInput {Mass = 20};
            _coinCheck.Stub(cc => cc.CheckCoin(null, null)).IgnoreArguments().Return(true);

            Coin output = _realCoinIdentifier.Identify(coinInput);

            Assert.That(output.Value, Is.EqualTo(_value));
        }
        public void Should_call_successor_if_coin_check_fails()
        {
            var coinInput = new CoinInput {Mass = 20};
            _coinCheck.Stub(cc => cc.CheckCoin(null, null)).IgnoreArguments().Return(false);

            _realCoinIdentifier.Identify(coinInput);

            _successor.AssertWasCalled(s => s.Identify(coinInput));
        }
        public void Returns_false_if_mass_is_very_different()
        {
            var coinInput = new CoinInput {Mass = 1};
            var coinSpec = new CoinInput {Mass = 12};

            bool result = _coinMassCheck.CheckCoin(coinInput, coinSpec);

            Assert.That(result, Is.False);
        }
        public void Calls_successor_if_mass_is_the_same()
        {
            var coinInput = new CoinInput {Mass = 1};
            var coinSpec = new CoinInput {Mass = 1};

            _coinMassCheck.CheckCoin(coinInput, coinSpec);

            _successor.AssertWasCalled(x => x.CheckCoin(coinInput, coinSpec));
        }
        public void Calls_successor_if_mass_is_less_than_one_percent_more()
        {
            var coinInput = new CoinInput {Mass = 1.001};
            var coinSpec = new CoinInput {Mass = 1};

            _coinMassCheck.CheckCoin(coinInput, coinSpec);

            _successor.AssertWasCalled(x => x.CheckCoin(coinInput, coinSpec));
        }
        public void Returns_result_from_successor_if_mass_is_the_same()
        {
            var coinInput = new CoinInput {Mass = 1};
            var coinSpec = new CoinInput {Mass = 1};
            _successor.Stub(x => x.CheckCoin(coinInput, coinSpec)).Return(false);

            bool result = _coinMassCheck.CheckCoin(coinInput, coinSpec);

            Assert.That(result, Is.False);
        }
        public void Returns_value_from_identifier()
        {
            var coinInput = new CoinInput();
            var coin = new Coin();
            _coinIdentifier.Stub(i => i.Identify(coinInput)).Return(coin);

            Coin result = _sorter.Sort(coinInput);

            Assert.That(result, Is.EqualTo(coin));
        }
        public void Returns_result_from_successor_if_diameter_is_the_same()
        {
            var coinInput = new CoinInput {Diameter = 12};
            var coinSpec = new CoinInput {Diameter = 12};
            _successor.Stub(s => s.CheckCoin(coinInput, coinSpec)).Return(false);

            bool result = _coinDiameterCheck.CheckCoin(coinInput, coinSpec);

            Assert.That(result, Is.False);
        }
        public void Should_return_value_from_successor()
        {
            var coinInput = new CoinInput {Mass = 20};
            _coinCheck.Stub(cc => cc.CheckCoin(null, null)).IgnoreArguments().Return(false);
            var successorCoin = new Coin {Value = _value};
            _successor.Stub(s => s.Identify(null)).IgnoreArguments().Return(successorCoin);

            Coin output = _realCoinIdentifier.Identify(coinInput);

            Assert.That(output, Is.EqualTo(successorCoin));
        }
        private static void Main()
        {
            while (true) {
                double mass = ReadCoinMass();
                double diameter = ReadCoinDiameter();
                var coinInput = new CoinInput {Mass = mass, Diameter = diameter};

                Coin coin = _sorter.Sort(coinInput);

                Con.WriteLine("You have entered a {0} coin", coin.Value);

                if (!ReadContinue()) {
                    return;
                }
                Con.WriteLine();
            }
        }
 public bool CheckCoin(CoinInput coinInput, CoinInput coinSpec)
 {
     return true;
 }
 public Coin Identify(CoinInput coinInput)
 {
     return new Coin {Value = "fake"};
 }
 public Coin Identify(CoinInput coinInput)
 {
     return _coinCheck.CheckCoin(coinInput, _coinSpec) ? new Coin {Value = _value} : _successor.Identify(coinInput);
 }
 public bool CheckCoin(CoinInput coinInput, CoinInput coinSpec)
 {
     return Math.Abs((coinInput.Mass - coinSpec.Mass)/coinSpec.Mass) < 0.01 && _successor.CheckCoin(coinInput, coinSpec);
 }
Example #19
0
 public Coin Sort(CoinInput coinInput)
 {
     return _coinIdentifier.Identify(coinInput);
 }
 public bool CheckCoin(CoinInput coinInput, CoinInput coinSpec)
 {
     return Math.Abs(coinInput.Diameter - coinSpec.Diameter) < 0.0001 && _successor.CheckCoin(coinInput, coinSpec);
 }