/*******************************************************************************
* Copyright (c) 2014 Stefan Winkler 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:
* Stefan Winkler - initial API and implementation (bug 242231)
*******************************************************************************/
package org.eclipse.jface.tests.viewers;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
/**
* This testcase for Bug 242231 checks that applyEditorValue(), which has been
* made into a public method, works as advertised, namely that it closes an open
* cell editor and sets its value to the model.
*
* @since 3.5
*/
public class Bug242231Test extends ViewerTestCase {
/**
* @param name
*/
public Bug242231Test(String name) {
super(name);
}
protected static final String[] COMBO_ITEMS = new String[] { "default value", "some value", "value changed"};
private TableViewer tableViewer;
@Override
protected StructuredViewer createViewer(Composite parent) {
tableViewer = new TableViewer(parent, SWT.NONE);
tableViewer.setContentProvider(new TestModelContentProvider());
TableViewerColumn tableColumn = new TableViewerColumn(tableViewer,
SWT.NONE);
tableColumn.setEditingSupport(getEditingSupport());
tableColumn.setLabelProvider(new ColumnLabelProvider());
return tableViewer;
}
/**
* @return editing support for the test
*/
private EditingSupport getEditingSupport() {
return new EditingSupport(tableViewer) {
@Override
protected void setValue(Object element, Object value) {
((TestElement)element).setLabel("value set");
}
@Override
protected Object getValue(Object element) {
return 0;
}
@Override
protected CellEditor getCellEditor(Object element) {
return new ComboBoxCellEditor(tableViewer.getControl().getParent(), COMBO_ITEMS);
}
@Override
protected boolean canEdit(Object element) {
return true;
}
};
}
public void testBug242231()
{
// get a test element from the model and set the label to a known value
TestElement testElement = fRootElement.getChildAt(0);
testElement.setLabel("default value");
// open the cell editor
tableViewer.editElement(testElement, 0);
// apply the editor value
tableViewer.applyEditorValue();
// check that the new value has been set to the model
assertEquals("value set", testElement.getLabel());
}
}