/*******************************************************************************
* Copyright (c) 2007, 2014 compeople AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* compeople AG - initial API and implementation
*******************************************************************************/
package org.eclipse.riena.ui.ridgets.swt.views;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.riena.beans.common.Person;
import org.eclipse.riena.core.test.RienaTestCase;
import org.eclipse.riena.core.test.collect.UITestCase;
import org.eclipse.riena.core.util.ReflectionUtils;
import org.eclipse.riena.ui.ridgets.ITextRidget;
import org.eclipse.riena.ui.ridgets.controller.AbstractWindowController;
import org.eclipse.riena.ui.swt.utils.SwtUtilities;
import org.eclipse.riena.ui.swt.utils.UIControlsFactory;
/**
* Testcase for {@link AbstractDialogView}.
*/
@UITestCase
public class DialogViewTest extends RienaTestCase {
private DialogViewStub dialogView;
private AbstractWindowController dialogViewController;
private Shell shell;
private final static String BINDING_ID_FIRSTNAME = "txtFirstName";
private final static String BINDING_ID_LASTNAME = "txtLastName";
private final static String VALUE_FIRSTNAME = "Peter";
private final static String VALUE_LASTNAME = "Lustig";
/*
* (non-Javadoc)
*
* @see org.eclipse.riena.tests.RienaTestCase#setUp()
*/
@Override
protected void setUp() throws Exception {
shell = new Shell();
createDefaultRealm();
dialogViewController = new AbstractWindowControllerStub();
dialogView = new DialogViewStub(shell);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.riena.tests.RienaTestCase#tearDown()
*/
@Override
protected void tearDown() throws Exception {
dialogView.close();
shell.close();
SwtUtilities.dispose(shell);
}
private void createDefaultRealm() {
final Display display = Display.getDefault();
final Realm realm = SWTObservables.getRealm(display);
assertNotNull(realm);
ReflectionUtils.invokeHidden(realm, "setDefault", realm);
}
public void testCreateController() throws Exception {
assertNotNull(dialogView.getController());
assertEquals(dialogViewController, dialogView.getController());
}
public void testBinding() throws Exception {
// compares the textfield-text with the bound value
// runs in a separate thread, because the build-method blocks
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
assertNotNull(dialogView.getTextFirstName());
assertNotNull(dialogView.getTextLastName());
assertEquals(dialogView.getTextFirstName(), VALUE_FIRSTNAME);
assertEquals(dialogView.getTextLastName(), VALUE_LASTNAME);
dialogView.close();
}
});
dialogView.open();
}
private class DialogViewStub extends AbstractDialogView {
private Text txtFirstName;
private Text txtLastName;
/**
* @param parent
*/
public DialogViewStub(final Composite parent) {
super(parent.getShell());
}
@Override
protected Control buildView(final Composite parent) {
txtFirstName = UIControlsFactory.createText(parent);
addUIControl(txtFirstName, BINDING_ID_FIRSTNAME);
txtLastName = UIControlsFactory.createText(parent, SWT.None, BINDING_ID_LASTNAME);
return parent;
}
@Override
protected AbstractWindowController createController() {
return dialogViewController;
}
public String getTextFirstName() {
return txtFirstName.getText();
}
public String getTextLastName() {
return txtLastName.getText();
}
}
private final class AbstractWindowControllerStub extends AbstractWindowController {
private final Person person;
private AbstractWindowControllerStub() {
person = new Person(VALUE_LASTNAME, VALUE_FIRSTNAME);
}
@Override
public void configureRidgets() {
super.configureRidgets();
final ITextRidget txtFirstName = getRidget(BINDING_ID_FIRSTNAME);
txtFirstName.bindToModel(person, "firstname");
txtFirstName.updateFromModel();
final ITextRidget txtLastName = getRidget(BINDING_ID_LASTNAME);
txtLastName.bindToModel(person, "lastname");
txtLastName.updateFromModel();
}
}
}