TimesheetChangePresenterImplEx extends TimesheetChangePresenterImpl implements HoursChangeObserver { @Override public void hoursChanged(Project project) { calculateAndSetProjectSum(project); } TimesheetChangePresenterImplEx(Map<String, Object> context, PresenterFactoryEx presenterFactory, TimesheetChangeViewEx view, Presenter returnPresenter,
			TimesheetService service, ProjectService projectService);  TimesheetChangePresenterImplEx(Map<String, Object> context, PresenterFactoryEx presenterFactory, TimesheetChangeViewEx view, Presenter returnPresenter,
			SubviewCapablePresenter capablePresenter, TimesheetService service, ProjectService projectService);  TimesheetChangePresenterImplEx(Map<String, Object> context, TimesheetChangeViewEx view,
			Presenter returnPresenter, TimesheetService service); @Override TimesheetChangeViewEx getView(); @Override void startPresenting(); @Override void onSave(); @Override void onRemove(); @Override void hoursChanged(Project project);  }
@Test public void testHoursChanged() { presenterImpl.hoursChanged(project); verify(view, times(1)).setProjectSum(eq("test"), floatThat(new BaseMatcher<Float>() { float target = 1.0f + 22.0f / 60.0f; @Override public void describeTo(Description arg0) { arg0.appendText("Roundabout " + target); } @Override public boolean matches(Object arg0) { return Math.abs(((Float) arg0).floatValue() - target) < Float.MIN_NORMAL; } })); }