### Question:
DataSourceDefPage implements WizardPage,
                   DataSourceDefPageView.Presenter { @Override public void isComplete(Callback<Boolean> callback) { boolean complete = editorHelper.isNameValid() && editorHelper.isConnectionURLValid() && editorHelper.isUserValid() && editorHelper.isPasswordValid() && editorHelper.isDriverValid(); callback.callback(complete); } @Inject  DataSourceDefPage(final DataSourceDefPageView view,
                             final DataSourceDefMainPanel mainPanel,
                             final DataSourceDefEditorHelper editorHelper,
                             final Event<WizardPageStatusChangeEvent> statusChangeEvent); void setDataSourceDef(DataSourceDef dataSourceDef); void setModule(final Module module); @Override String getTitle(); @Override void isComplete(Callback<Boolean> callback); @Override void initialise(); @Override void prepareView(); @Override Widget asWidget(); void loadDrivers(final Command onSuccessCommand,
                            final ParameterizedCommand<Throwable> onFailureCommand); void notifyChange(); void setComplete(boolean complete); void clear();  }### Answer:
@Test public void testValidCompletion() { loadPage(); completeValidDefPage(); verify( statusChangeEvent, times( 5 ) ).fire( any( WizardPageStatusChangeEvent.class ) ); assertEquals( NAME, dataSourceDef.getName() ); assertEquals( CONNECTION_URL, dataSourceDef.getConnectionURL() ); assertEquals( USER, dataSourceDef.getUser() ); assertEquals( PASSWORD, dataSourceDef.getPassword() ); assertEquals( DRIVER_UUID, dataSourceDef.getDriverUuid() ); defPage.isComplete( new Callback<Boolean>() { @Override public void callback( Boolean result ) { assertTrue( result ); } } ); }