using Calculator.Domain; using MbUnit.Framework; namespace Calculator.Test.presentation { [TestFixture] public class NumberBuilderTest { private INumberBuilder CreateSUT() { return new NumberBuilder(); } [Test] public void should_be_able_to_append_a_new_digit_to_a_number() { INumberBuilder sut = CreateSUT(); sut.Append("1"); Assert.AreEqual(CreateNumber(1), sut.Build()); sut.Append("1"); Assert.AreEqual(CreateNumber(11), sut.Build()); sut.Append("9"); Assert.AreEqual(CreateNumber(119), sut.Build()); } [Test] public void Should_be_able_to_append_a_decimal_point() { INumberBuilder sut = CreateSUT(); sut.Append("1"); Assert.AreEqual(CreateNumber(1), sut.Build()); sut.Append("."); Assert.AreEqual(CreateNumber(1.0), sut.Build()); sut.Append("8"); Assert.AreEqual(CreateNumber(1.8), sut.Build()); } [Test] public void should_ignore_decimals_after_first_decimal() { INumberBuilder sut = CreateSUT(); sut.Append("5"); sut.Append("."); sut.Append("5"); sut.Append("."); sut.Append("7"); sut.Append("."); Assert.AreEqual(CreateNumber(5.57), sut.Build()); } [Test] public void Should_be_able_to_remove_the_last_digit() { INumberBuilder sut = CreateSUT(); sut.Append("1"); sut.Append("2"); sut.Append("3"); sut.RemoveLastDigit(); Assert.AreEqual(CreateNumber(12), sut.Build()); } [Test] public void should_return_zero_when_trying_to_remove_the_last_digit_when_only_one_digit_has_been_entered() { INumberBuilder sut = CreateSUT(); sut.Append("1"); sut.RemoveLastDigit(); Assert.AreEqual(CreateNumber(0), sut.Build()); } [Test] public void should_return_zero_when_no_digits_are_entered_and_you_try_to_remove_the_last_digit() { INumberBuilder sut = CreateSUT(); sut.RemoveLastDigit(); Assert.AreEqual(CreateNumber(0), sut.Build()); } private INumber CreateNumber(double fromNumber) { return new Number(fromNumber); } } }