/* * (C) Copyright 2006-2007 Nuxeo SAS (http://nuxeo.com/) and contributors. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser General Public License * (LGPL) version 2.1 which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl.html * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * Contributors: * Nuxeo - initial API and implementation * * $Id: TestLayoutService.java 28493 2008-01-04 19:51:30Z sfermigier $ */ package org.nuxeo.ecm.platform.layout.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.nuxeo.ecm.platform.forms.layout.api.BuiltinModes; import org.nuxeo.ecm.platform.forms.layout.api.BuiltinWidgetModes; import org.nuxeo.ecm.platform.forms.layout.api.FieldDefinition; import org.nuxeo.ecm.platform.forms.layout.api.Layout; import org.nuxeo.ecm.platform.forms.layout.api.LayoutDefinition; import org.nuxeo.ecm.platform.forms.layout.api.LayoutRow; import org.nuxeo.ecm.platform.forms.layout.api.LayoutTypeConfiguration; import org.nuxeo.ecm.platform.forms.layout.api.LayoutTypeDefinition; import org.nuxeo.ecm.platform.forms.layout.api.Widget; import org.nuxeo.ecm.platform.forms.layout.api.WidgetDefinition; import org.nuxeo.ecm.platform.forms.layout.api.WidgetSelectOption; import org.nuxeo.ecm.platform.forms.layout.api.WidgetSelectOptions; import org.nuxeo.ecm.platform.forms.layout.api.WidgetType; import org.nuxeo.ecm.platform.forms.layout.api.WidgetTypeConfiguration; import org.nuxeo.ecm.platform.forms.layout.api.WidgetTypeDefinition; import org.nuxeo.ecm.platform.forms.layout.api.impl.FieldDefinitionImpl; import org.nuxeo.ecm.platform.forms.layout.api.impl.WidgetDefinitionImpl; import org.nuxeo.ecm.platform.forms.layout.service.WebLayoutManager; import org.nuxeo.ecm.platform.layout.facelets.DummyWidgetTypeHandler; import org.nuxeo.runtime.api.Framework; import org.nuxeo.runtime.test.NXRuntimeTestCase; /** * Test layout service API * * @author <a href="mailto:at@nuxeo.com">Anahide Tchertchian</a> */ public class TestLayoutService extends NXRuntimeTestCase { private WebLayoutManager service; @Before public void setUp() throws Exception { super.setUp(); deployBundle("org.nuxeo.ecm.platform.forms.layout.core"); deployContrib("org.nuxeo.ecm.platform.forms.layout.client", "OSGI-INF/layouts-framework.xml"); service = Framework.getService(WebLayoutManager.class); assertNotNull(service); } @Test public void testWidgetType() throws Exception { deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-test-contrib.xml"); WidgetType wType = service.getWidgetType("test"); assertEquals("test", wType.getName()); assertEquals(2, wType.getProperties().size()); assertEquals(DummyWidgetTypeHandler.class.getName(), wType.getWidgetTypeClass().getName()); WidgetTypeDefinition wTypeDef = service.getWidgetTypeDefinition("test"); assertEquals("test", wTypeDef.getName()); assertEquals(2, wTypeDef.getProperties().size()); assertEquals(DummyWidgetTypeHandler.class.getName(), wTypeDef.getHandlerClassName()); WidgetTypeConfiguration conf = wTypeDef.getConfiguration(); assertNotNull(conf); assertEquals("Test widget type", conf.getTitle()); assertEquals("<p>This is a test widget type</p>", conf.getDescription()); assertEquals("test", conf.getDemoId()); assertTrue(conf.isDemoPreviewEnabled()); Map<String, List<LayoutDefinition>> fieldLayouts = conf.getFieldLayouts(); assertNotNull(fieldLayouts); assertEquals(1, fieldLayouts.size()); assertEquals(1, fieldLayouts.get(BuiltinModes.ANY).size()); assertEquals(1, fieldLayouts.get(BuiltinModes.ANY).get(0).getColumns()); Map<String, Serializable> confProps = conf.getConfProperties(); assertNotNull(confProps); assertEquals(2, confProps.size()); assertEquals("foo", confProps.get("confProp")); assertEquals("dc:title", confProps.get("sortProperty")); assertFalse(conf.isComplex()); assertFalse(conf.isList()); List<String> supportedTypes = conf.getSupportedFieldTypes(); assertNotNull(supportedTypes); assertEquals(1, supportedTypes.size()); assertEquals("string", supportedTypes.get(0)); List<String> defaultTypes = conf.getDefaultFieldTypes(); assertNotNull(defaultTypes); assertEquals(1, defaultTypes.size()); assertEquals("string", defaultTypes.get(0)); List<FieldDefinition> defaultFieldDefs = conf.getDefaultFieldDefinitions(); assertNotNull(defaultFieldDefs); assertEquals(2, defaultFieldDefs.size()); assertEquals("dc:title", defaultFieldDefs.get(0).getPropertyName()); assertEquals("data.ref", defaultFieldDefs.get(1).getPropertyName()); List<String> categories = conf.getCategories(); assertNotNull(categories); assertEquals(2, categories.size()); List<LayoutDefinition> layouts = conf.getPropertyLayouts( BuiltinModes.EDIT, BuiltinModes.ANY); assertNotNull(layouts); assertEquals(2, layouts.size()); List<WidgetTypeDefinition> wTypeDefs = service.getWidgetTypeDefinitions(); assertNotNull(wTypeDefs); assertEquals(1, wTypeDefs.size()); assertEquals(wTypeDef, wTypeDefs.get(0)); } @Test public void testLayoutType() throws Exception { deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-test-contrib.xml"); LayoutTypeDefinition lType = service.getLayoutTypeDefinition("myLayoutType"); assertNotNull(lType); assertEquals("myLayoutType", lType.getName()); Map<String, String> templates = lType.getTemplates(); assertNotNull(templates); assertEquals(3, templates.size()); LayoutTypeConfiguration conf = lType.getConfiguration(); assertNotNull(conf); Map<String, Map<String, Serializable>> defaultProps = conf.getDefaultPropertyValues(); assertNotNull(defaultProps); assertEquals(1, defaultProps.size()); deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-listing-test-contrib.xml"); LayoutDefinition ldef = service.getLayoutDefinition("search_listing_ajax_with_type"); assertNotNull(ldef); assertEquals("search_listing_ajax_with_type", ldef.getName()); assertEquals("listing", ldef.getType()); assertNull(ldef.getTypeCategory()); Map<String, String> ltemplates = ldef.getTemplates(); assertNotNull(ltemplates); assertEquals(0, ltemplates.size()); Map<String, Map<String, Serializable>> lprops = ldef.getProperties(); assertNotNull(lprops); assertEquals(0, lprops.size()); Layout layout = service.getLayout(null, "search_listing_ajax_with_type", BuiltinModes.VIEW, null); assertNotNull(layout); assertEquals("search_listing_ajax_with_type", layout.getName()); assertEquals("listing", layout.getType()); assertEquals("jsf", layout.getTypeCategory()); assertEquals("/layouts/layout_listing_template.xhtml", layout.getTemplate()); Map<String, Serializable> props = layout.getProperties(); assertNotNull(props); assertEquals(2, props.size()); assertEquals("true", props.get("showRowEvenOddClass")); assertEquals("true", props.get("showListingHeader")); Layout csvLayout = service.getLayout(null, "search_listing_ajax_with_type", BuiltinModes.CSV, null); assertNotNull(csvLayout); assertEquals("search_listing_ajax_with_type", layout.getName()); assertEquals("listing", layout.getType()); assertEquals("jsf", layout.getTypeCategory()); assertEquals("/layouts/layout_listing_csv_template.xhtml", csvLayout.getTemplate()); Map<String, Serializable> csvprops = csvLayout.getProperties(); assertNotNull(csvprops); assertEquals(2, csvprops.size()); assertEquals("true", csvprops.get("showRowEvenOddClass")); assertEquals("true", csvprops.get("showListingHeader")); Layout editColumnsLayout = service.getLayout(null, "search_listing_ajax_with_type", "edit_columns", null); assertNotNull(editColumnsLayout); assertEquals("search_listing_ajax_with_type", layout.getName()); assertEquals("listing", layout.getType()); assertEquals("jsf", layout.getTypeCategory()); assertEquals("/layouts/layout_listing_template.xhtml", editColumnsLayout.getTemplate()); Map<String, Serializable> editColumnsProps = editColumnsLayout.getProperties(); assertNotNull(editColumnsProps); assertEquals(8, editColumnsProps.size()); assertEquals("false", editColumnsProps.get("displayAlwaysSelectedColumns")); assertEquals("true", editColumnsProps.get("columnSelectionRequired")); } @Test public void testLayout() throws Exception { deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-test-contrib.xml"); Layout layout = service.getLayout(null, "testLayout", BuiltinModes.VIEW, null); assertNotNull(layout); assertEquals("testLayout", layout.getName()); assertEquals(BuiltinModes.VIEW, layout.getMode()); assertNull(layout.getTemplate()); // test rows assertEquals(1, layout.getColumns()); LayoutRow[] rows = layout.getRows(); assertEquals(7, rows.length); LayoutRow row = rows[0]; // test widgets Widget[] widgets = row.getWidgets(); assertEquals(1, widgets.length); Widget widget = widgets[0]; assertNotNull(widget); assertEquals("testWidget", widget.getName()); assertEquals("test", widget.getType()); assertEquals("jsf", widget.getTypeCategory()); assertTrue(widget.isTranslated()); assertTrue(widget.isHandlingLabels()); FieldDefinition[] fieldDefs = widget.getFieldDefinitions(); assertEquals(1, fieldDefs.length); assertEquals("foo", fieldDefs[0].getSchemaName()); assertEquals("bar", fieldDefs[0].getFieldName()); assertEquals("label.test.widget", widget.getLabel()); assertNull(widget.getHelpLabel()); Map<String, Serializable> props = widget.getProperties(); assertEquals(2, props.size()); assertEquals("cssClass", props.get("styleClass")); // prop set by default on type assertEquals("true", props.get("rendered")); // test widget default label widget = rows[1].getWidgets()[0]; assertNotNull(widget); assertEquals("testWidgetWithoutLabel", widget.getName()); assertEquals("test", widget.getType()); assertEquals("jsf", widget.getTypeCategory()); assertEquals("label.widget.testLayout.testWidgetWithoutLabel", widget.getLabel()); assertTrue(widget.isTranslated()); // test widget defined globally widget = rows[2].getWidgets()[0]; assertNotNull(widget); assertEquals("globalTestWidget", widget.getName()); assertEquals("test", widget.getType()); assertEquals("jsf", widget.getTypeCategory()); // test widget defined globally on another category widget = rows[3].getWidgets()[0]; assertNotNull(widget); assertEquals("globalTestWidgetWithTestCategory", widget.getName()); assertEquals("test", widget.getType()); assertEquals("jsf", widget.getTypeCategory()); // test widget with selection options widget = rows[4].getWidgets()[0]; assertNotNull(widget); assertEquals("widgetWithSelectOptions", widget.getName()); assertEquals("test", widget.getType()); assertEquals("jsf", widget.getTypeCategory()); WidgetSelectOption[] options = widget.getSelectOptions(); assertNotNull(options); assertEquals(5, options.length); assertFalse(options[0] instanceof WidgetSelectOptions); checkCommonSelectOption(options[0], null, null, "bar", "foo", null, null); assertFalse(options[1] instanceof WidgetSelectOptions); checkCommonSelectOption(options[1], "#{currentDocument}", "doc", "#{doc.id}", "#{doc.dc.title}", "false", "true"); assertTrue(options[2] instanceof WidgetSelectOptions); checkMultipleSelectOption((WidgetSelectOptions) options[2], "#{myBean.myList}", "item", "#{item.id}", "#{item.title}", null, null, null, null); assertTrue(options[3] instanceof WidgetSelectOptions); checkMultipleSelectOption((WidgetSelectOptions) options[3], "#{documentList}", "doc", "#{doc.id}", "#{doc.dc.title}", "false", "true", "label", Boolean.TRUE); assertFalse(options[4] instanceof WidgetSelectOptions); checkCommonSelectOption(options[4], null, null, "bar2", "foo2", null, null); // test widget with subwidgets widget = rows[5].getWidgets()[0]; assertNotNull(widget); assertEquals("testWidgetWithSubWidgets", widget.getName()); assertEquals("test", widget.getType()); assertEquals("jsf", widget.getTypeCategory()); Widget[] subWidgets = widget.getSubWidgets(); assertNotNull(subWidgets); assertEquals(1, subWidgets.length); Widget subWidget = subWidgets[0]; assertEquals("subwidget", subWidget.getName()); assertEquals("text", subWidget.getType()); assertEquals("jsf", subWidget.getTypeCategory()); // test widget with subbwidget refs widget = rows[6].getWidgets()[0]; assertNotNull(widget); assertEquals("testWidgetWithSubWidgetRefs", widget.getName()); assertEquals("test", widget.getType()); assertEquals("jsf", widget.getTypeCategory()); subWidgets = widget.getSubWidgets(); assertNotNull(subWidgets); assertEquals(2, subWidgets.length); subWidget = subWidgets[0]; assertEquals("globalSubWidget", subWidget.getName()); assertEquals("test", subWidget.getType()); assertEquals("jsf", subWidget.getTypeCategory()); subWidget = subWidgets[1]; assertEquals("testLocalSubwidget", subWidget.getName()); assertEquals("test", subWidget.getType()); assertEquals("jsf", subWidget.getTypeCategory()); } protected void checkCommonSelectOption(WidgetSelectOption option, Object value, String var, String itemValue, String itemLabel, Object itemDisabled, Object itemRendered) { assertEquals(value, option.getValue()); assertEquals(var, option.getVar()); assertEquals(itemValue, option.getItemValue()); assertEquals(itemLabel, option.getItemLabel()); assertEquals(itemDisabled, option.getItemDisabled()); assertEquals(itemRendered, option.getItemRendered()); } protected void checkMultipleSelectOption(WidgetSelectOptions option, Object value, String var, String itemValue, String itemLabel, Object itemDisabled, Object itemRendered, String ordering, Boolean caseSensitive) { checkCommonSelectOption(option, value, var, itemValue, itemLabel, itemDisabled, itemRendered); assertEquals(ordering, option.getOrdering()); assertEquals(caseSensitive, option.getCaseSensitive()); } @Test public void testLayoutRowSelection() throws Exception { deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-listing-test-contrib.xml"); Layout layout = service.getLayout(null, "search_listing_ajax", "edit_columns", "", null, false); LayoutRow[] rows = layout.getRows(); assertEquals(4, rows.length); assertEquals("selection", rows[0].getName()); assertEquals("title_link", rows[1].getName()); assertEquals("modification_date", rows[2].getName()); assertEquals("lifecycle", rows[3].getName()); // select all by default layout = service.getLayout(null, "search_listing_ajax", "edit_columns", "", null, true); rows = layout.getRows(); assertEquals(7, rows.length); assertEquals("selection", rows[0].getName()); assertEquals("title_link", rows[1].getName()); assertEquals("modification_date", rows[2].getName()); assertEquals("lifecycle", rows[3].getName()); assertEquals("description", rows[4].getName()); assertEquals("subjects", rows[5].getName()); assertEquals("rights", rows[6].getName()); List<String> selectedRows = new ArrayList<String>(); layout = service.getLayout(null, "search_listing_ajax", "edit_columns", "", selectedRows, false); rows = layout.getRows(); assertEquals(1, rows.length); assertEquals("selection", rows[0].getName()); // select all by default => no change layout = service.getLayout(null, "search_listing_ajax", "edit_columns", "", selectedRows, true); rows = layout.getRows(); assertEquals(1, rows.length); assertEquals("selection", rows[0].getName()); selectedRows.add("title_link"); layout = service.getLayout(null, "search_listing_ajax", "edit_columns", "", selectedRows, false); rows = layout.getRows(); assertEquals(2, rows.length); assertEquals("selection", rows[0].getName()); assertEquals("title_link", rows[1].getName()); // select all by default => no change layout = service.getLayout(null, "search_listing_ajax", "edit_columns", "", selectedRows, true); rows = layout.getRows(); assertEquals(2, rows.length); assertEquals("selection", rows[0].getName()); assertEquals("title_link", rows[1].getName()); } @Test public void testWidgetModeProperties() throws Exception { deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-test-contrib.xml"); Layout editLayout = service.getLayout(null, "testWidgetModeProperties", BuiltinModes.EDIT, "", null, false); assertNotNull(editLayout); Widget editWidget = editLayout.getWidget("testWidgetMode"); assertNotNull(editWidget); assertEquals("testWidgetMode", editWidget.getName()); assertEquals(BuiltinWidgetModes.EDIT, editWidget.getMode()); assertEquals("layout", editWidget.getType()); assertEquals("jsf", editWidget.getTypeCategory()); Map<String, Serializable> editProps = editWidget.getProperties(); assertNotNull(editProps); assertEquals(2, editProps.size()); assertEquals("layout_in_a_widget", editProps.get("name")); assertEquals(BuiltinWidgetModes.EDIT, editProps.get("mode")); Layout viewLayout = service.getLayout(null, "testWidgetModeProperties", BuiltinModes.VIEW, "", null, false); assertNotNull(viewLayout); Widget viewWidget = viewLayout.getWidget("testWidgetMode"); assertNotNull(viewWidget); assertEquals("testWidgetMode", viewWidget.getName()); assertEquals(BuiltinWidgetModes.VIEW, viewWidget.getMode()); assertEquals("layout", viewWidget.getType()); Map<String, Serializable> viewProps = viewWidget.getProperties(); assertNotNull(viewProps); assertEquals(2, viewProps.size()); assertEquals("layout_in_a_widget", viewProps.get("name")); assertEquals(BuiltinWidgetModes.VIEW, viewProps.get("mode")); } @Test public void testPropertyReference() throws Exception { deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-test-props-contrib.xml"); assertTrue(service.referencePropertyAsExpression("foo", null, null, "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("foo", "bar", null, "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("foo", "bar", "bar", "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("foo", "bar", "bar", "jsf", "bar", null)); assertTrue(service.referencePropertyAsExpression("foo", "bar", "bar", "jsf", "bar", "bar")); assertFalse(service.referencePropertyAsExpression("validator", null, null, "jsf", null, null)); assertFalse(service.referencePropertyAsExpression("validator", "bar", null, "jsf", null, null)); assertFalse(service.referencePropertyAsExpression("validator", "bar", "bar", "jsf", null, null)); assertFalse(service.referencePropertyAsExpression("validator", "bar", "bar", "jsf", "bar", null)); assertFalse(service.referencePropertyAsExpression("validator", "bar", "bar", "jsf", "bar", "bar")); assertTrue(service.referencePropertyAsExpression("defaultTime", null, null, null, "jsf", null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", null, null, "jsf", null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", "bar", null, "jsf", null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", "bar", "bar", "jsf", null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", "bar", "bar", "jsf", "bar")); assertTrue(service.referencePropertyAsExpression("defaultTime", null, null, null, "jsf", null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", null, null, "jsf", null)); assertFalse(service.referencePropertyAsExpression("defaultTime", "bar", "datetime", null, "jsf", null)); assertFalse(service.referencePropertyAsExpression("defaultTime", "bar", "datetime", "jsf", "bar", null)); assertFalse(service.referencePropertyAsExpression("defaultTime", "bar", "datetime", "jsf", "bar", "bar")); assertFalse(service.referencePropertyAsExpression("disabled", null, null, "jsf", null, null)); assertFalse(service.referencePropertyAsExpression("disabled", "bar", null, "jsf", null, null)); assertFalse(service.referencePropertyAsExpression("disabled", "bar", "bar", "jsf", null, null)); assertFalse(service.referencePropertyAsExpression("disabled", "bar", "bar", "jsf", "bar", null)); assertFalse(service.referencePropertyAsExpression("disabled", "bar", "bar", "jsf", "bar", "bar")); // override to check merge deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-test-props-contrib-override.xml"); assertTrue(service.referencePropertyAsExpression("foo", null, null, "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("foo", "bar", null, "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("foo", "bar", "bar", "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("foo", "bar", "bar", "jsf", "bar", null)); assertTrue(service.referencePropertyAsExpression("foo", "bar", "bar", "jsf", "bar", "bar")); assertTrue(service.referencePropertyAsExpression("validator", null, null, "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("validator", "bar", null, "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("validator", "bar", "bar", "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("validator", "bar", "bar", "jsf", "bar", null)); assertTrue(service.referencePropertyAsExpression("validator", "bar", "bar", "jsf", "bar", "bar")); assertTrue(service.referencePropertyAsExpression("defaultTime", null, null, "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", null, "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", "bar", "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", "bar", "jsf", "bar", null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", "bar", "jsf", "bar", "bar")); assertTrue(service.referencePropertyAsExpression("defaultTime", null, null, "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", null, "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", "datetime", "jsf", null, null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", "datetime", "jsf", "bar", null)); assertTrue(service.referencePropertyAsExpression("defaultTime", "bar", "datetime", "jsf", "bar", "bar")); } @Test public void testWidget() throws Exception { deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-test-contrib.xml"); Widget widget = service.getWidget(null, "globalTestWidget", null, BuiltinModes.VIEW, null, "pseudoLayout"); assertNotNull(widget); assertEquals("globalTestWidget", widget.getName()); assertEquals("test", widget.getType()); assertEquals("jsf", widget.getTypeCategory()); assertEquals("pseudoLayout", widget.getLayoutName()); FieldDefinition[] fieldDefs = widget.getFieldDefinitions(); assertEquals(1, fieldDefs.length); assertEquals("foo", fieldDefs[0].getSchemaName()); assertEquals("bar", fieldDefs[0].getFieldName()); Map<String, Serializable> properties = new HashMap<String, Serializable>(); properties.put("myPropName", "myPropValue"); List<FieldDefinition> fieldDefinitions = new ArrayList<FieldDefinition>(); fieldDefinitions.add(new FieldDefinitionImpl("foo", "bar")); WidgetDefinition widgetDef = new WidgetDefinitionImpl( "testDynamicWidget", "test", "my.widget.label", "my.widget.help.label", true, null, fieldDefinitions, properties, null); widget = service.getWidget(null, widgetDef, BuiltinModes.VIEW, null, "pseudoLayout"); assertNotNull(widget); assertEquals("testDynamicWidget", widget.getName()); assertEquals("test", widget.getType()); assertEquals("jsf", widget.getTypeCategory()); assertEquals("my.widget.label", widget.getLabel()); assertEquals("my.widget.help.label", widget.getHelpLabel()); assertTrue(widget.isTranslated()); assertEquals("pseudoLayout", widget.getLayoutName()); fieldDefs = widget.getFieldDefinitions(); assertEquals(1, fieldDefs.length); assertEquals("foo", fieldDefs[0].getSchemaName()); assertEquals("bar", fieldDefs[0].getFieldName()); assertNull(widget.getControl("addForm")); Map<String, Serializable> props = widget.getProperties(); assertEquals(2, props.size()); assertEquals("myPropValue", props.get("myPropName")); // prop set by default on type assertEquals("true", props.get("rendered")); } @Test public void testWidgetWithTypeCategory() throws Exception { deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-test-contrib.xml"); Widget widget = service.getWidget(null, "globalTestWidgetWithTypeCategory", "testCategory", BuiltinModes.VIEW, null, "pseudoLayout"); assertNotNull(widget); assertEquals("globalTestWidgetWithTypeCategory", widget.getName()); assertEquals("test", widget.getType()); assertEquals("testTypeCategory", widget.getTypeCategory()); assertEquals("pseudoLayout", widget.getLayoutName()); FieldDefinition[] fieldDefs = widget.getFieldDefinitions(); assertEquals(1, fieldDefs.length); assertEquals("foo", fieldDefs[0].getSchemaName()); assertEquals("bar", fieldDefs[0].getFieldName()); Map<String, Serializable> props = widget.getProperties(); assertEquals(2, props.size()); assertEquals("cssClass", props.get("styleClass")); // prop set by default on type assertEquals("bar", props.get("foo")); } @Test public void testWidgetExceptions() throws Exception { deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-test-contrib.xml"); Widget widget = service.getWidget(null, "unknownWidget", null, BuiltinModes.VIEW, null, "pseudoLayout"); assertNull(widget); widget = service.getWidget(null, null, BuiltinModes.VIEW, null, "pseudoLayout"); assertNull(widget); } @Test public void testWidgetWithFormInfo() throws Exception { deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-test-contrib.xml"); Widget widget = service.getWidget(null, "widgetWithControls", null, BuiltinModes.VIEW, null, "pseudoLayout"); assertNotNull(widget); assertEquals("widgetWithControls", widget.getName()); assertEquals("test", widget.getType()); assertEquals("jsf", widget.getTypeCategory()); assertEquals("pseudoLayout", widget.getLayoutName()); assertEquals("true", widget.getControl("requireSurroundingForm")); assertEquals("true", widget.getControl("useAjaxForm")); assertTrue(widget.isHandlingLabels()); } @Test public void testEmptyLayout() throws Exception { deployContrib("org.nuxeo.ecm.platform.forms.layout.client.tests", "layouts-test-contrib.xml"); LayoutDefinition layout = service.getLayoutDefinition("testEmptyLayout"); assertTrue(layout.isEmpty()); layout = service.getLayoutDefinition("testLayout"); assertFalse(layout.isEmpty()); } }