/* * 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 com.alibaba.citrus.test.TestUtil.*; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import com.alibaba.citrus.service.form.configuration.GroupConfig.Import; 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 com.alibaba.citrus.service.form.impl.configuration.GroupConfigImpl.ImportImpl; import org.junit.Before; import org.junit.Test; public class GroupConfigTests extends AbstractConfigTests { private FormConfigImpl formConfig; private GroupConfigImpl group; private GroupConfigImpl group1; private GroupConfigImpl group2; private GroupConfigImpl group3; private GroupConfigImpl group4; private FieldConfigImpl field1; private FieldConfigImpl field2; private FieldConfigImpl field3; private FieldConfigImpl field4; @Before public void init() throws Exception { formConfig = new FormConfigImpl(); field1 = new FieldConfigImpl(); field1.setName("fiELd1"); field2 = new FieldConfigImpl(); field2.setName("field2"); field3 = new FieldConfigImpl(); field3.setName("FIELD3"); field4 = new FieldConfigImpl(); field4.setName("field4"); group = new GroupConfigImpl(); group.setName("group1"); group1 = new GroupConfigImpl(); group1.setName("group1"); group1.setFieldConfigImplList(createFieldList(field1)); group2 = new GroupConfigImpl(); group2.setName("group2"); group2.setFieldConfigImplList(createFieldList(field2)); group3 = new GroupConfigImpl(); group3.setName("group3"); group3.setFieldConfigImplList(createFieldList(field3)); group4 = new GroupConfigImpl(); group4.setName("group4"); group4.setFieldConfigImplList(createFieldList(field4)); } private void initForm(List<FieldConfigImpl> fieldList) throws Exception { group.setFieldConfigImplList(fieldList); group.afterPropertiesSet(); formConfig.setGroupConfigImplList(createGroupList(group)); formConfig.afterPropertiesSet(); } @Test public void getFormConfig() throws Exception { // no form assertNull(group.getFormConfig()); // with form initForm(createFieldList(field1)); assertSame(formConfig, group.getFormConfig()); } @Test public void getName() { GroupConfigImpl groupConfig = new GroupConfigImpl(); // no name assertNull(groupConfig.getName()); // empty name groupConfig.setName(""); assertNull(groupConfig.getName()); groupConfig.setName(" "); assertNull(groupConfig.getName()); // normal name groupConfig.setName(" hello "); assertEquals("hello", groupConfig.getName()); } @Test public void getKey() throws Exception { // no key assertNull(group.getKey()); // empty key group.setKey(""); assertNull(group.getKey()); group.setKey(" "); assertNull(group.getKey()); // normal key group.setKey(" hello "); assertEquals("hello", group.getKey()); // via form.init initForm(createFieldList(field1)); assertEquals("g", group.getKey()); } @Test public void getParentGroup() { // no key assertNull(group.getParentGroup()); // empty key group.setParentGroup(""); assertNull(group.getParentGroup()); group.setParentGroup(" "); assertNull(group.getParentGroup()); // normal key group.setParentGroup(" hello "); assertEquals("hello", group.getParentGroup()); } @Test public void isTrimmingByDefault() { // default assertTrue(group.isTrimmingByDefault()); // set value group.setTrimmingByDefault(false); assertFalse(group.isTrimmingByDefault()); } @Test public void isPostOnly() throws Exception { // default, no form config assertTrue(group.isPostOnly()); // default, with form config initForm(createFieldList(field1)); formConfig.setPostOnlyByDefault(false); assertFalse(group.isPostOnly()); formConfig.setPostOnlyByDefault(true); assertTrue(group.isPostOnly()); // set value group.setPostOnly(false); assertFalse(group.isPostOnly()); } @Test public void getFieldConfigList() throws Exception { // default, empty assertTrue(group.getFieldConfigList().isEmpty()); // field name is null try { initForm(createFieldList(new FieldConfigImpl())); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception("name")); } // set fields initForm(createFieldList(field1, field2, field3)); assertEquals(3, group.getFieldConfigList().size()); assertArrayEquals(new Object[] { field1, field2, field3 }, group.getFieldConfigList().toArray()); // set null initForm((List<FieldConfigImpl>) null); assertEquals(3, group.getFieldConfigList().size()); // set empty initForm(new ArrayList<FieldConfigImpl>()); assertEquals(0, group.getFieldConfigList().size()); // unmodifiable try { group.getFieldConfigList().clear(); fail(); } catch (UnsupportedOperationException e) { } // set duplicated fields try { initForm(createFieldList(field1, field2, field1)); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception("Duplicated field name: \"group1.fiELd1\"")); } } @Test public void getFieldConfig() throws Exception { // not init assertNull(group.getFieldConfig("test")); // init initForm(createFieldList(field1, field2, field3)); // case insensitive assertSame(field1, group.getFieldConfig("FIELD1")); assertSame(field2, group.getFieldConfig("field2")); assertSame(field3, group.getFieldConfig("fiELD3")); } @Test public void getFieldConfigByKey() throws Exception { // not init try { group.getFieldConfigByKey("test"); fail(); } catch (IllegalStateException e) { assertThat(e, exception("fieldsByKey not inited")); } // init initForm(createFieldList(field1, field2, field3)); // case insensitive assertSame(field1, group.getFieldConfigByKey("f")); assertSame(field2, group.getFieldConfigByKey("fi")); assertSame(field3, group.getFieldConfigByKey("fie")); } @Test public void getImports() throws Exception { // default is empty assertTrue(group.getImports().isEmpty()); // setImports List<Import> imports = createImportList(new ImportImpl("groupName", "fieldName")); group.setImports(imports); assertEquals(1, group.getImports().size()); assertSame(imports.get(0), group.getImports().get(0)); // unmodifiable try { group.getImports().clear(); fail(); } catch (UnsupportedOperationException e) { } } @Test public void initFieldConfig() throws Exception { // no groups try { initForm((List<FieldConfigImpl>) null); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception("no fields")); } initForm(createFieldList(field1, field2, field3)); // field.getGroupConfig() assertSame(group, field1.getGroupConfig()); assertSame(group, field2.getGroupConfig()); assertSame(group, field3.getGroupConfig()); // field keys assertEquals("f", field1.getKey()); assertEquals("fi", field2.getKey()); assertEquals("fie", field3.getKey()); } @Test public void extend_trimByDefault() throws Exception { // default value assertTrimByDefault(null, null, true); // derived from parent assertTrimByDefault(true, null, true); assertTrimByDefault(false, null, false); // override parent assertTrimByDefault(null, false, false); assertTrimByDefault(null, true, true); assertTrimByDefault(true, false, false); assertTrimByDefault(false, true, true); } private void assertTrimByDefault(Boolean parentValue, Boolean overrideValue, boolean expectedValue) throws Exception { init(); if (parentValue != null) { group1.setTrimmingByDefault(parentValue); } group1.afterPropertiesSet(); if (overrideValue != null) { group2.setTrimmingByDefault(overrideValue); } group2.setParentGroup("group1"); group2.afterPropertiesSet(); formConfig.setGroupConfigImplList(createGroupList(group1, group2)); formConfig.afterPropertiesSet(); assertEquals(expectedValue, group2.isTrimmingByDefault()); } @Test public void extend_postOnly() throws Exception { // default value assertPostOnly(null, null, true); // derived from parent assertPostOnly(true, null, true); assertPostOnly(false, null, false); // override parent assertPostOnly(null, false, false); assertPostOnly(null, true, true); assertPostOnly(true, false, false); assertPostOnly(false, true, true); } private void assertPostOnly(Boolean parentValue, Boolean overrideValue, boolean expectedValue) throws Exception { init(); if (parentValue != null) { group1.setPostOnly(parentValue); } group1.afterPropertiesSet(); if (overrideValue != null) { group2.setPostOnly(overrideValue); } group2.setParentGroup("group1"); group2.afterPropertiesSet(); formConfig.setGroupConfigImplList(createGroupList(group1, group2)); formConfig.afterPropertiesSet(); assertEquals(expectedValue, group2.isPostOnly()); } @Test public void import_fieldNotFound() throws Exception { group2.setImports(createImportList(new ImportImpl("group1", "notExistField"))); formConfig.setGroupConfigImplList(createGroupList(group1, group2)); try { formConfig.afterPropertiesSet(); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception("Field \"group1.notExistField\" not found")); } } @Test public void import_dupFields() throws Exception { import_dupFields(false); import_dupFields(true); } private void import_dupFields(boolean importAll) throws Exception { init(); List<Import> imports; field3.setName("field1"); // group2.field1 duped with group1.field1 group1 = new GroupConfigImpl(); group1.setName("group1"); group1.setFieldConfigImplList(createFieldList(field1)); group1.afterPropertiesSet(); group2 = new GroupConfigImpl(); group2.setName("group2"); group2.setFieldConfigImplList(createFieldList(field2, field3)); if (importAll) { imports = createImportList(new ImportImpl("group1", null)); } else { imports = createImportList(new ImportImpl("group1", "field1")); } group2.setImports(imports); group2.afterPropertiesSet(); formConfig.setGroupConfigImplList(createGroupList(group1, group2)); try { formConfig.afterPropertiesSet(); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception("Duplicated field name: \"group2.field1\"")); } } @Test public void extend_overrideField() throws Exception { field3.setName("field1"); // group2.field1 overrides group1.field1 group1 = new GroupConfigImpl(); group1.setName("group1"); group1.setFieldConfigImplList(createFieldList(field1)); group1.afterPropertiesSet(); group2 = new GroupConfigImpl(); group2.setName("group2"); group2.setFieldConfigImplList(createFieldList(field2, field3)); group2.setParentGroup("group1"); group2.afterPropertiesSet(); formConfig.setGroupConfigImplList(createGroupList(group1, group2)); formConfig.afterPropertiesSet(); assertEquals(1, group1.getFieldConfigList().size()); assertSame(field1, group1.getFieldConfig("field1")); assertEquals(2, group2.getFieldConfigList().size()); assertSame(field3, group2.getFieldConfig("field1")); assertSame(field2, group2.getFieldConfig("field2")); } @Test public void toString_() throws Exception { // empty assertEquals("GroupConfig[name: group1, fields: 0]", group.toString()); // with fields initForm(createFieldList(field1, field2, field3)); assertEquals("GroupConfig[name: group1, fields: 3]", group.toString()); } @Test public void toString_import() { assertEquals("group1", new ImportImpl("group1", null).toString()); assertEquals("group1", new ImportImpl(" group1 ", " ").toString()); assertEquals("group1.field1", new ImportImpl("group1", " field1 ").toString()); } }