/*
* Copyright 2015 JBoss, by Red Hat, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.uberfire.ext.properties.editor.server;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.uberfire.ext.properties.editor.model.PropertyEditorCategory;
import org.uberfire.ext.properties.editor.model.PropertyEditorFieldInfo;
import org.uberfire.ext.properties.editor.model.PropertyEditorType;
import org.uberfire.ext.properties.editor.server.beans.ComplexPlanBean;
import org.uberfire.ext.properties.editor.server.beans.SampleEnum;
import org.uberfire.ext.properties.editor.server.beans.SamplePlanBean;
import org.uberfire.ext.properties.editor.server.beans.UnknownTypesBean;
import static org.junit.Assert.*;
public class BeanPropertyEditorBuilderTest {
@Test
public void samplePlanBean_shouldGenerateCategory() throws ClassNotFoundException {
BeanPropertyEditorBuilder builder = new BeanPropertyEditorBuilder();
PropertyEditorCategory category = builder.extract("org.uberfire.ext.properties.editor.server.beans.SamplePlanBean");
assertTrue(!category.getFields().isEmpty());
assertProperty(category.getFields().get(0),
"text1",
PropertyEditorType.TEXT);
assertProperty(category.getFields().get(1),
"text2",
PropertyEditorType.TEXT);
}
@Test(expected = BeanPropertyEditorBuilder.NullBeanException.class)
public void noBean_shouldGenerateException() {
BeanPropertyEditorBuilder builder = new BeanPropertyEditorBuilder();
PropertyEditorCategory category = builder.extract(null);
}
@Test
public void samplePlanBeanAndInstance_shouldGenerateCategoryAndValues() throws ClassNotFoundException {
BeanPropertyEditorBuilder builder = new BeanPropertyEditorBuilder();
PropertyEditorCategory category = builder.extract("org.uberfire.ext.properties.editor.server.beans.SamplePlanBean",
new SamplePlanBean("value1",
"value2"));
assertTrue(!category.getFields().isEmpty());
PropertyEditorFieldInfo field1 = category.getFields().get(0);
PropertyEditorFieldInfo fiedl2 = category.getFields().get(1);
assertProperty(field1,
"text1",
PropertyEditorType.TEXT,
"value1");
assertProperty(fiedl2,
"text2",
PropertyEditorType.TEXT,
"value2");
}
@Test
public void complexPlanBean_shouldGenerateCategory() throws ClassNotFoundException {
BeanPropertyEditorBuilder builder = new BeanPropertyEditorBuilder();
PropertyEditorCategory category = builder.extract("org.uberfire.ext.properties.editor.server.beans.ComplexPlanBean");
assertTrue(!category.getFields().isEmpty());
PropertyEditorFieldInfo text = category.getFields().get(0);
PropertyEditorFieldInfo bool = category.getFields().get(1);
PropertyEditorFieldInfo bool2 = category.getFields().get(2);
PropertyEditorFieldInfo integer = category.getFields().get(3);
PropertyEditorFieldInfo inti = category.getFields().get(4);
PropertyEditorFieldInfo lon = category.getFields().get(5);
PropertyEditorFieldInfo plong = category.getFields().get(6);
PropertyEditorFieldInfo enumSample = category.getFields().get(7);
List<String> enumValues = new ArrayList<String>();
enumValues.add(SampleEnum.VALUE1.toString());
enumValues.add(SampleEnum.VALUE2.toString());
enumValues.add(SampleEnum.VALUE3.toString());
assertProperty(text,
"text",
PropertyEditorType.TEXT);
assertProperty(bool,
"bool",
PropertyEditorType.BOOLEAN);
assertProperty(bool2,
"bool2",
PropertyEditorType.BOOLEAN);
assertProperty(integer,
"integ",
PropertyEditorType.NATURAL_NUMBER);
assertProperty(inti,
"inti",
PropertyEditorType.NATURAL_NUMBER);
assertProperty(lon,
"lon",
PropertyEditorType.NATURAL_NUMBER);
assertProperty(plong,
"plong",
PropertyEditorType.NATURAL_NUMBER);
assertProperty(enumSample,
"enumSample",
PropertyEditorType.COMBO);
assertEnumValues(enumSample,
enumValues);
}
@Test
public void complexPlanBean_shouldGenerateCategoryAndValues() throws ClassNotFoundException {
BeanPropertyEditorBuilder builder = new BeanPropertyEditorBuilder();
ComplexPlanBean instance = new ComplexPlanBean("texto",
true,
true,
1,
1,
1l,
1,
SampleEnum.VALUE2);
PropertyEditorCategory category = builder.extract("org.uberfire.ext.properties.editor.server.beans.ComplexPlanBean",
instance);
assertTrue(!category.getFields().isEmpty());
PropertyEditorFieldInfo text = category.getFields().get(0);
PropertyEditorFieldInfo bool = category.getFields().get(1);
PropertyEditorFieldInfo bool2 = category.getFields().get(2);
PropertyEditorFieldInfo integer = category.getFields().get(3);
PropertyEditorFieldInfo inti = category.getFields().get(4);
PropertyEditorFieldInfo lon = category.getFields().get(5);
PropertyEditorFieldInfo plong = category.getFields().get(6);
PropertyEditorFieldInfo enumSample = category.getFields().get(7);
List<String> enumValues = new ArrayList<String>();
enumValues.add(SampleEnum.VALUE1.toString());
enumValues.add(SampleEnum.VALUE2.toString());
enumValues.add(SampleEnum.VALUE3.toString());
assertProperty(text,
"text",
PropertyEditorType.TEXT,
"texto");
assertProperty(bool,
"bool",
PropertyEditorType.BOOLEAN,
"true");
assertProperty(bool2,
"bool2",
PropertyEditorType.BOOLEAN,
"true");
assertProperty(integer,
"integ",
PropertyEditorType.NATURAL_NUMBER,
"1");
assertProperty(inti,
"inti",
PropertyEditorType.NATURAL_NUMBER,
"1");
assertProperty(lon,
"lon",
PropertyEditorType.NATURAL_NUMBER,
"1");
assertProperty(plong,
"plong",
PropertyEditorType.NATURAL_NUMBER,
"1");
assertProperty(enumSample,
"enumSample",
PropertyEditorType.COMBO,
"VALUE2");
assertEnumValues(enumSample,
enumValues);
}
@Test
public void shouldNotGenerateUnhandledTypes() throws ClassNotFoundException {
BeanPropertyEditorBuilder builder = new BeanPropertyEditorBuilder();
PropertyEditorCategory category = builder.extract("org.uberfire.ext.properties.editor.server.beans.UnknownTypesBean",
new UnknownTypesBean());
assertTrue(category.getFields().isEmpty());
category = builder.extract("org.uberfire.ext.properties.editor.server.beans.UnknownTypesBean");
assertTrue(category.getFields().isEmpty());
}
private void assertEnumValues(PropertyEditorFieldInfo enumSample,
List<String> enumValues) {
assertEquals(enumValues.size(),
enumSample.getComboValues().size());
for (int i = 0; i < enumValues.size(); i++) {
assertEquals(enumSample.getComboValues().get(i),
enumValues.get(i));
}
}
@Test
public void nullValuesOnInstanceShouldGenerateEmptyStrings() throws ClassNotFoundException {
BeanPropertyEditorBuilder builder = new BeanPropertyEditorBuilder();
PropertyEditorCategory category = builder.extract("org.uberfire.ext.properties.editor.server.beans.SamplePlanBean",
new SamplePlanBean(null,
null));
assertTrue(!category.getFields().isEmpty());
PropertyEditorFieldInfo field1 = category.getFields().get(0);
PropertyEditorFieldInfo fiedl2 = category.getFields().get(1);
assertProperty(field1,
"text1",
PropertyEditorType.TEXT,
"");
assertProperty(fiedl2,
"text2",
PropertyEditorType.TEXT,
"");
}
private void assertProperty(PropertyEditorFieldInfo fieldInfo,
String label,
PropertyEditorType type,
String expectedValue) {
assertProperty(fieldInfo,
label,
type);
assertEquals(expectedValue,
fieldInfo.getCurrentStringValue());
}
private void assertProperty(PropertyEditorFieldInfo fieldInfo,
String label,
PropertyEditorType type) {
assertEquals(label,
fieldInfo.getLabel());
assertEquals(type,
fieldInfo.getType());
}
}