/* * 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; import static com.alibaba.citrus.test.TestUtil.*; import static com.alibaba.citrus.util.CollectionUtil.*; import static org.junit.Assert.*; import java.util.Iterator; import java.util.Set; import com.alibaba.citrus.service.form.support.FormTool; import com.alibaba.citrus.service.form.support.FormTool.FieldHelper; import com.alibaba.citrus.service.form.support.FormTool.GroupHelper; import com.alibaba.citrus.service.form.support.FormTool.GroupInstanceHelper; import com.alibaba.citrus.service.pull.PullService; import org.apache.ecs.xhtml.input; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; public class FormToolTests extends AbstractFormServiceTests { private FormTool tool; private FormTool tool5; @BeforeClass public static void initFactory() { factory = createContext("services-form.xml", true); } @Before public void init() throws Exception { getFormService("form1"); PullService pullService = (PullService) factory.getBean("pullService"); tool = (FormTool) pullService.getTools().get("form"); assertNotNull(tool); tool5 = (FormTool) pullService.getTools().get("tool5"); assertNotNull(tool5); newForm(); } private void newForm() throws Exception { invokePost(null); } private void submitForm() throws Exception { invokePost(new Object[][] { { "sumbit", "提交" }, // { "_fm.g._0.f", "aa" }, // group1.default.field1 { "_fm.g.1.f", "bb" }, // group1.1.field1 { "_fm.gr._0.f", "cc" }, // group2.default.field1 { "_fm.gr._0.fi", "dd" }, // group2.default.field2 }); } @Test public void tool_formServiceRef() { GroupInstanceHelper group1 = tool5.get("group1").getDefaultInstance(); assertNotNull(group1.get("field1")); assertNotNull(group1.get("field2")); assertNull(group1.get("field3")); assertNull(tool5.get("group2").getDefaultInstance()); } @Test public void tool_toString() { assertEquals("FormTool[no FormService]", new FormTool().toString()); assertEquals("form1:FormService {\n" // + " FormConfig[groups: 3]\n" // + "}", tool.toString()); } @Test public void form_getGroup() throws Exception { // new form GroupHelper group = tool.get("group1"); assertEquals("Group[group1]", group.toString()); GroupInstanceHelper group_0 = group.getDefaultInstance(); GroupInstanceHelper group_1 = group.getInstance("1"); GroupInstanceHelper group_2 = group.getInstance("2", false); assertNull(group_2); group_2 = group.getInstance("2", true); assertEquals("Group[name: group1._0, fields: 2, validated: false, valid: true]", group_0.toString()); assertEquals("Group[name: group1.1, fields: 2, validated: false, valid: true]", group_1.toString()); assertEquals("Group[name: group1.2, fields: 2, validated: false, valid: true]", group_2.toString()); // submit form submitForm(); group = tool.get("group1"); assertEquals("Group[group1]", group.toString()); group_0 = group.getDefaultInstance(); group_1 = group.getInstance("1", false); assertNotNull(group_1); group_1 = group.getInstance("1"); assertEquals("Group[name: group1._0, fields: 2, validated: true, valid: false]", group_0.toString()); assertEquals("Group[name: group1.1, fields: 2, validated: true, valid: false]", group_1.toString()); // not exist group group = tool.get("notExist"); assertEquals("Group[notExist]", group.toString()); assertNull(group.getDefaultInstance()); assertNull(group.getInstance("1")); assertNull(group.getInstance("2", false)); } @Test public void form_getGroups() throws Exception { submitForm(); // getGroups Iterator<GroupInstanceHelper> i = tool.getGroups(); Set<String> results = createHashSet( // "Group[name: group1._0, fields: 2, validated: true, valid: false]", // "Group[name: group1.1, fields: 2, validated: true, valid: false]", // "Group[name: group2._0, fields: 2, validated: true, valid: true]"); assertNotNull(results.remove(i.next().toString())); assertNotNull(results.remove(i.next().toString())); assertNotNull(results.remove(i.next().toString())); assertFalse(i.hasNext()); // getGroups(name) i = tool.getGroups("group1"); results = createHashSet( // "Group[name: group1._0, fields: 2, validated: true, valid: false]", // "Group[name: group1.1, fields: 2, validated: true, valid: false]"); assertNotNull(results.remove(i.next().toString())); assertNotNull(results.remove(i.next().toString())); assertFalse(i.hasNext()); } @Test public void form_isValid() throws Exception { // 初始状态:true assertEquals(true, tool.isValid()); // 验证失败:false Object[][] args = new Object[][] { { "sumbit", "提交" }, // { "_fm.g._0.f", "aaa" }, // group1.field1 }; invokePost(args); assertEquals(false, tool.isValid()); // 验证成功:true args = new Object[][] { { "sumbit", "提交" }, // { "_fm.g._0.f", "aaa" }, // group1.field1 { "_fm.g._0.fi", "bbb" }, // group1.field2 }; invokePost(args); assertEquals(true, tool.isValid()); } @Test public void group_getField() throws Exception { // new form GroupInstanceHelper group = tool.get("group1").getDefaultInstance(); assertEquals("Field[group: group1._0, name: field1, values: [default1], valid: true]", group.get("field1") .toString()); assertEquals("Field[group: group1._0, name: field2, values: [], valid: true]", group.get("field2").toString()); assertEquals(null, group.get("notExist")); // submit form submitForm(); group = tool.get("group1").getDefaultInstance(); assertEquals("Field[group: group1._0, name: field1, values: [aa], valid: true]", group.get("field1").toString()); assertEquals("Field[group: group1._0, name: field2, values: [], valid: false]", group.get("field2").toString()); group = tool.get("group1").getInstance("1"); assertEquals("Field[group: group1.1, name: field1, values: [bb], valid: true]", group.get("field1").toString()); assertEquals("Field[group: group1.1, name: field2, values: [], valid: false]", group.get("field2").toString()); group = tool.get("group2").getDefaultInstance(); assertEquals("Field[group: group2._0, name: field1, values: [cc], valid: true]", group.get("field1").toString()); assertEquals("Field[group: group2._0, name: field2, values: [dd], valid: true]", group.get("field2").toString()); } @Test public void group_getFields() throws Exception { GroupInstanceHelper group = tool.get("group1").getDefaultInstance(); Iterator<FieldHelper> i = group.getFields(); Set<String> results = createHashSet("Field[group: group1._0, name: field1, values: [default1], valid: true]", // "Field[group: group1._0, name: field2, values: [], valid: true]"); assertNotNull(results.remove(i.next().toString())); assertNotNull(results.remove(i.next().toString())); assertFalse(i.hasNext()); } @Test public void group_isValid() throws Exception { // new form GroupInstanceHelper group = tool.get("group1").getDefaultInstance(); assertEquals(true, group.isValid()); // submit form submitForm(); group = tool.get("group1").getDefaultInstance(); assertEquals(false, group.isValid()); group = tool.get("group2").getDefaultInstance(); assertEquals(true, group.isValid()); group = tool.get("group2").getInstance("2"); assertEquals(true, group.isValid()); } @Test public void group_isValidated() throws Exception { // new form GroupInstanceHelper group = tool.get("group1").getDefaultInstance(); assertEquals(false, group.isValidated()); // submit form submitForm(); group = tool.get("group1").getDefaultInstance(); assertEquals(true, group.isValidated()); group = tool.get("group2").getDefaultInstance(); assertEquals(true, group.isValidated()); group = tool.get("group2").getInstance("2"); assertEquals(false, group.isValidated()); } @Test public void group_mapTo() throws Exception { MyClass obj = new MyClass(); obj.setProperty1("aaa"); obj.setField2(456); // new form GroupInstanceHelper group = tool.get("group1").getDefaultInstance(); group.mapTo(obj); assertEquals("aaa", group.get("field1").getValue()); assertEquals("456", group.get("field2").getValue()); // submit form submitForm(); group = tool.get("group1").getDefaultInstance(); group.mapTo(obj); // 对validated group无效果 assertEquals("aa", group.get("field1").getValue()); assertEquals("", group.get("field2").getValue()); } @Test public void field_functions() throws Exception { GroupInstanceHelper group = tool.get("group1").getDefaultInstance(); FieldHelper field = group.get("field1"); setFieldValues(field, new String[] { "<&\">", "hello" }); assertEquals("我的字段1", field.getDisplayName()); assertEquals("_fm.g._0.f", field.getKey()); assertEquals("_fm.g._0.f.~html", field.getHtmlKey()); assertEquals("_fm.g._0.f.absent", field.getAbsentKey()); assertEquals("_fm.g._0.f.attach", field.getAttachmentKey()); assertEquals("<&\">", field.getValue()); assertEquals("<&">", field.getEscapedValue()); assertArrayEquals(new String[] { "<&\">", "hello" }, field.getValues()); assertArrayEquals(new String[] { "<&">", "hello" }, field.getEscapedValues()); } @Test public void field_absent() throws Exception { GroupInstanceHelper group = tool.get("group1").getDefaultInstance(); FieldHelper field = group.get("field1"); // absent hidden field input hiddenTag = field.getAbsentHiddenField("defaultValue"); assertThat(hiddenTag.toString(), containsAll("<input", "name='_fm.g._0.f.absent'", "type='hidden'", "value='defaultValue'", "/>")); } @Test public void field_attachment() throws Exception { GroupInstanceHelper group = tool.get("group1").getDefaultInstance(); FieldHelper field = group.get("field1"); // no attachment assertEquals(null, field.getAttachment()); assertEquals("", field.getAttachmentEncoded()); assertEquals(false, field.hasAttachment()); input attachmentTag = field.getAttachmentHiddenField(); assertThat(attachmentTag.toString(), containsAll("<input", "name='_fm.g._0.f.attach'", "type='hidden'", "value=''", "/>")); // with attachment field.setAttachment("attachedObject"); assertEquals("attachedObject", field.getAttachment()); assertEquals("eNpb85aBtYSBL7GkJDE5IzXFPykrNbkEAFOhB7Y%3D", field.getAttachmentEncoded()); assertEquals(true, field.hasAttachment()); attachmentTag = field.getAttachmentHiddenField(); assertThat( attachmentTag.toString(), containsAll("<input", "name='_fm.g._0.f.attach'", "type='hidden'", "value='eNpb85aBtYSBL7GkJDE5IzXFPykrNbkEAFOhB7Y%3D'", "/>")); // clear attachment field.clearAttachment(); assertEquals(null, field.getAttachment()); assertEquals("", field.getAttachmentEncoded()); assertEquals(false, field.hasAttachment()); } @Test public void field_isValid() throws Exception { // new form GroupInstanceHelper group = tool.get("group1").getDefaultInstance(); FieldHelper field = group.get("field1"); assertTrue(field.isValid()); // submit form submitForm(); group = tool.get("group1").getDefaultInstance(); field = group.get("field2"); assertFalse(field.isValid()); } @Test public void field_getMessage() throws Exception { // new form GroupInstanceHelper group = tool.get("group1").getDefaultInstance(); FieldHelper field = group.get("field1"); assertEquals(null, field.getMessage()); // submit form submitForm(); group = tool.get("group1").getDefaultInstance(); field = group.get("field2"); assertEquals("required field2", field.getMessage()); } private void setFieldValues(FieldHelper fieldHelper, String[] value) throws Exception { Field field = (Field) getAccessibleField(FieldHelper.class, "field").get(fieldHelper); field.setValues(value); } public static class MyClass { private String property1; private int field2; public String getProperty1() { return property1; } public void setProperty1(String property1) { this.property1 = property1; } public int getField2() { return field2; } public void setField2(int field2) { this.field2 = field2; } } }