/******************************************************************************* * Copyright (c) 2012, 2017 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.data; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; public class ReflectiveColumnAccessorTest { private ReflectiveColumnPropertyAccessor<TestBean> accessor; @Before public void setup() { this.accessor = new ReflectiveColumnPropertyAccessor<>( new String[] { "stringField", "booleanField", "floatField" }); } @Test public void testGetterInvocations() throws Exception { TestBean testBean = new TestBean("One", true, 100.00F); assertEquals("One", this.accessor.getDataValue(testBean, 0)); assertEquals(Boolean.TRUE, this.accessor.getDataValue(testBean, 1)); assertEquals(Float.valueOf(100.00f), this.accessor.getDataValue(testBean, 2)); } @Test public void testSetterInvocations() throws Exception { TestBean testBean = new TestBean("One", true, 100.00F); this.accessor.setDataValue(testBean, 0, "Two"); this.accessor.setDataValue(testBean, 1, false); this.accessor.setDataValue(testBean, 2, 42f); assertEquals("Two", this.accessor.getDataValue(testBean, 0)); assertEquals(Boolean.FALSE, this.accessor.getDataValue(testBean, 1)); assertEquals(Float.valueOf(42f), this.accessor.getDataValue(testBean, 2)); } @Test public void testSubclassGetterAccess() { SubBean1 sub1 = new SubBean1("Two", true, 42f, "Bart"); SubBean2 sub2 = new SubBean2("Three", false, 23f, "Lisa"); assertEquals("Two", this.accessor.getDataValue(sub1, 0)); assertEquals(Boolean.TRUE, this.accessor.getDataValue(sub1, 1)); assertEquals(Float.valueOf(42f), this.accessor.getDataValue(sub1, 2)); assertEquals("Three", this.accessor.getDataValue(sub2, 0)); assertEquals(Boolean.FALSE, this.accessor.getDataValue(sub2, 1)); assertEquals(Float.valueOf(23f), this.accessor.getDataValue(sub2, 2)); } @Test public void testInterfaceGetterAccess() { ReflectiveColumnPropertyAccessor<Bean> accessor = new ReflectiveColumnPropertyAccessor<>( new String[] { "stringField", "booleanField", "floatField", "additionalField" }); SubBean1 sub1 = new SubBean1("Two", true, 42f, "Bart"); SubBean2 sub2 = new SubBean2("Three", false, 23f, "Lisa"); assertEquals("Bart", accessor.getDataValue(sub1, 3)); assertEquals("Lisa", accessor.getDataValue(sub2, 3)); } @Test public void testSubclassSetterAccess() { SubBean1 sub1 = new SubBean1("Two", true, 42f, "Bart"); SubBean2 sub2 = new SubBean2("Three", false, 23f, "Lisa"); this.accessor.setDataValue(sub1, 0, "Simpson"); this.accessor.setDataValue(sub1, 1, false); this.accessor.setDataValue(sub1, 2, 100f); this.accessor.setDataValue(sub2, 0, "Flanders"); this.accessor.setDataValue(sub2, 1, true); this.accessor.setDataValue(sub2, 2, 200f); assertEquals("Simpson", this.accessor.getDataValue(sub1, 0)); assertEquals(Boolean.FALSE, this.accessor.getDataValue(sub1, 1)); assertEquals(Float.valueOf(100f), this.accessor.getDataValue(sub1, 2)); assertEquals("Flanders", this.accessor.getDataValue(sub2, 0)); assertEquals(Boolean.TRUE, this.accessor.getDataValue(sub2, 1)); assertEquals(Float.valueOf(200f), this.accessor.getDataValue(sub2, 2)); } @Test public void testInterfaceSetterAccess() { ReflectiveColumnPropertyAccessor<Bean> accessor = new ReflectiveColumnPropertyAccessor<>( new String[] { "stringField", "booleanField", "floatField", "additionalField" }); SubBean1 sub1 = new SubBean1("Two", true, 42f, "Bart"); SubBean2 sub2 = new SubBean2("Three", false, 23f, "Lisa"); accessor.setDataValue(sub1, 3, "Homer"); accessor.setDataValue(sub2, 3, "Marge"); assertEquals("Homer", accessor.getDataValue(sub1, 3)); assertEquals("Marge", accessor.getDataValue(sub2, 3)); } class TestBean { private String stringField; private boolean booleanField; private float floatField; public TestBean(String stringField, boolean booleanField, float floatField) { this.stringField = stringField; this.booleanField = booleanField; this.floatField = floatField; } public String getStringField() { return this.stringField; } public void setStringField(String stringField) { this.stringField = stringField; } public boolean isBooleanField() { return this.booleanField; } public void setBooleanField(boolean booleanField) { this.booleanField = booleanField; } public float getFloatField() { return this.floatField; } public void setFloatField(float floatField) { this.floatField = floatField; } } interface Bean { String getAdditionalField(); void setAdditionalField(String value); } class SubBean1 extends TestBean implements Bean { private String additionalField; public SubBean1(String stringField, boolean booleanField, float floatField, String additional) { super(stringField, booleanField, floatField); this.additionalField = additional; } @Override public String getAdditionalField() { return this.additionalField; } @Override public void setAdditionalField(String value) { this.additionalField = value; } } class SubBean2 extends TestBean implements Bean { private String additionalField; public SubBean2(String stringField, boolean booleanField, float floatField, String additional) { super(stringField, booleanField, floatField); this.additionalField = additional; } @Override public String getAdditionalField() { return this.additionalField; } @Override public void setAdditionalField(String value) { this.additionalField = value; } } }