@Override public IntSupplier setIntSupplier(final StatisticDescriptor descriptor, final IntSupplier supplier) { return setIntSupplier(getIntId(descriptor), supplier); }
@Override public IntSupplier setIntSupplier(final String name, final IntSupplier supplier) { return setIntSupplier(nameToId(name), supplier); }
@Test public void badSupplierParamShouldThrowError() { IntSupplier supplier1 = mock(IntSupplier.class); when(supplier1.getAsInt()).thenReturn(23); thrown.expect(IllegalArgumentException.class); stats.setIntSupplier(23, supplier1); } }
@Test public void invokeSuppliersShouldCatchSupplierErrorsAndReturnCount() { IntSupplier supplier1 = mock(IntSupplier.class); when(supplier1.getAsInt()).thenThrow(NullPointerException.class); stats.setIntSupplier(4, supplier1); assertEquals(1, stats.invokeSuppliers()); verify(supplier1).getAsInt(); }
@Test public void invokeSuppliersShouldLogErrorOnlyOnce() { Logger logger = mock(Logger.class); StatisticsImpl.logger = logger; IntSupplier supplier1 = mock(IntSupplier.class); when(supplier1.getAsInt()).thenThrow(NullPointerException.class); stats.setIntSupplier(4, supplier1); assertEquals(1, stats.invokeSuppliers()); // String message, Object p0, Object p1, Object p2 verify(logger, times(1)).warn(anyString(), isNull(), anyInt(), isA(NullPointerException.class)); assertEquals(1, stats.invokeSuppliers()); // Make sure the logger isn't invoked again verify(logger, times(1)).warn(anyString(), isNull(), anyInt(), isA(NullPointerException.class)); }
@Test public void getSupplierCountShouldReturnCorrectCount() { IntSupplier supplier1 = mock(IntSupplier.class); stats.setIntSupplier(4, supplier1); assertEquals(1, stats.getSupplierCount()); }
@Test public void invokeIntSuppliersShouldUpdateStats() { IntSupplier supplier1 = mock(IntSupplier.class); when(supplier1.getAsInt()).thenReturn(23); stats.setIntSupplier(4, supplier1); assertEquals(0, stats.invokeSuppliers()); verify(supplier1).getAsInt(); assertEquals(23, stats.getInt(4)); }