### Question:
ProjectClassList implements IsWidget,
                    ProjectClassListView.Presenter { @Override public void onRemoveClass( ClassRow classRow ) { classes.remove( classRow ); setClasses( classes ); } ProjectClassList(); @Inject  ProjectClassList( ProjectClassListView view ); @Override Widget asWidget(); void setClasses( List<ClassRow> classes ); List<ClassRow> getClasses(); void setNewClassHelpMessage( String helpMessage ); void setNewClassName( String newClassName ); @Override void onLoadClasses(); @Override void onLoadClass(); @Override void onClassNameChange(); @Override void onRemoveClass( ClassRow classRow ); @Override void addLoadClassesHandler( ProjectClassListView.LoadClassesHandler loadClassesHandler ); void setReadOnly( boolean readOnly ); void redraw();  }### Answer:
@Test public void testOnRemoveClass() { final ProjectClassListView.LoadClassesHandler handler = new ProjectClassListView.LoadClassesHandler() { @Override public void onLoadClasses() { List<ClassRow> classes = new ArrayList<ClassRow>(); classes.add(classRow1); classes.add(classRow2); presenter.setClasses(classes); } @Override public void onLoadClass(String className) { } }; presenter.addLoadClassesHandler(handler); presenter.onLoadClasses(); verify(view, times(1)).redraw(); assertThat(presenter.getClasses()).hasSize(2); presenter.onRemoveClass(classRow1); verify(view, times(2)).redraw(); assertThat(presenter.getClasses()).hasSize(1); assertThat(presenter.getClasses()).doesNotContain(classRow1); presenter.onRemoveClass(classRow2); verify(view, times(3)).redraw(); assertThat(presenter.getClasses()).hasSize(0); }