/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* 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 com.alibaba.citrus.service.form.configuration;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.*;
import java.util.List;
import com.alibaba.citrus.service.form.Validator;
import com.alibaba.citrus.service.form.impl.configuration.FieldConfigImpl;
import com.alibaba.citrus.service.form.impl.configuration.FormConfigImpl;
import com.alibaba.citrus.service.form.impl.configuration.GroupConfigImpl;
import org.junit.Before;
import org.junit.Test;
public class FieldConfigTests extends AbstractConfigTests {
private FormConfigImpl form;
private GroupConfigImpl group;
private FieldConfigImpl field;
private Validator v1;
private Validator v2;
private Validator v3;
private Validator v4;
@Before
public void init() throws Exception {
field = new FieldConfigImpl();
field.setName("field1");
group = new GroupConfigImpl();
group.setName("group1");
group.setFieldConfigImplList(createFieldList(field));
form = new FormConfigImpl();
form.setGroupConfigImplList(createGroupList(group));
v1 = createMock(Validator.class);
v2 = createMock(Validator.class);
v3 = createMock(Validator.class);
v4 = createMock(Validator.class);
}
@Test
public void getGroupConfig() throws Exception {
// no group
assertNull(field.getGroupConfig());
// with group
form.afterPropertiesSet();
assertSame(group, field.getGroupConfig());
}
@Test
public void getName() {
FieldConfigImpl fieldConfig = new FieldConfigImpl();
// no name
assertNull(fieldConfig.getName());
// empty name
fieldConfig.setName("");
assertNull(fieldConfig.getName());
fieldConfig.setName(" ");
assertNull(fieldConfig.getName());
// normal name
fieldConfig.setName(" hello ");
assertEquals("hello", fieldConfig.getName());
}
@Test
public void getKey() throws Exception {
// no key
assertNull(field.getKey());
// empty key
field.setKey("");
assertNull(field.getKey());
field.setKey(" ");
assertNull(field.getKey());
// normal key
field.setKey(" hello ");
assertEquals("hello", field.getKey());
// via form.init
form.afterPropertiesSet();
assertEquals("f", field.getKey());
}
@Test
public void getDisplayName() throws Exception {
FieldConfigImpl fieldConfig = new FieldConfigImpl();
// init null
assertNull(fieldConfig.getDisplayName());
// empty
fieldConfig.setDisplayName(null);
assertNull(fieldConfig.getDisplayName());
fieldConfig.setDisplayName(" ");
assertNull(fieldConfig.getDisplayName());
// same as name by default
fieldConfig.setName("field1");
assertEquals("field1", fieldConfig.getDisplayName());
fieldConfig.setDisplayName(null);
assertEquals("field1", fieldConfig.getDisplayName());
fieldConfig.setDisplayName(" ");
assertEquals("field1", fieldConfig.getDisplayName());
// specific display name
fieldConfig.setDisplayName(" displayName1 ");
assertEquals("displayName1", fieldConfig.getDisplayName());
}
@Test
public void isTrimming() throws Exception {
// default, no group config
assertTrue(field.isTrimming());
// default, with group config
form.afterPropertiesSet();
group.setTrimmingByDefault(false);
assertFalse(field.isTrimming());
group.setTrimmingByDefault(true);
assertTrue(field.isTrimming());
// set value
field.setTrimming(false);
assertFalse(field.isTrimming());
}
@Test
public void getPropertyName() throws Exception {
FieldConfigImpl fieldConfig = new FieldConfigImpl();
// default, no name
assertNull(fieldConfig.getPropertyName());
// default, with name
assertEquals("field1", field.getPropertyName());
// empty property name
field.setPropertyName(null);
assertEquals("field1", field.getPropertyName());
field.setPropertyName(" ");
assertEquals("field1", field.getPropertyName());
// specific property name
field.setPropertyName(" property.name ");
assertEquals("property.name", field.getPropertyName());
}
@Test
public void getDefaultValues() {
// default
assertNull(field.getDefaultValue());
// set empty array
field.setDefaultValues(null);
assertNull(field.getDefaultValue());
assertArrayEquals(new String[0], field.getDefaultValues());
field.setDefaultValues(new String[0]);
assertNull(field.getDefaultValue());
assertArrayEquals(new String[0], field.getDefaultValues());
// set array
field.setDefaultValues(new String[] { "aaa", "bbb", "ccc" });
assertEquals("aaa", field.getDefaultValue());
assertArrayEquals(new String[] { "aaa", "bbb", "ccc" }, field.getDefaultValues());
}
@Test
public void getValidators() {
// default
assertArrayEquals(new Object[0], field.getValidators().toArray());
// set validators
field.setValidators(createValidatorList(v1, v2, v3));
assertArrayEquals(new Object[] { v1, v2, v3 }, field.getValidators().toArray());
// unmodifiable
try {
field.getValidators().clear();
fail();
} catch (UnsupportedOperationException e) {
}
}
@Test
public void merge() throws Exception {
FieldConfigImpl src = new FieldConfigImpl();
FieldConfigImpl copy;
src.setName("name1");
// groupConfig
copy = mergeField(null, src);
assertEquals("groupCopy", copy.getGroupConfig().getName());
// name
assertEquals("name1", mergeField(null, src).getName());
// displayName
src.setDisplayName("displayName1");
assertEquals("displayName1", mergeField(null, src).getDisplayName());
copy = new FieldConfigImpl();
copy.setDisplayName("displayName2");
assertEquals("displayName2", mergeField(copy, src).getDisplayName());
// defaultValues
src.setDefaultValues(new String[] { "aaa", "bbb", "ccc" });
assertArrayEquals(new String[] { "aaa", "bbb", "ccc" }, mergeField(null, src).getDefaultValues());
copy = new FieldConfigImpl();
copy.setDefaultValues(new String[] { "ddd" });
assertArrayEquals(new String[] { "ddd" }, mergeField(copy, src).getDefaultValues());
// trimming
assertEquals(true, mergeField(null, src).isTrimming());
src.setTrimming(false);
assertEquals(false, mergeField(null, src).isTrimming());
copy = new FieldConfigImpl();
copy.setTrimming(true);
assertEquals(true, mergeField(copy, src).isTrimming());
// propertyName
assertEquals("name1", mergeField(null, src).getPropertyName());
src.setPropertyName("propertyName1");
assertEquals("propertyName1", mergeField(null, src).getPropertyName());
copy = new FieldConfigImpl();
copy.setPropertyName("propertyName2");
assertEquals("propertyName2", mergeField(copy, src).getPropertyName());
// validators
assertArrayEquals(new Object[0], mergeField(null, src).getValidators().toArray());
expect(v1.clone()).andReturn(v3).anyTimes();
v1.init(src);
expectLastCall().anyTimes();
replay(v1);
v3.init(isA(FieldConfig.class));
expectLastCall().anyTimes();
replay(v3);
src.setValidators(createValidatorList(v1));
assertArrayEquals(new Object[] { v3 }, mergeField(null, src).getValidators().toArray());
copy = new FieldConfigImpl();
expect(v2.clone()).andReturn(v4).anyTimes();
v2.init(copy);
expectLastCall().once();
replay(v2);
replay(v4);
copy.setValidators(createValidatorList(v2));
assertArrayEquals(new Object[] { v2, v3 }, mergeField(copy, src).getValidators().toArray());
verify(v1, v2, v3, v4);
}
private FieldConfigImpl mergeField(FieldConfigImpl copy, FieldConfigImpl src) throws Exception {
GroupConfigImpl groupCopy = new GroupConfigImpl();
groupCopy.setName("groupCopy");
List<FieldConfigImpl> fields = createFieldList();
if (copy != null) {
copy.setName(src.getName());
fields.add(copy);
}
groupCopy.setFieldConfigImplList(fields);
groupCopy.setParentGroup("groupSrc");
groupCopy.afterPropertiesSet();
GroupConfigImpl groupSrc = new GroupConfigImpl();
groupSrc.setName("groupSrc");
groupSrc.setFieldConfigImplList(createFieldList(src));
groupSrc.afterPropertiesSet();
form = new FormConfigImpl();
form.setGroupConfigImplList(createGroupList(groupCopy, groupSrc));
form.afterPropertiesSet();
FieldConfigImpl copy2 = (FieldConfigImpl) groupCopy.getFieldConfig(src.getName());
if (copy != null) {
assertSame(copy, copy2);
}
return copy2;
}
@Test
public void toString_() throws Exception {
// empty
assertEquals("FieldConfig[group: null, name: field1, validators: 0]", field.toString());
// with group
form.afterPropertiesSet();
assertEquals("FieldConfig[group: group1, name: field1, validators: 0]", field.toString());
// with validators
field.setValidators(createValidatorList(v1, v2, v3));
assertEquals("FieldConfig[group: group1, name: field1, validators: 3]", field.toString());
}
}