blob: 698e6624bfd43028dc206b7cfe69a6c303d78f36 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2006 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jface.tests.databinding.scenarios;
import org.eclipse.jface.examples.databinding.model.Account;
import org.eclipse.jface.examples.databinding.model.Catalog;
import org.eclipse.jface.examples.databinding.model.Category;
import org.eclipse.jface.examples.databinding.model.SampleData;
import org.eclipse.jface.internal.databinding.provisional.description.Property;
import org.eclipse.jface.internal.databinding.provisional.description.TableModelDescription;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.TableColumn;
/**
* To run the tests in this class, right-click and select "Run As JUnit Plug-in
* Test". This will also start an Eclipse instance. To clean up the launch
* configuration, open up its "Main" tab and select "[No Application] - Headless
* Mode" as the application to run.
*/
public class TableScenarios extends ScenariosTestCase {
private TableViewer tableViewer;
private Catalog catalog;
private Category category;
private TableColumn firstNameColumn;
private TableColumn lastNameColumn;
private TableColumn stateColumn;
private Image[] images;
private TableColumn fancyColumn;
protected void setUp() throws Exception {
super.setUp();
getComposite().setLayout(new FillLayout());
tableViewer = new TableViewer(getComposite());
tableViewer.getTable().setLinesVisible(true);
tableViewer.getTable().setHeaderVisible(true);
firstNameColumn = new TableColumn(tableViewer.getTable(), SWT.NONE);
firstNameColumn.setWidth(50);
lastNameColumn = new TableColumn(tableViewer.getTable(), SWT.NONE);
lastNameColumn.setWidth(50);
stateColumn = new TableColumn(tableViewer.getTable(), SWT.NONE);
stateColumn.setWidth(50);
fancyColumn = new TableColumn(tableViewer.getTable(), SWT.NONE);
fancyColumn.setWidth(250);
catalog = SampleData.CATALOG_2005; // Lodging source
category = SampleData.WINTER_CATEGORY;
images = new Image[] {
getShell().getDisplay().getSystemImage(SWT.ICON_ERROR),
getShell().getDisplay().getSystemImage(SWT.ICON_WARNING),
getShell().getDisplay().getSystemImage(SWT.ICON_INFORMATION), };
}
protected void tearDown() throws Exception {
// do any teardown work here
super.tearDown();
tableViewer.getTable().dispose();
tableViewer = null;
firstNameColumn = null;
lastNameColumn = null;
stateColumn = null;
}
private String getValue(String text) {
if (text==null)
return "";
return text;
}
public void testScenario01() {
// Show that a TableViewer with three columns renders the accounts
Account[] accounts = catalog.getAccounts();
TableModelDescription tableModelDescription = new TableModelDescription(new Property(catalog, "accounts"),new String[]{"firstName","lastName","state"});
getDbc().bind(tableViewer,
tableModelDescription, null);
// Verify the data in the table columns matches the accounts
for (int i = 0; i < accounts.length; i++) {
Account account = catalog.getAccounts()[i];
String col_0 = ((ITableLabelProvider) tableViewer
.getLabelProvider()).getColumnText(account, 0);
assertEquals(getValue(account.getFirstName()), col_0);
String col_1 = ((ITableLabelProvider) tableViewer
.getLabelProvider()).getColumnText(account, 1);
assertEquals(getValue(account.getLastName()), col_1);
String col_2 = ((ITableLabelProvider) tableViewer
.getLabelProvider()).getColumnText(account, 2);
assertEquals(getValue(account.getState()), col_2);
}
}
public void testScenario02() throws SecurityException, IllegalArgumentException {
// Show that a TableViewer with three columns can be used to update
// columns
// Account[] accounts = catalog.getAccounts();
//
// TableModelDescription tableModelDescription = new TableModelDescription(new Property(catalog, "accounts"), new String[]{"firstName","lastName","state"});
//// tableViewerDescription.addEditableColumn("firstName");
//// tableViewerDescription.addEditableColumn("lastName", null, null, new PhoneConverter());
//// tableViewerDescription.addEditableColumn("state", null, null, new StateConverter());
// getDbc().bind(tableViewer,
// tableModelDescription, null);
//
// Account account = accounts[0];
// // Select the first item in the table
// tableViewer.editElement(account, 0);
// // Set the text property of the cell editor which is now active over the "firstName" column
// CellEditor[] cellEditors = tableViewer.getCellEditors();
// TextCellEditor firstNameEditor = (TextCellEditor) cellEditors[0];
// // Change the firstName and test it goes to the model
// enterText((Text) firstNameEditor.getControl(), "Bill");
// // Check whether the model has changed
// assertEquals("Bill",account.getFirstName());
}
public void testScenario04() {
// // Show that when an item is added to a collection the table gets an extra item
// Account[] accounts = catalog.getAccounts();
//
// TableViewerDescription tableViewerDescription = new TableViewerDescription(
// tableViewer);
// tableViewerDescription.addColumn("firstName");
// tableViewerDescription.addColumn("lastName");
// tableViewerDescription.addColumn("state");
// tableViewerDescription.addColumn(null,new IConverter(){
//
// public Class getModelType() {
// return Account.class;
// }
//
// public Class getTargetType() {
// return ViewerLabel.class;
// }
//
// public Object convertTargetToModel(Object targetObject) {
// return null;
// }
//
// public Object convertModelToTarget(Object modelObject) {
// Account account = (Account) modelObject;
// return new ViewerLabel(account.toString(), images[new Random().nextInt(images.length)]);
// }});
// getDbc().bind(tableViewerDescription,
// new Property(catalog, "accounts"), null);
//
// //interact();
//
// // Verify the number of accounts matches the number of items in the table
// assertEquals(tableViewer.getTable().getItemCount(),accounts.length);
// // Add a new account and verify that the number of items in the table increases
// Account newAccount = new Account();
// newAccount.setFirstName("Finbar");
// newAccount.setLastName("McGoo");
// newAccount.setLastName("NC");
// catalog.addAccount(newAccount);
// // The number of items should have gone up by one
// assertEquals(tableViewer.getTable().getItemCount(),accounts.length + 1);
// // The number of items should still match the number of accounts (i.e. test the model)
// assertEquals(tableViewer.getTable().getItemCount(),catalog.getAccounts().length);
// // Remove the account that was just added
// catalog.removeAccount(newAccount);
// // The number of items should match the original
// assertEquals(tableViewer.getTable().getItemCount(),accounts.length);
// // The number of items should still match the number of accounts (i.e. test the model is reset)
// assertEquals(tableViewer.getTable().getItemCount(),catalog.getAccounts().length);
//
// // Test adding and removing to the model on a non UI thread
// int numberOfAccounts = catalog.getAccounts().length;
// final Account barney = new Account();
// barney.setFirstName("Barney");
// barney.setLastName("Smith");
// barney.setLastName("CA");
// invokeNonUI(new Runnable(){
// public void run(){
// catalog.addAccount(barney);
// }
// });
// spinEventLoop(0);
// // The number of items should have gone up by one
// assertEquals(tableViewer.getTable().getItemCount(),numberOfAccounts + 1);
//
// invokeNonUI(new Runnable(){
// public void run(){
// catalog.removeAccount(barney);
// }
// });
// spinEventLoop(0);
// // The number of items should have reverted to the original number before barney was added and removed
// assertEquals(tableViewer.getTable().getItemCount(),numberOfAccounts);
//
}
public void testScenario03() {
// // Show that converters work for table columns
// Account[] accounts = catalog.getAccounts();
//
// TableViewerDescription tableViewerDescription = new TableViewerDescription(
// tableViewer);
// tableViewerDescription.addEditableColumn("lastName");
// tableViewerDescription.addEditableColumn("phone", null, null ,
// new PhoneConverter());
// tableViewerDescription.addEditableColumn("state", null, null ,
// new StateConverter());
// getDbc().bind(tableViewerDescription,
// new Property(catalog, "accounts"), null);
//
// // Verify that the data in the the table columns matches the expected
// // What we are looking for is that the phone numbers are converterted to
// // nnn-nnn-nnnn and that
// // the state letters are converted to state names
// // Verify the data in the table columns matches the accounts
// PhoneConverter phoneConverter = new PhoneConverter();
// StateConverter stateConverter = new StateConverter();
// for (int i = 0; i < accounts.length; i++) {
// Account account = catalog.getAccounts()[i];
// // Check the phone number
// String col_phone = ((ITableLabelProvider) tableViewer
// .getLabelProvider()).getColumnText(account, 1);
// assertEquals(getValue((String)phoneConverter
// .convertModelToTarget(account.getPhone())), col_phone);
// String col_state = ((ITableLabelProvider) tableViewer
// .getLabelProvider()).getColumnText(account, 2);
// assertEquals(getValue((String)stateConverter
// .convertModelToTarget(account.getState())), col_state);
// }
}
public void testScenario05() {
// // Show that when the model changes then the UI refreshes to reflect this
//
// TableViewerDescription tableViewerDescription = new TableViewerDescription(
// tableViewer);
// tableViewerDescription.addColumn("lastName");
// tableViewerDescription.addColumn("phone",
// new PhoneConverter());
// tableViewerDescription.addColumn("state",
// new StateConverter());
// getDbc().bind(tableViewerDescription,
// new Property(catalog, "accounts"), null);
//
// final Account account = catalog.getAccounts()[0];
// String lastName = tableViewer.getTable().getItem(0).getText(0);
// // Check the firstName in the TableItem is the same as the model
// assertEquals(lastName,account.getLastName());
// // Now change the model and check again
// account.setLastName("Gershwin");
// lastName = tableViewer.getTable().getItem(0).getText(0);
// assertEquals(lastName,account.getLastName());
//
// // Test the model update on a non UI thread
// invokeNonUI(new Runnable(){
// public void run(){
// account.setLastName("Mozart");
// }
// });
// spinEventLoop(0);
// lastName = tableViewer.getTable().getItem(0).getText(0);
// assertEquals(lastName,account.getLastName());
//
}
public void testScenario06(){
// // Check that explicit type means that defaulting of converters works
// TableViewerDescription tableViewerDescription = new TableViewerDescription(
// tableViewer);
// tableViewerDescription.addEditableColumn("price");
// tableViewerDescription.getColumn(0).setPropertyType(Double.TYPE);
// getDbc().bind(tableViewerDescription,
// new Property(catalog, "transporations"), null);
// Transportation transporation = catalog.getTransporations()[0];
// tableViewer.editElement(transporation, 0);
// // Set the text property of the cell editor which is now active over the "firstName" column
// CellEditor[] cellEditors = tableViewer.getCellEditors();
// TextCellEditor priceEditor = (TextCellEditor) cellEditors[0];
// // Change the firstName and test it goes to the model
// enterText((Text) priceEditor.getControl(), "123.45");
// // Verify the model is updated
// assertEquals(transporation.getPrice(),123.45,0);
}
public void testScenario07(){
// // Verify that even when a column's property type is not set, that it is worked out lazily from the target type
// TableViewerDescription tableViewerDescription = new TableViewerDescription(
// tableViewer);
// tableViewerDescription.addEditableColumn("price");
// // The column's type is not set to be Double.TYPE. This will be inferred once the first Transportation object is set
// // into the ObservableCollection
// getDbc().bind(tableViewerDescription,
// new Property(catalog, "transporations"), null);
// Transportation transporation = catalog.getTransporations()[0];
// tableViewer.editElement(transporation, 0);
// // Set the text property of the cell editor which is now active over the "firstName" column
// CellEditor[] cellEditors = tableViewer.getCellEditors();
// TextCellEditor priceEditor = (TextCellEditor) cellEditors[0];
// // Change the firstName and test it goes to the model
// enterText((Text) priceEditor.getControl(), "123.45");
// // Verify the model is updated
// assertEquals(transporation.getPrice(),123.45,0);
//
}
public void testScenario08_00(){
// // Verify that binding to a Collection property (rather than an array) works when specifying data type
// TableViewerDescription tableViewerDescription = new TableViewerDescription(
// tableViewer);
// tableViewerDescription.addEditableColumn("userId");
// tableViewerDescription.addEditableColumn("password");
// getDbc().bind(tableViewerDescription,
// new Property(catalog, "signons", Signon.class, null), null);
// Signon firstSignon = (Signon) catalog.getSignons().get(0);
// // Verify the UI matches the model
// TableItem firstTableItem = tableViewer.getTable().getItem(0);
// assertEquals(firstTableItem.getText(1),firstSignon.getPassword());
// // Change the model and ensure the UI refreshes
// firstSignon.setPassword("Eclipse123Rocks");
// assertEquals("Eclipse123Rocks",firstSignon.getPassword());
// assertEquals(firstTableItem.getText(1),firstSignon.getPassword());
// // Change the GUI and ensure the model refreshes
// tableViewer.editElement(firstSignon, 1);
// CellEditor[] cellEditors = tableViewer.getCellEditors();
// TextCellEditor passwordEditor = (TextCellEditor) cellEditors[1];
// enterText((Text) passwordEditor.getControl(), "Cricket11Players");
// assertEquals("Cricket11Players",firstSignon.getPassword());
//
}
public void testScenario08_01(){
// // Verify that binding to a Collection property (rather than an array) works without specifying data type
// TableViewerDescription tableViewerDescription = new TableViewerDescription(
// tableViewer);
// tableViewerDescription.addEditableColumn("userId");
// tableViewerDescription.addEditableColumn("password");
// getDbc().bind(tableViewerDescription,
// new Property(catalog, "signons"), null);
// Signon firstSignon = (Signon) catalog.getSignons().get(0);
// // Verify the UI matches the model
// TableItem firstTableItem = tableViewer.getTable().getItem(0);
// assertEquals(firstTableItem.getText(1),firstSignon.getPassword());
// // Change the model and ensure the UI refreshes
// firstSignon.setPassword("Eclipse123Rocks");
// assertEquals("Eclipse123Rocks",firstSignon.getPassword());
// assertEquals(firstTableItem.getText(1),firstSignon.getPassword());
// // Change the GUI and ensure the model refreshes
// tableViewer.editElement(firstSignon, 1);
// CellEditor[] cellEditors = tableViewer.getCellEditors();
// TextCellEditor passwordEditor = (TextCellEditor) cellEditors[1];
// enterText((Text) passwordEditor.getControl(), "Cricket11Players");
// assertEquals("Cricket11Players",firstSignon.getPassword());
//
}
public void testScenario09(){
// // Verify that nested properties work. Catalog has adventures. Adventure has defaultLodging. Loding has name.
// TableViewerDescription tableViewerDescription = new TableViewerDescription(tableViewer);
// tableViewerDescription.addColumn("name");
// tableViewerDescription.addColumn("defaultLodging.name");
// getDbc().bind(tableViewerDescription,new Property(category, "adventures"),null);
//
}
/**
public void testScenario10(){
// Verify that for TIME_EARLY updating occurs on a per key basic for a TextCellEditor
// Show that converters work for table columns
Account[] accounts = catalog.getAccounts();
Account firstAccount = accounts[0];
SampleData.getSWTObservableFactory().setUpdateTime(DataBindingContext.TIME_EARLY);
TableViewerDescription tableViewerDescription = new TableViewerDescription(tableViewer);
tableViewerDescription.addEditableColumn("lastName");
tableViewerDescription.addColumn("lastName");
getDbc().bind(tableViewerDescription,new Property(catalog, "accounts"), null);
// Verify that the first account is shown in the first row with the last name correctly
assertEquals(tableViewer.getTable().getItem(0).getData(),firstAccount);
assertEquals(tableViewer.getTable().getItem(0).getText(0),firstAccount.getLastName());
assertEquals(tableViewer.getTable().getItem(0).getText(1),firstAccount.getLastName());
// Create a cell editor over the first column
tableViewer.editElement(firstAccount, 0);
// Set the text property of the cell editor which is now active over the "firstName" column
CellEditor[] cellEditors = tableViewer.getCellEditors();
TextCellEditor lastNameCellEditor = (TextCellEditor) cellEditors[0];
((Text)lastNameCellEditor.getControl()).setText("E");
// Verify that the key press goes to the model
assertEquals(firstAccount.getLastName(),"E");
}
**/
}