/*******************************************************************************
* Copyright (c) 2012 Original authors 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:
* Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.style.editor.command;
import static org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes.CELL_STYLE;
import static org.eclipse.nebula.widgets.nattable.style.DisplayMode.NORMAL;
import static org.eclipse.nebula.widgets.nattable.style.editor.command.DisplayColumnStyleEditorCommandHandler.USER_EDITED_COLUMN_STYLE_LABEL_PREFIX;
import static org.junit.Assert.assertEquals;
import java.util.List;
import java.util.Properties;
import org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes;
import org.eclipse.nebula.widgets.nattable.config.DefaultNatTableStyleConfiguration;
import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry;
import org.eclipse.nebula.widgets.nattable.layer.cell.ColumnOverrideLabelAccumulator;
import org.eclipse.nebula.widgets.nattable.layer.stack.DummyGridLayerStack;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer;
import org.eclipse.nebula.widgets.nattable.style.CellStyleAttributes;
import org.eclipse.nebula.widgets.nattable.style.DisplayMode;
import org.eclipse.nebula.widgets.nattable.style.HorizontalAlignmentEnum;
import org.eclipse.nebula.widgets.nattable.style.Style;
import org.eclipse.nebula.widgets.nattable.style.VerticalAlignmentEnum;
import org.eclipse.nebula.widgets.nattable.style.editor.ColumnStyleEditorDialog;
import org.eclipse.nebula.widgets.nattable.test.fixture.CellStyleFixture;
import org.eclipse.nebula.widgets.nattable.test.fixture.NatTableFixture;
import org.eclipse.nebula.widgets.nattable.test.fixture.PropertiesFixture;
import org.eclipse.nebula.widgets.nattable.test.fixture.layer.DataLayerFixture;
import org.eclipse.swt.widgets.Shell;
import org.junit.Before;
import org.junit.Test;
public class DisplayColumnStyleEditorCommandHandlerTest {
private ColumnOverrideLabelAccumulator labelAccumulatorFixture;
private NatTableFixture natTableFixture;
private DisplayColumnStyleEditorCommand commandFixture;
private DisplayColumnStyleEditorCommandHandler handlerUnderTest;
private IConfigRegistry configRegistryFixture;
@Before
public void setup() {
this.labelAccumulatorFixture = new ColumnOverrideLabelAccumulator(
new DataLayerFixture());
this.natTableFixture = new NatTableFixture();
this.configRegistryFixture = this.natTableFixture.getConfigRegistry();
this.commandFixture = new DisplayColumnStyleEditorCommand(this.natTableFixture,
this.natTableFixture.getConfigRegistry(), 1, 1);
final SelectionLayer selectionLayer = ((DummyGridLayerStack) this.natTableFixture
.getLayer()).getBodyLayer().getSelectionLayer();
this.handlerUnderTest = new DisplayColumnStyleEditorCommandHandler(
selectionLayer, this.labelAccumulatorFixture, this.configRegistryFixture);
}
@Test
public void doCommand() throws Exception {
this.handlerUnderTest.dialog = new ColumnStyleEditorDialog(new Shell(),
new CellStyleFixture());
this.handlerUnderTest.applySelectedStyleToColumns(this.commandFixture,
new int[] { 0 });
Style selectedStyle = (Style) this.configRegistryFixture.getConfigAttribute(
CELL_STYLE, NORMAL, this.handlerUnderTest.getConfigLabel(0));
assertEquals(
CellStyleFixture.TEST_BG_COLOR,
selectedStyle
.getAttributeValue(CellStyleAttributes.BACKGROUND_COLOR));
assertEquals(
CellStyleFixture.TEST_FG_COLOR,
selectedStyle
.getAttributeValue(CellStyleAttributes.FOREGROUND_COLOR));
List<String> columnLableOverrides = this.handlerUnderTest.columnLabelAccumulator
.getOverrides(Integer.valueOf(0));
assertEquals(1, columnLableOverrides.size());
assertEquals(USER_EDITED_COLUMN_STYLE_LABEL_PREFIX + "0",
columnLableOverrides.get(0));
}
@Test
public void parseColumnIndexFromKey() throws Exception {
int i = this.handlerUnderTest
.parseColumnIndexFromKey(".BODY.userDefinedColumnStyle.USER_EDITED_STYLE_FOR_INDEX_3.horizontalAlignment");
assertEquals(3, i);
i = this.handlerUnderTest
.parseColumnIndexFromKey(".BODY.userDefinedColumnStyle.USER_EDITED_STYLE_FOR_INDEX_12.horizontalAlignment");
assertEquals(12, i);
}
@Test
public void saveStateForMultipleLabels() throws Exception {
CellStyleFixture style1 = new CellStyleFixture(
HorizontalAlignmentEnum.LEFT);
CellStyleFixture style2 = new CellStyleFixture(
HorizontalAlignmentEnum.RIGHT);
this.handlerUnderTest.stylesToPersist.put("label1", style1);
this.handlerUnderTest.stylesToPersist.put("label2", style2);
PropertiesFixture propertiesFixture = new PropertiesFixture();
this.handlerUnderTest.saveState("prefix", propertiesFixture);
assertEquals(
HorizontalAlignmentEnum.LEFT.name(),
propertiesFixture
.getProperty("prefix.userDefinedColumnStyle.label1.style.horizontalAlignment"));
assertEquals(
HorizontalAlignmentEnum.RIGHT.name(),
propertiesFixture
.getProperty("prefix.userDefinedColumnStyle.label2.style.horizontalAlignment"));
}
@Test
public void shouldRemoveLabelFromPersistenceIfStyleIsCleared()
throws Exception {
this.handlerUnderTest.dialog = new ColumnStyleEditorDialog(new Shell(), null);
this.handlerUnderTest.applySelectedStyleToColumns(this.commandFixture,
new int[] { 0 });
Style selectedStyle = (Style) this.configRegistryFixture.getConfigAttribute(
CELL_STYLE, NORMAL, this.handlerUnderTest.getConfigLabel(0));
DefaultNatTableStyleConfiguration defaultStyle = new DefaultNatTableStyleConfiguration();
assertEquals(
defaultStyle.bgColor,
selectedStyle
.getAttributeValue(CellStyleAttributes.BACKGROUND_COLOR));
assertEquals(
defaultStyle.fgColor,
selectedStyle
.getAttributeValue(CellStyleAttributes.FOREGROUND_COLOR));
Properties properties = new Properties();
this.handlerUnderTest.saveState("prefix", properties);
assertEquals(0, properties.size());
}
@Test
public void loadStateForMultipleLabels() throws Exception {
PropertiesFixture propertiesFixture = new PropertiesFixture()
.addStyleProperties(
"prefix.userDefinedColumnStyle.USER_EDITED_STYLE_FOR_INDEX_0")
.addStyleProperties(
"prefix.userDefinedColumnStyle.USER_EDITED_STYLE_FOR_INDEX_1");
this.handlerUnderTest.loadState("prefix", propertiesFixture);
Style style = (Style) this.configRegistryFixture.getConfigAttribute(
CellConfigAttributes.CELL_STYLE, DisplayMode.NORMAL,
"USER_EDITED_STYLE_FOR_INDEX_0");
assertEquals(
HorizontalAlignmentEnum.LEFT,
style.getAttributeValue(CellStyleAttributes.HORIZONTAL_ALIGNMENT));
style = (Style) this.configRegistryFixture.getConfigAttribute(
CellConfigAttributes.CELL_STYLE, DisplayMode.NORMAL,
"USER_EDITED_STYLE_FOR_INDEX_1");
assertEquals(VerticalAlignmentEnum.TOP,
style.getAttributeValue(CellStyleAttributes.VERTICAL_ALIGNMENT));
}
@Test
public void loadStateForMultipleMixedLabels() throws Exception {
PropertiesFixture propertiesFixture = new PropertiesFixture()
.addStyleProperties(
"prefix.userDefinedColumnStyle.USER_EDITED_STYLE_FOR_INDEX_0")
.addStyleProperties(
"prefix.userDefinedColumnStyle.USER_EDITED_STYLE_FOR_INDEX_1")
.addStyleProperties(
"prefix.userDefinedColumnStyle.USER_EDITED_STYLE");
this.handlerUnderTest.loadState("prefix", propertiesFixture);
Style style = (Style) this.configRegistryFixture.getConfigAttribute(
CellConfigAttributes.CELL_STYLE, DisplayMode.NORMAL,
"USER_EDITED_STYLE_FOR_INDEX_0");
assertEquals(
HorizontalAlignmentEnum.LEFT,
style.getAttributeValue(CellStyleAttributes.HORIZONTAL_ALIGNMENT));
style = (Style) this.configRegistryFixture.getConfigAttribute(
CellConfigAttributes.CELL_STYLE, DisplayMode.NORMAL,
"USER_EDITED_STYLE_FOR_INDEX_1");
assertEquals(VerticalAlignmentEnum.TOP,
style.getAttributeValue(CellStyleAttributes.VERTICAL_ALIGNMENT));
style = (Style) this.configRegistryFixture.getConfigAttribute(
CellConfigAttributes.CELL_STYLE, DisplayMode.NORMAL,
"USER_EDITED_STYLE");
assertEquals(VerticalAlignmentEnum.TOP,
style.getAttributeValue(CellStyleAttributes.VERTICAL_ALIGNMENT));
}
}