@Test public void cannotStartWithoutViewCreated() throws Exception { assertThatThrownBy(() -> underTest.start()) .isInstanceOf(IllegalStateException.class) .hasMessageContaining("init"); }
@Test public void startsFromDefaultModel() throws Exception { @SuppressWarnings("unchecked") Connection<String> renderer = mock(Connection.class); underTest.connect(eventConsumer -> renderer); underTest.start(); verify(renderer).accept("init"); }
@Test public void canStart() throws Exception { underTest.connect(view()); underTest.start(); }
@Test public void eventsWhenNotRunningAreDropped() throws Exception { @SuppressWarnings("unchecked") Connection<String> renderer = mock(Connection.class); AtomicReference<Consumer<String>> consumer = new AtomicReference<>(); underTest.connect( eventConsumer -> { consumer.set(eventConsumer); return renderer; }); consumer.get().accept("!"); underTest.start(); verify(renderer, never()).accept("init!"); } }
@Test public void updaterCanReceiveViewUpdates() throws Exception { @SuppressWarnings("unchecked") Connection<String> renderer = mock(Connection.class); AtomicReference<Consumer<String>> consumer = new AtomicReference<>(); underTest.connect( eventConsumer -> { consumer.set(eventConsumer); return renderer; }); underTest.start(); consumer.get().accept("!"); verify(renderer).accept("init!"); }
@Test public void resumingStartsFromMostRecentModel() throws Exception { @SuppressWarnings("unchecked") Connection<String> renderer = mock(Connection.class); AtomicReference<Consumer<String>> consumer = new AtomicReference<>(); underTest.connect( eventConsumer -> { consumer.set(eventConsumer); return renderer; }); underTest.start(); consumer.get().accept("!"); verify(renderer).accept("init!"); underTest.stop(); reset(renderer); underTest.start(); verify(renderer).accept("init!"); } }
@Test public void restoringStartsFromRestoredModel() throws Exception { @SuppressWarnings("unchecked") Connection<String> renderer = mock(Connection.class); underTest.replaceModel("restored"); underTest.connect(eventConsumer -> renderer); underTest.start(); verify(renderer).accept("restored"); }
@Test public void cannotDestroyWhenRunning() throws Exception { underTest.connect(view()); underTest.start(); assertThatThrownBy(() -> underTest.disconnect()) .isInstanceOf(IllegalStateException.class) .hasMessageContaining("running"); }
@Test public void cannotRestoreStateAfterStarting() throws Exception { underTest.connect(view()); underTest.start(); assertThatThrownBy(() -> underTest.replaceModel("restored")) .isInstanceOf(IllegalStateException.class) .hasMessageContaining("running"); }
@Test public void cannotStopTwice() throws Exception { underTest.connect(view()); underTest.start(); underTest.stop(); assertThatThrownBy(() -> underTest.stop()) .isInstanceOf(IllegalStateException.class) .hasMessageContaining("created"); }
@Test public void canStop() throws Exception { underTest.connect(view()); underTest.start(); underTest.stop(); }
@Test public void updaterReceivesViewUpdatesOnMainThread() throws Exception { KnownThreadWorkRunner mainThreadRunner = new KnownThreadWorkRunner(); final AtomicReference<Thread> actualThread = new AtomicReference<>(); final Semaphore rendererGotModel = new Semaphore(0); @SuppressWarnings("unchecked") Connection<String> renderer = new Connection<String>() { @Override public void accept(String value) { actualThread.set(Thread.currentThread()); rendererGotModel.release(); } @Override public void dispose() {} }; underTest = createWithWorkRunner(mainThreadRunner); underTest.connect( eventConsumer -> { return renderer; }); underTest.start(); rendererGotModel.tryAcquire(5, TimeUnit.SECONDS); assertThat(actualThread.get(), is(mainThreadRunner.workerThread)); }
@Test public void canDestroyView() throws Exception { underTest.connect(view()); underTest.start(); underTest.stop(); underTest.disconnect(); }
@Test public void canSaveStateAfterStarting() throws Exception { underTest.connect(view()); underTest.start(); String model = underTest.getModel(); assertEquals("init", model); }
underTest.start(); consumer.get().accept("2"); underTest.stop();
@Test public void canSaveStateAfterStopping() throws Exception { underTest.connect(view()); underTest.start(); underTest.stop(); String model = underTest.getModel(); assertEquals("init", model); }
@Test public void canSaveState() throws Exception { underTest.connect(view()); underTest.start(); underTest.stop(); String model = underTest.getModel(); assertEquals("init", model); }
@Test public void canRestoreStateAfterStopping() throws Exception { underTest.connect(view()); underTest.start(); underTest.stop(); underTest.replaceModel("restored"); String model = underTest.getModel(); assertEquals("restored", model); } }