package org.testory; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.testory.Testory.a; import static org.testory.Testory.given; import static org.testory.Testory.mock; import static org.testory.Testory.thenCalled; import static org.testory.Testory.willReturn; import static org.testory.testing.Fakes.newObject; import static org.testory.testing.HamcrestMatchers.hasMessageContaining; import org.junit.Before; import org.junit.Test; public class TestAnyA { private Mockable mock; private Object object, otherObject; private final boolean booleanA = true, booleanB = false; private final char charA = 'a', charB = 'b'; private final byte byteA = 1, byteB = 2; private final short shortA = 1, shortB = 2; private final int intA = 1, intB = 2; private final long longA = 1, longB = 2; private final float floatA = 1, floatB = 2; private final double doubleA = 1, doubleB = 2; @Before public void before() { mock = mock(Mockable.class); object = newObject("object"); otherObject = newObject("otherObject"); } @Test public void requires_equal_boolean() { given(willReturn(true), mock).invoke(a(booleanA)); assertTrue(mock.invoke(booleanA)); assertFalse(mock.invoke(booleanB)); } @Test public void requires_equal_char() { given(willReturn(true), mock).invoke(a(charA)); assertTrue(mock.invoke(charA)); assertFalse(mock.invoke(charB)); } @Test public void requires_equal_byte() { given(willReturn(true), mock).invoke(a(byteA)); assertTrue(mock.invoke(byteA)); assertFalse(mock.invoke(byteB)); } @Test public void requires_equal_short() { given(willReturn(true), mock).invoke(a(shortA)); assertTrue(mock.invoke(shortA)); assertFalse(mock.invoke(shortB)); } @Test public void requires_equal_int() { given(willReturn(true), mock).invoke(a(intA)); assertTrue(mock.invoke(intA)); assertFalse(mock.invoke(intB)); } @Test public void requires_equal_long() { given(willReturn(true), mock).invoke(a(longA)); assertTrue(mock.invoke(longA)); assertFalse(mock.invoke(longB)); } @Test public void requires_equal_float() { given(willReturn(true), mock).invoke(a(floatA)); assertTrue(mock.invoke(floatA)); assertFalse(mock.invoke(floatB)); } @Test public void requires_equal_double() { given(willReturn(true), mock).invoke(a(doubleA)); assertTrue(mock.invoke(doubleA)); assertFalse(mock.invoke(doubleB)); } @Test public void requires_equal_object() { given(willReturn(true), mock).invoke(a(object)); assertTrue(mock.invoke(object)); assertFalse(mock.invoke(otherObject)); } @Test public void checks_that_value_is_not_null() { try { a(null); fail(); } catch (TestoryException e) {} } @Test public void prints_value() { try { thenCalled(mock).invoke(a(intA)); fail(); } catch (TestoryAssertionError e) { assertThat(e, hasMessageContaining(".invoke(a(" + intA + "))")); } try { thenCalled(mock).invoke(a(object)); fail(); } catch (TestoryAssertionError e) { assertThat(e, hasMessageContaining(".invoke(a(" + object + "))")); } try { thenCalled(mock).invoke(a(new Object[] { object })); fail(); } catch (TestoryAssertionError e) { assertThat(e, hasMessageContaining(".invoke(a([" + object + "]))")); } } private static abstract class Mockable { abstract boolean invoke(boolean value); abstract boolean invoke(char value); abstract boolean invoke(byte value); abstract boolean invoke(short value); abstract boolean invoke(int value); abstract boolean invoke(long value); abstract boolean invoke(float value); abstract boolean invoke(double value); abstract boolean invoke(Object value); } }