LimitingTickListener limiter(int tickLimit) { return new LimitingTickListener(getModel(), tickLimit); }
/** * Tests the actual elapsed time. */ @Test public void testRealTime() { getModel().register(new LimitingTickListener(getModel(), 3)); final long start = System.nanoTime(); getModel().start(); final long duration = System.nanoTime() - start;// - Realtime.STARTUP_DELAY; // duration should be somewhere between 200 and 300 ms assertThat(duration).isAtLeast(200000000L); assertThat(duration).isLessThan(300000000L); assertThat(getModel().getCurrentTime()).isEqualTo(300); assertThat(getModel().isExecutorAlive()).isFalse(); }
/** * Tests that restarting the time is forbidden. */ @Test public void testStartStopStart() { final LimitingTickListener ltl = new LimitingTickListener(getModel(), 3); getModel().register(ltl); getModel().start(); boolean fail = false; try { getModel().start(); } catch (final IllegalStateException e) { fail = true; assertThat(e.getMessage()).contains("can be started only once"); } assertThat(fail).isTrue(); assertThat(getModel().isExecutorAlive()).isFalse(); }
public void afterTick(TimeLapse timeLapse) {} }); getModel().register(new LimitingTickListener(getModel(), 8));
/** * Tests that time lapses provided via the listener are behaving as they * should. */ @Test public void timeLapseSafety() { final List<IllegalArgumentException> failures = new ArrayList<>(); getModel().register(new LimitingTickListener(getModel(), 3)); getModel().register(new TickListener() { @Override public void tick(TimeLapse timeLapse) { timeLapse.consume(1L); } @Override public void afterTick(TimeLapse timeLapse) { try { timeLapse.consume(1L); } catch (final IllegalArgumentException e) { failures.add(e); } } }); getModel().start(); assertThat(getModel().isTicking()).isFalse(); assertThat(failures).hasSize(3); }
/** * Test that listeners are called in order of adding to model. */ @Test public void testTickOrder() { final TickListenerChecker a = checker(); final TickListenerChecker b = checker(); getModel().register(a); getModel().register(b); getModel().register(new LimitingTickListener(getModel(), 1)); getModel().start(); assertThat(b.getLastTickTime() - a.getLastTickTime()).isAtLeast(0L); assertThat(a.getLastAfterTickTime() - b.getLastTickTime()).isAtLeast(0L); assertThat(b.getLastAfterTickTime() - a.getLastAfterTickTime()) .isAtLeast(0L); }
/** * Basic register/unregister tests. */ @Test public void testTicks() { final TickListenerChecker a = checker(); final LimitingTickListener ltl = new LimitingTickListener(getModel(), 1); a.assertCountEquals(0L); assertThat(getModel().register(a)).isTrue(); assertThat(getModel().register(ltl)).isTrue(); assertThat(getModel().getTickListeners()).containsExactly(a, ltl).inOrder(); getModel().start(); assertThat(getModel().getCurrentTime()).isEqualTo( getModel().getTickLength()); assertThat(a.getTickCount()).isEqualTo(1L); getModel().unregister(a); assertThat(getModel().getTickListeners()).containsExactly(ltl); assertThat(a.getTickCount()).isEqualTo(1L); // re-register assertThat(getModel().register(a)).isTrue(); assertThat(getModel().getTickListeners()).containsExactly(ltl, a).inOrder(); }
getModel().register(new LimitingTickListener(getModel(), 2)); getModel().register(new TickListener() { @Override
assertThat(getModel().register(c)).isTrue(); assertThat(getModel().register(d)).isTrue(); assertThat(getModel().register(new LimitingTickListener(getModel(), 4))) .isTrue(); getModel().start();
/** * Test starting and stopping time. */ @Test public void testStartStop() { final LimitingTickListener ltl = new LimitingTickListener(getModel(), 3); final ListenerEventHistory leh = new ListenerEventHistory(); getModel().getEventAPI().addListener(leh, ClockEventType.values()); getModel().register(ltl); getModel().start(); assertEquals(3 * getModel().getTickLength(), getModel().getCurrentTime()); getModel().start(); assertEquals(6 * getModel().getTickLength(), getModel().getCurrentTime()); assertThat(leh.getEventTypeHistory()).isEqualTo( asList( ClockEventType.STARTED, ClockEventType.STOPPED, ClockEventType.STARTED, ClockEventType.STOPPED)); }