/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * 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. */ package com.liferay.dynamic.data.mapping.util; import com.liferay.dynamic.data.mapping.annotations.DDMForm; import com.liferay.dynamic.data.mapping.annotations.DDMFormField; import com.liferay.dynamic.data.mapping.storage.DDMFormFieldValue; import com.liferay.dynamic.data.mapping.storage.DDMFormValues; import com.liferay.dynamic.data.mapping.test.util.DDMFormValuesTestUtil; import com.liferay.portal.json.JSONFactoryImpl; import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.util.StringUtil; import java.util.Arrays; import org.junit.Assert; import org.junit.Before; import org.junit.Test; /** * @author Marcellus Tavares */ public class DDMFormInstanceFactoryTest { @Before public void setUp() { JSONFactoryUtil jsonFactoryUtil = new JSONFactoryUtil(); jsonFactoryUtil.setJSONFactory(new JSONFactoryImpl()); } @Test public void testCreateDynamicFormWithFieldSet() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithPrimitiveTypesFieldSet.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); DDMFormFieldValue primitiveTypesDDMFormFieldValue = new DDMFormFieldValue(); primitiveTypesDDMFormFieldValue.setName("primitiveTypes"); boolean expectedBooleanValue = true; primitiveTypesDDMFormFieldValue.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "boolean", Boolean.toString(expectedBooleanValue))); double expectedDoubleValue = 2.5D; primitiveTypesDDMFormFieldValue.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "double", Double.toString(expectedDoubleValue))); float expectedFloatValue = 3.5F; primitiveTypesDDMFormFieldValue.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "float", Float.toString(expectedFloatValue))); int expectedIntegerValue = 2015; primitiveTypesDDMFormFieldValue.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "integer", Integer.toString(expectedIntegerValue))); long expectedLongValue = 1000L; primitiveTypesDDMFormFieldValue.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "long", Long.toString(expectedLongValue))); short expectedShortValue = 5; primitiveTypesDDMFormFieldValue.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "short", Short.toString(expectedShortValue))); String expectedStringValue = "Frank Sinatra"; primitiveTypesDDMFormFieldValue.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "string", expectedStringValue)); ddmFormValues.addDDMFormFieldValue(primitiveTypesDDMFormFieldValue); DynamicFormWithPrimitiveTypesFieldSet dynamicFormWithFieldSet = DDMFormInstanceFactory.create( DynamicFormWithPrimitiveTypesFieldSet.class, ddmFormValues); DynamicFormWithPrimitiveTypes dynamicFormWithPrimitiveTypes = dynamicFormWithFieldSet.primitiveTypes(); Assert.assertEquals( expectedBooleanValue, dynamicFormWithPrimitiveTypes.booleanValue()); Assert.assertEquals( expectedDoubleValue, dynamicFormWithPrimitiveTypes.doubleValue(), 0.1); Assert.assertEquals( expectedFloatValue, dynamicFormWithPrimitiveTypes.floatValue(), 0.1); Assert.assertEquals( expectedIntegerValue, dynamicFormWithPrimitiveTypes.integerValue()); Assert.assertEquals( expectedLongValue, dynamicFormWithPrimitiveTypes.longValue()); Assert.assertEquals( expectedShortValue, dynamicFormWithPrimitiveTypes.shortValue()); Assert.assertEquals( expectedStringValue, dynamicFormWithPrimitiveTypes.stringValue()); } @Test public void testCreateDynamicFormWithPrimitiveArrayTypes() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithPrimitiveArrayTypes.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); Boolean[] expectedBooleanValues = {true, false, true}; for (boolean expectedBooleanValue : expectedBooleanValues) { ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "boolean", Boolean.toString(expectedBooleanValue))); } String[] expectedStringValues = {"Nina Simone", "Billie Holiday"}; for (String expectedStringValue : expectedStringValues) { ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "string", expectedStringValue)); } DynamicFormWithPrimitiveArrayTypes dynamicFormWithPrimitiveArrayTypes = DDMFormInstanceFactory.create( DynamicFormWithPrimitiveArrayTypes.class, ddmFormValues); Assert.assertArrayEquals( expectedBooleanValues, dynamicFormWithPrimitiveArrayTypes.booleanValues()); Assert.assertArrayEquals( expectedStringValues, dynamicFormWithPrimitiveArrayTypes.stringValues()); } @Test public void testCreateDynamicFormWithPrimitiveArrayTypesFieldSet() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create( DynamicFormWithRepeatablePrimitiveArrayTypesFieldSet.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); DDMFormFieldValue ddmFormFieldValue1 = new DDMFormFieldValue(); ddmFormFieldValue1.setName("primitiveArrayTypes"); ddmFormFieldValue1.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "boolean", "true")); ddmFormFieldValue1.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "boolean", "false")); ddmFormFieldValue1.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "string", "A")); ddmFormFieldValue1.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "string", "B")); ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue1); DDMFormFieldValue ddmFormFieldValue2 = new DDMFormFieldValue(); ddmFormFieldValue2.setName("primitiveArrayTypes"); ddmFormFieldValue2.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "boolean", "false")); ddmFormFieldValue2.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "boolean", "true")); ddmFormFieldValue2.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "string", "C")); ddmFormFieldValue2.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "string", "D")); ddmFormFieldValue2.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "string", "E")); ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue2); DynamicFormWithRepeatablePrimitiveArrayTypesFieldSet dynamicFormWithRepeatablePrimitiveArrayTypesFieldSet = DDMFormInstanceFactory.create( DynamicFormWithRepeatablePrimitiveArrayTypesFieldSet.class, ddmFormValues); DynamicFormWithPrimitiveArrayTypes[] dynamicFormWithPrimitiveArrayTypes = dynamicFormWithRepeatablePrimitiveArrayTypesFieldSet. primitiveArrayTypes(); Assert.assertEquals( Arrays.toString(dynamicFormWithPrimitiveArrayTypes), 2, dynamicFormWithPrimitiveArrayTypes.length); Assert.assertArrayEquals( new Boolean[] {true, false}, dynamicFormWithPrimitiveArrayTypes[0].booleanValues()); Assert.assertArrayEquals( new String[] {"A", "B"}, dynamicFormWithPrimitiveArrayTypes[0].stringValues()); Assert.assertArrayEquals( new Boolean[] {false, true}, dynamicFormWithPrimitiveArrayTypes[1].booleanValues()); Assert.assertArrayEquals( new String[] {"C", "D", "E"}, dynamicFormWithPrimitiveArrayTypes[1].stringValues()); } @Test public void testCreateDynamicFormWithPrimitiveTypes() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithPrimitiveTypes.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); boolean expectedBooleanValue = true; ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "boolean", Boolean.toString(expectedBooleanValue))); double expectedDoubleValue = 2.5D; ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "double", Double.toString(expectedDoubleValue))); float expectedFloatValue = 3.5F; ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "float", Float.toString(expectedFloatValue))); int expectedIntegerValue = 2015; ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "integer", Integer.toString(expectedIntegerValue))); long expectedLongValue = 1000L; ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "long", Long.toString(expectedLongValue))); short expectedShortValue = 5; ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "short", Short.toString(expectedShortValue))); String expectedStringValue = "Frank Sinatra"; ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "string", expectedStringValue)); DynamicFormWithPrimitiveTypes dynamicFormWithPrimitiveTypes = DDMFormInstanceFactory.create( DynamicFormWithPrimitiveTypes.class, ddmFormValues); Assert.assertEquals( expectedBooleanValue, dynamicFormWithPrimitiveTypes.booleanValue()); Assert.assertEquals( expectedDoubleValue, dynamicFormWithPrimitiveTypes.doubleValue(), 0.1); Assert.assertEquals( expectedFloatValue, dynamicFormWithPrimitiveTypes.floatValue(), 0.1); Assert.assertEquals( expectedIntegerValue, dynamicFormWithPrimitiveTypes.integerValue()); Assert.assertEquals( expectedLongValue, dynamicFormWithPrimitiveTypes.longValue()); Assert.assertEquals( expectedShortValue, dynamicFormWithPrimitiveTypes.shortValue()); Assert.assertEquals( expectedStringValue, dynamicFormWithPrimitiveTypes.stringValue()); } @Test public void testCreateDynamicFormWithRepeatableFieldSet() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithRepeatableFieldSet.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); String[][] expectedParameters = { {"Parameter 1", "Value 1"}, {"Parameter 2", "Value 2"} }; for (int i = 0; i < expectedParameters.length; i++) { DDMFormFieldValue ddmFormFieldValue = new DDMFormFieldValue(); ddmFormFieldValue.setName("parameters"); ddmFormFieldValue.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "name", expectedParameters[i][0])); ddmFormFieldValue.addNestedDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "value", expectedParameters[i][1])); ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue); } DynamicFormWithRepeatableFieldSet dynamicFormWithFieldSet = DDMFormInstanceFactory.create( DynamicFormWithRepeatableFieldSet.class, ddmFormValues); Parameter[] parameters = dynamicFormWithFieldSet.parameters(); for (int i = 0; i < expectedParameters.length; i++) { Parameter parameter = parameters[i]; Assert.assertEquals(expectedParameters[i][0], parameter.name()); Assert.assertEquals(expectedParameters[i][1], parameter.value()); } } @Test public void testCreateDynamicFormWithSelectFields() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithSelectFields.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "letters", "[\"b\", \"c\"]")); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "letters", "[\"c\"]")); DynamicFormWithSelectFields dynamicFormWithSelectFields = DDMFormInstanceFactory.create( DynamicFormWithSelectFields.class, ddmFormValues); String[] actualLetters = dynamicFormWithSelectFields.letters(); Assert.assertEquals( Arrays.toString(actualLetters), 2, actualLetters.length); Assert.assertEquals("b,c", actualLetters[0]); Assert.assertEquals("c", actualLetters[1]); Assert.assertEquals("b", dynamicFormWithSelectFields.letter()); } @Test public void testCreateDynamicFormWithTuple() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithTuple.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); String expectedId = StringUtil.randomString(); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "id", expectedId)); String expectedName = StringUtil.randomString(); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "name", expectedName)); String expectedValue = StringUtil.randomString(); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "value", expectedValue)); DynamicFormWithTuple dynamicFormWithTuple = DDMFormInstanceFactory.create( DynamicFormWithTuple.class, ddmFormValues); Assert.assertEquals(expectedId, dynamicFormWithTuple.id()); Assert.assertEquals(expectedName, dynamicFormWithTuple.name()); Assert.assertEquals(expectedValue, dynamicFormWithTuple.value()); Parameter parameter = DDMFormInstanceFactory.create( Parameter.class, ddmFormValues); Assert.assertEquals(expectedName, parameter.name()); Assert.assertEquals(expectedValue, parameter.value()); } @Test public void testCreateDynamicFormWithUnrelatedClassDefinition() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create(Parameter.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); String expectedName = StringUtil.randomString(); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "name", expectedName)); String expectedValue = StringUtil.randomString(); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "value", expectedValue)); DynamicFormWithFieldSet dynamicFormWithFieldSet = DDMFormInstanceFactory.create( DynamicFormWithFieldSet.class, ddmFormValues); Assert.assertNull(dynamicFormWithFieldSet.parameter()); } @Test public void testGetDefaultValueDynamicFormWithFieldSet() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithFieldSet.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); DynamicFormWithFieldSet dynamicFormWithFieldSet = DDMFormInstanceFactory.create( DynamicFormWithFieldSet.class, ddmFormValues); Assert.assertEquals(null, dynamicFormWithFieldSet.parameter()); } @Test public void testGetDefaultValueDynamicFormWithPrimitiveArrayTypes() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithPrimitiveArrayTypes.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); DynamicFormWithPrimitiveArrayTypes dynamicFormWithPrimitiveArrayTypes = DDMFormInstanceFactory.create( DynamicFormWithPrimitiveArrayTypes.class, ddmFormValues); Assert.assertArrayEquals( new String[0], dynamicFormWithPrimitiveArrayTypes.stringValues()); Assert.assertArrayEquals( new Boolean[0], dynamicFormWithPrimitiveArrayTypes.booleanValues()); } @Test public void testGetDefaultValueDynamicFormWithRepeatableFieldSet() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithRepeatableFieldSet.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); DynamicFormWithRepeatableFieldSet dynamicFormWithRepeatableFieldSet = DDMFormInstanceFactory.create( DynamicFormWithRepeatableFieldSet.class, ddmFormValues); Assert.assertArrayEquals( new Parameter[0], dynamicFormWithRepeatableFieldSet.parameters()); } @Test public void testGetDefaultValueFromPrimitiveTypes() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create(DynamicFormWithPrimitiveTypes.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); DynamicFormWithPrimitiveTypes dynamicFormWithPrimitiveTypes = DDMFormInstanceFactory.create( DynamicFormWithPrimitiveTypes.class, ddmFormValues); Assert.assertEquals( false, dynamicFormWithPrimitiveTypes.booleanValue()); Assert.assertEquals( 0.0D, dynamicFormWithPrimitiveTypes.doubleValue(), 0.1); Assert.assertEquals( 0.0F, dynamicFormWithPrimitiveTypes.floatValue(), 0.1); Assert.assertEquals(0, dynamicFormWithPrimitiveTypes.integerValue()); Assert.assertEquals(0, dynamicFormWithPrimitiveTypes.longValue()); Assert.assertEquals(0, dynamicFormWithPrimitiveTypes.shortValue()); Assert.assertEquals(null, dynamicFormWithPrimitiveTypes.stringValue()); } @Test public void testGetDefaultValueFromPrimitiveTypesWithPredefinedValue() { com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = DDMFormFactory.create( DynamicFormWithPrimitiveTypesWithPredefinedValue.class); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); DynamicFormWithPrimitiveTypesWithPredefinedValue dynamicFormWithPrimitiveTypesWithPredefinedValue = DDMFormInstanceFactory.create( DynamicFormWithPrimitiveTypesWithPredefinedValue.class, ddmFormValues); Assert.assertEquals( true, dynamicFormWithPrimitiveTypesWithPredefinedValue.booleanValue()); Assert.assertEquals( 1.0D, dynamicFormWithPrimitiveTypesWithPredefinedValue.doubleValue(), 0.1); Assert.assertEquals( 1.0F, dynamicFormWithPrimitiveTypesWithPredefinedValue.floatValue(), 0.1); Assert.assertEquals( 1, dynamicFormWithPrimitiveTypesWithPredefinedValue.integerValue()); Assert.assertEquals( 1, dynamicFormWithPrimitiveTypesWithPredefinedValue.longValue()); Assert.assertEquals( 1, dynamicFormWithPrimitiveTypesWithPredefinedValue.shortValue()); Assert.assertEquals( "Joe", dynamicFormWithPrimitiveTypesWithPredefinedValue.stringValue()); } @DDMForm private interface DynamicFormWithFieldSet { @DDMFormField public Parameter parameter(); } @DDMForm private interface DynamicFormWithPrimitiveArrayTypes { @DDMFormField(name = "boolean") public Boolean[] booleanValues(); @DDMFormField(name = "string") public String[] stringValues(); } @DDMForm private interface DynamicFormWithPrimitiveTypes { @DDMFormField(name = "boolean") public boolean booleanValue(); @DDMFormField(name = "double") public double doubleValue(); @DDMFormField(name = "float") public float floatValue(); @DDMFormField(name = "integer") public int integerValue(); @DDMFormField(name = "long") public long longValue(); @DDMFormField(name = "short") public short shortValue(); @DDMFormField(name = "string") public String stringValue(); } @DDMForm private interface DynamicFormWithPrimitiveTypesFieldSet { @DDMFormField public DynamicFormWithPrimitiveTypes primitiveTypes(); } @DDMForm private interface DynamicFormWithPrimitiveTypesWithPredefinedValue { @DDMFormField(name = "boolean", predefinedValue = "true") public boolean booleanValue(); @DDMFormField(name = "double", predefinedValue = "1.0") public double doubleValue(); @DDMFormField(name = "float", predefinedValue = "1.0") public float floatValue(); @DDMFormField(name = "integer", predefinedValue = "1") public int integerValue(); @DDMFormField(name = "long", predefinedValue = "1") public long longValue(); @DDMFormField(name = "short", predefinedValue = "1") public short shortValue(); @DDMFormField(name = "string", predefinedValue = "Joe") public String stringValue(); } @DDMForm private interface DynamicFormWithRepeatableFieldSet { @DDMFormField public Parameter[] parameters(); } @DDMForm private interface DynamicFormWithRepeatablePrimitiveArrayTypesFieldSet { @DDMFormField public DynamicFormWithPrimitiveArrayTypes[] primitiveArrayTypes(); } @DDMForm private interface DynamicFormWithSelectFields { @DDMFormField( optionLabels = {"A", "B", "C"}, optionValues = {"a", "b", "c"}, predefinedValue = "[\"b\"]", type = "select" ) public String letter(); @DDMFormField( optionLabels = {"A", "B", "C"}, optionValues = {"a", "b", "c"}, type = "select" ) public String[] letters(); } @DDMForm private interface DynamicFormWithTuple extends Parameter { @DDMFormField public String id(); } @DDMForm private interface Parameter { @DDMFormField public String name(); @DDMFormField public String value(); } }