/** * 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.validator.internal; import com.liferay.dynamic.data.mapping.expression.internal.DDMExpressionFactoryImpl; import com.liferay.dynamic.data.mapping.form.field.type.DDMFormFieldTypeServicesTracker; import com.liferay.dynamic.data.mapping.model.DDMForm; import com.liferay.dynamic.data.mapping.model.DDMFormField; import com.liferay.dynamic.data.mapping.model.DDMFormFieldOptions; import com.liferay.dynamic.data.mapping.model.DDMFormFieldValidation; import com.liferay.dynamic.data.mapping.model.LocalizedValue; import com.liferay.dynamic.data.mapping.model.UnlocalizedValue; import com.liferay.dynamic.data.mapping.model.Value; import com.liferay.dynamic.data.mapping.storage.DDMFormFieldValue; import com.liferay.dynamic.data.mapping.storage.DDMFormValues; import com.liferay.dynamic.data.mapping.test.util.DDMFormTestUtil; import com.liferay.dynamic.data.mapping.test.util.DDMFormValuesTestUtil; import com.liferay.dynamic.data.mapping.validator.DDMFormValuesValidationException.MustNotSetValue; import com.liferay.dynamic.data.mapping.validator.DDMFormValuesValidationException.MustSetValidAvailableLocales; import com.liferay.dynamic.data.mapping.validator.DDMFormValuesValidationException.MustSetValidDefaultLocale; import com.liferay.dynamic.data.mapping.validator.DDMFormValuesValidationException.MustSetValidValue; import com.liferay.dynamic.data.mapping.validator.DDMFormValuesValidationException.MustSetValidValuesSize; import com.liferay.dynamic.data.mapping.validator.DDMFormValuesValidationException.RequiredValue; import com.liferay.portal.json.JSONFactoryImpl; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.modules.junit4.PowerMockRunner; /** * @author Marcellus Tavares */ @RunWith(PowerMockRunner.class) public class DDMFormValuesValidatorTest extends PowerMockito { @Before public void setUp() throws Exception { setUpDDMFormValuesValidator(); } @Test public void testValidationWithAutocompleteText() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = DDMFormTestUtil.createTextDDMFormField( "Country", false, false, false); DDMFormFieldOptions ddmFormFieldOptions = new DDMFormFieldOptions(); ddmFormFieldOptions.addOptionLabel("Brazil", LocaleUtil.US, "Brazil"); ddmFormFieldOptions.addOptionLabel("USA", LocaleUtil.US, "USA"); ddmFormFieldOptions.addOptionLabel("France", LocaleUtil.US, "France"); ddmFormField.setDDMFormFieldOptions(ddmFormFieldOptions); ddmForm.addDDMFormField(ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createUnlocalizedDDMFormFieldValue( "Country", "Spain")); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test public void testValidationWithInvalidFieldName() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm("firstName"); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createDDMFormFieldValue("lastName", null)); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test public void testValidationWithInvalidNestedFieldName() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = DDMFormTestUtil.createLocalizableTextDDMFormField("name"); DDMFormTestUtil.addNestedTextDDMFormFields(ddmFormField, "contact"); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); Value localizedValue = new LocalizedValue(LocaleUtil.US); localizedValue.addString(LocaleUtil.US, StringUtil.randomString()); DDMFormFieldValue ddmFormFieldValue = DDMFormValuesTestUtil.createDDMFormFieldValue( "name", localizedValue); List<DDMFormFieldValue> nestedDDMFormFieldValues = ddmFormFieldValue.getNestedDDMFormFieldValues(); nestedDDMFormFieldValues.add( DDMFormValuesTestUtil.createDDMFormFieldValue( "invalid", localizedValue)); ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = MustSetValidValue.class) public void testValidationWithLocalizableField() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = DDMFormTestUtil.createLocalizableTextDDMFormField("name"); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createDDMFormFieldValue( "name", new UnlocalizedValue("Joe"))); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = RequiredValue.class) public void testValidationWithMissingNestedRequiredField() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = new DDMFormField("name", "text"); List<DDMFormField> nestedDDMFormFields = ddmFormField.getNestedDDMFormFields(); nestedDDMFormFields.add( DDMFormTestUtil.createTextDDMFormField( "contact", "", false, false, true)); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); DDMFormFieldValue ddmFormFieldValue = DDMFormValuesTestUtil.createDDMFormFieldValue("name", null); ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = RequiredValue.class) public void testValidationWithMissingNestedRequiredFieldValue() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = new DDMFormField("name", "text"); List<DDMFormField> nestedDDMFormFields = ddmFormField.getNestedDDMFormFields(); nestedDDMFormFields.add( DDMFormTestUtil.createTextDDMFormField( "contact", "", false, false, true)); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); DDMFormFieldValue ddmFormFieldValue = DDMFormValuesTestUtil.createDDMFormFieldValue("name", null); List<DDMFormFieldValue> nestedDDMFormFieldValues = ddmFormFieldValue.getNestedDDMFormFieldValues(); nestedDDMFormFieldValues.add( DDMFormValuesTestUtil.createDDMFormFieldValue("contact", null)); ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = RequiredValue.class) public void testValidationWithMissingRequiredField() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = DDMFormTestUtil.createLocalizableTextDDMFormField("name"); ddmFormField.setRequired(true); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = RequiredValue.class) public void testValidationWithMissingRequiredFieldValue() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = DDMFormTestUtil.createLocalizableTextDDMFormField("name"); ddmFormField.setRequired(true); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createDDMFormFieldValue("name", null)); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test public void testValidationWithNonrequiredFieldAndEmptyDefaultLocaleValue() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm( DDMFormTestUtil.createAvailableLocales(LocaleUtil.US), LocaleUtil.US); DDMFormField ddmFormField = DDMFormTestUtil.createTextDDMFormField( "name", "Name", true, false, false); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); LocalizedValue localizedValue = new LocalizedValue(LocaleUtil.US); localizedValue.addString(LocaleUtil.US, StringPool.BLANK); DDMFormFieldValue ddmFormFieldValue = DDMFormValuesTestUtil.createDDMFormFieldValue( "name", localizedValue); ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test public void testValidationWithNonrequiredFieldValue() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm( DDMFormTestUtil.createAvailableLocales(LocaleUtil.US), LocaleUtil.US); DDMFormField ddmFormField = DDMFormTestUtil.createTextDDMFormField( "name", "Name", true, false, false); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test public void testValidationWithNonrequiredSelect() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = new DDMFormField("option", "select"); ddmFormField.setDataType("string"); ddmFormField.setRequired(false); DDMFormFieldOptions ddmFormFieldOptions = new DDMFormFieldOptions(); ddmFormFieldOptions.addOptionLabel("A", LocaleUtil.US, "Option A"); ddmFormFieldOptions.addOptionLabel("B", LocaleUtil.US, "Option B"); ddmFormField.setDDMFormFieldOptions(ddmFormFieldOptions); ddmFormField.setLocalizable(false); ddmForm.addDDMFormField(ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); String instanceId = StringUtil.randomString(); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createDDMFormFieldValue( instanceId, "option", new UnlocalizedValue("[\"A\"]"))); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test public void testValidationWithNonrequiredSelectAndEmptyDefaultLocaleValue() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = new DDMFormField("option", "select"); ddmFormField.setDataType("string"); ddmFormField.setRequired(false); DDMFormFieldOptions ddmFormFieldOptions = new DDMFormFieldOptions(); ddmFormFieldOptions.addOptionLabel("A", LocaleUtil.US, "Option A"); ddmFormFieldOptions.addOptionLabel("B", LocaleUtil.US, "Option B"); ddmFormField.setDDMFormFieldOptions(ddmFormFieldOptions); ddmFormField.setLocalizable(false); ddmForm.addDDMFormField(ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); String instanceId = StringUtil.randomString(); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createDDMFormFieldValue( instanceId, "option", new UnlocalizedValue("[\"\"]"))); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = NullPointerException.class) public void testValidationWithoutDDMFormReference() throws Exception { DDMFormValues ddmFormValues = new DDMFormValues(null); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = RequiredValue.class) public void testValidationWithRequiredFieldAndEmptyDefaultLocaleValue() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm( DDMFormTestUtil.createAvailableLocales(LocaleUtil.US), LocaleUtil.US); DDMFormField ddmFormField = DDMFormTestUtil.createTextDDMFormField( "name", "Name", true, false, true); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); String instanceId = StringUtil.randomString(); LocalizedValue localizedValue = new LocalizedValue(LocaleUtil.US); localizedValue.addString(LocaleUtil.US, StringPool.BLANK); DDMFormFieldValue ddmFormFieldValue = DDMFormValuesTestUtil.createDDMFormFieldValue( instanceId, "name", localizedValue); ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = RequiredValue.class) public void testValidationWithRequiredFieldAndEmptyTranslatedValue() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm( DDMFormTestUtil.createAvailableLocales( LocaleUtil.US, LocaleUtil.BRAZIL), LocaleUtil.US); DDMFormField ddmFormField = DDMFormTestUtil.createTextDDMFormField( "name", "Name", true, false, true); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm, DDMFormTestUtil.createAvailableLocales( LocaleUtil.US, LocaleUtil.BRAZIL), LocaleUtil.US); String instanceId = StringUtil.randomString(); LocalizedValue localizedValue = new LocalizedValue(LocaleUtil.US); localizedValue.addString(LocaleUtil.US, StringUtil.randomString()); localizedValue.addString(LocaleUtil.BRAZIL, StringPool.BLANK); DDMFormFieldValue ddmFormFieldValue = DDMFormValuesTestUtil.createDDMFormFieldValue( instanceId, "name", localizedValue); ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = MustSetValidAvailableLocales.class) public void testValidationWithRequiredFieldAndNullValue() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm( DDMFormTestUtil.createAvailableLocales(LocaleUtil.US), LocaleUtil.US); DDMFormField ddmFormField = DDMFormTestUtil.createTextDDMFormField( "name", "Name", true, false, true); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); LocalizedValue localizedValue = new LocalizedValue(LocaleUtil.US); String instanceId = StringUtil.randomString(); DDMFormFieldValue ddmFormFieldValue = DDMFormValuesTestUtil.createDDMFormFieldValue( instanceId, "name", localizedValue); ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = RequiredValue.class) public void testValidationWithRequiredFieldAndWithNoValue() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm( DDMFormTestUtil.createAvailableLocales(LocaleUtil.US), LocaleUtil.US); DDMFormField ddmFormField = DDMFormTestUtil.createTextDDMFormField( "name", "Name", true, false, true); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test public void testValidationWithRequiredSelect() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = new DDMFormField("option", "select"); ddmFormField.setDataType("string"); ddmFormField.setRequired(true); DDMFormFieldOptions ddmFormFieldOptions = new DDMFormFieldOptions(); ddmFormFieldOptions.addOptionLabel("A", LocaleUtil.US, "Option A"); ddmFormFieldOptions.addOptionLabel("B", LocaleUtil.US, "Option B"); ddmFormField.setDDMFormFieldOptions(ddmFormFieldOptions); ddmFormField.setLocalizable(false); ddmForm.addDDMFormField(ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); String instanceId = StringUtil.randomString(); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createDDMFormFieldValue( instanceId, "option", new UnlocalizedValue("[\"A\"]"))); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = MustNotSetValue.class) public void testValidationWithSeparatorField() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = DDMFormTestUtil.createSeparatorDDMFormField( "separator", false); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createDDMFormFieldValue( "separator", new UnlocalizedValue("separator value"))); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = MustSetValidValue.class) public void testValidationWithUnlocalizableField() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = DDMFormTestUtil.createTextDDMFormField( "name", "", false, false, false); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); LocalizedValue localizedValue = new LocalizedValue(LocaleUtil.US); localizedValue.addString(LocaleUtil.US, "Joe"); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createDDMFormFieldValue( "name", localizedValue)); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = MustNotSetValue.class) public void testValidationWithValueSetForTransientField() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = new DDMFormField("fieldset", "fieldset"); DDMFormTestUtil.addNestedTextDDMFormFields(ddmFormField, "name"); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); DDMFormFieldValue ddmFormFieldValue = DDMFormValuesTestUtil.createDDMFormFieldValue( "fieldset", new UnlocalizedValue("Value")); List<DDMFormFieldValue> nestedDDMFormFieldValues = ddmFormFieldValue.getNestedDDMFormFieldValues(); nestedDDMFormFieldValues.add( DDMFormValuesTestUtil.createDDMFormFieldValue( "name", new UnlocalizedValue("Joe"))); ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = MustSetValidAvailableLocales.class) public void testValidationWithWrongAvailableLocales() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = DDMFormTestUtil.createLocalizableTextDDMFormField("name"); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); LocalizedValue localizedValue = new LocalizedValue(LocaleUtil.US); localizedValue.addString(LocaleUtil.BRAZIL, "Joao"); localizedValue.addString(LocaleUtil.US, "Joe"); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createDDMFormFieldValue( "name", localizedValue)); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = MustSetValidDefaultLocale.class) public void testValidationWithWrongDefaultLocale() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = DDMFormTestUtil.createLocalizableTextDDMFormField("name"); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); LocalizedValue localizedValue = new LocalizedValue(LocaleUtil.BRAZIL); localizedValue.addString(LocaleUtil.US, "Joe"); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createDDMFormFieldValue( "name", localizedValue)); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = MustSetValidValue.class) public void testValidationWithWrongValueSetDueValidationExpression() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = new DDMFormField("Age", "text"); ddmFormField.setDataType("integer"); DDMFormFieldValidation ddmFormFieldValidation = new DDMFormFieldValidation(); ddmFormFieldValidation.setExpression("Age > 18"); ddmFormFieldValidation.setErrorMessage("Age must be greater than 18."); ddmFormField.setDDMFormFieldValidation(ddmFormFieldValidation); ddmForm.addDDMFormField(ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); ddmFormValues.addDDMFormFieldValue( DDMFormValuesTestUtil.createDDMFormFieldValue( "Age", new UnlocalizedValue("5"))); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } @Test(expected = MustSetValidValuesSize.class) public void testValidationWithWrongValuesForNonRepeatableField() throws Exception { DDMForm ddmForm = DDMFormTestUtil.createDDMForm(); DDMFormField ddmFormField = new DDMFormField("name", "text"); List<DDMFormField> nestedDDMFormFields = ddmFormField.getNestedDDMFormFields(); nestedDDMFormFields.add( DDMFormTestUtil.createTextDDMFormField( "contact", "", false, false, true)); DDMFormTestUtil.addDDMFormFields(ddmForm, ddmFormField); DDMFormValues ddmFormValues = DDMFormValuesTestUtil.createDDMFormValues( ddmForm); DDMFormFieldValue ddmFormFieldValue = DDMFormValuesTestUtil.createDDMFormFieldValue( "name", new UnlocalizedValue("name value")); List<DDMFormFieldValue> nestedDDMFormFieldValues = ddmFormFieldValue.getNestedDDMFormFieldValues(); nestedDDMFormFieldValues.add( DDMFormValuesTestUtil.createDDMFormFieldValue( "contact", new UnlocalizedValue("contact value 1"))); nestedDDMFormFieldValues.add( DDMFormValuesTestUtil.createDDMFormFieldValue( "contact", new UnlocalizedValue("contact value 2"))); ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue); _ddmFormValuesValidatorImpl.validate(ddmFormValues); } protected void setUpDDMFormValuesValidator() throws Exception { _ddmFormValuesValidatorImpl.setDDMExpressionFactory( new DDMExpressionFactoryImpl()); _ddmFormValuesValidatorImpl.setJSONFactory(new JSONFactoryImpl()); field( DDMFormValuesValidatorImpl.class, "_ddmFormFieldTypeServicesTracker" ).set( _ddmFormValuesValidatorImpl, mock(DDMFormFieldTypeServicesTracker.class) ); } private final DDMFormValuesValidatorImpl _ddmFormValuesValidatorImpl = new DDMFormValuesValidatorImpl(); }