/** * Adds a presenter to the storage * * @param presenter a presenter to add */ public void add(final Presenter presenter) { String id = presenter.getClass().getSimpleName() + "/" + System.nanoTime() + "/" + (int)(Math.random() * Integer.MAX_VALUE); idToPresenter.put(id, presenter); presenterToId.put(presenter, id); presenter.addOnDestroyListener(new Presenter.OnDestroyListener() { @Override public void onDestroy() { idToPresenter.remove(presenterToId.remove(presenter)); } }); }
@Test public void testOnDestroy() throws Exception { Presenter.OnDestroyListener listener = mock(Presenter.OnDestroyListener.class); Presenter presenter = new Presenter(); presenter.create(null); presenter.addOnDestroyListener(listener); presenter.destroy(); verify(listener, times(1)).onDestroy(); verifyNoMoreInteractions(listener); }
@Test public void testOnNoDestroy() throws Exception { Presenter.OnDestroyListener listener = mock(Presenter.OnDestroyListener.class); Presenter presenter = new Presenter(); presenter.create(null); presenter.addOnDestroyListener(listener); presenter.removeOnDestroyListener(listener); presenter.destroy(); verifyNoMoreInteractions(listener); } }
Presenter mockPresenter() { Presenter presenter = mock(Presenter.class); final ArrayList<Presenter.OnDestroyListener> onDestroyListeners = new ArrayList<>(); doAnswer(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { onDestroyListeners.add((Presenter.OnDestroyListener) invocation.getArguments()[0]); return null; } }).when(presenter).addOnDestroyListener(any(Presenter.OnDestroyListener.class)); doAnswer(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { for (Presenter.OnDestroyListener listener : onDestroyListeners) listener.onDestroy(); return null; } }).when(presenter).destroy(); return presenter; }