001package com.changenode;
002
003import org.junit.jupiter.api.Test;
004import org.slf4j.Logger;
005import org.slf4j.LoggerFactory;
006
007import static org.assertj.core.api.Assertions.assertThat;
008
009public class CalculatorTest {
010
011    private Calculator calculator = new Calculator();
012
013    private static final Logger LOG = LoggerFactory.getLogger(CalculatorTest.class);
014
015    // TODO Add some more javadoc here!
016    @Test
017    public void testAdd() {
018        assertThat(calculator.value()).isZero();
019        calculator.add(5);
020        assertThat(calculator.value()).isEqualTo(5);
021    }
022
023    @Test
024    public void testSubtract() {
025        assertThat(calculator.value()).isZero();
026        calculator.subtract(5);
027        assertThat(calculator.value()).isEqualTo(-5);
028
029    }
030
031    @Test
032    public void testMultiply() {
033        assertThat(calculator.value()).isZero();
034
035        calculator.add(5).multiply(2);
036
037        assertThat(calculator.value()).isEqualTo(10);
038
039    }
040
041    @Test
042    public void testDivide() {
043        assertThat(calculator.value()).isZero();
044
045        calculator.add(10).divide(2);
046
047        assertThat(calculator.value()).isEqualTo(5);
048
049    }
050
051    /**
052     * @see <a href=
053     * "http://stackoverflow.com/questions/14137989/java-division-by-zero-doesnt-throw-an-arithmeticexception-why"
054     * >Why doesn't divide by zero return an error?</a>
055     */
056    @Test()
057    public void testDivideByZero() {
058        calculator.divide(2);
059        LOG.info("Divide by zero results in... {}", calculator.value());
060        assertThat(calculator.value()).isEqualTo(0);
061    }
062
063    @Test
064    public void testAbitrary() {
065        assertThat(calculator.arbitrarilyComplexMethod("bar", 0, null, null, null)).isEqualTo(0);
066
067        assertThat(calculator.arbitrarilyComplexMethodPart2("bar", 0, null, null, null)).isEqualTo(0);
068    }
069
070}