You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ni...@apache.org on 2005/10/31 16:13:12 UTC
svn commit: r329836 - in /jakarta/commons/proper/validator/trunk/src:
share/org/apache/commons/validator/ test/org/apache/commons/validator/
Author: niallp
Date: Mon Oct 31 07:12:50 2005
New Revision: 329836
URL: http://svn.apache.org/viewcvs?rev=329836&view=rev
Log:
Fix for Bug 37310 Search the locale 'hierarchy' of formsets for a Form - as a result of Wolfgang Gehner's feedback.
Added:
jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest-config.xml (with props)
jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest.java (with props)
Modified:
jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/ValidatorResources.java
jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorTestSuite.java
Modified: jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/ValidatorResources.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/ValidatorResources.java?rev=329836&r1=329835&r2=329836&view=diff
==============================================================================
--- jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/ValidatorResources.java (original)
+++ jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/ValidatorResources.java Mon Oct 31 07:12:50 2005
@@ -393,27 +393,61 @@
public Form getForm(String language, String country, String variant,
String formKey) {
+ Form form = null;
+
+ // Try language/country/variant
String key = this.buildLocale(language, country, variant);
- if (key.length() == 0) {
- return defaultFormSet.getForm(formKey);
+ if (key.length() > 0) {
+ FormSet formSet = (FormSet)hFormSets.get(key);
+ if (formSet != null) {
+ form = formSet.getForm(formKey);
+ }
}
+ String localeKey = key;
- FormSet formSet = (FormSet) hFormSets.get(key);
- if (formSet == null) {
+ // Try language/country
+ if (form == null) {
key = buildLocale(language, country, null);
- formSet = (FormSet) hFormSets.get(key);
+ if (key.length() > 0) {
+ FormSet formSet = (FormSet)hFormSets.get(key);
+ if (formSet != null) {
+ form = formSet.getForm(formKey);
+ }
+ }
}
- if (formSet == null) {
+ // Try language
+ if (form == null) {
key = buildLocale(language, null, null);
- formSet = (FormSet) hFormSets.get(key);
+ if (key.length() > 0) {
+ FormSet formSet = (FormSet)hFormSets.get(key);
+ if (formSet != null) {
+ form = formSet.getForm(formKey);
+ }
+ }
+ }
+
+ // Try default formset
+ if (form == null) {
+ form = defaultFormSet.getForm(formKey);
+ key = "default";
}
- if (formSet == null) {
- formSet = defaultFormSet;
+ if (form == null) {
+ if (log.isWarnEnabled()) {
+ log.warn("Form '" + formKey + "' not found for locale '" +
+ localeKey + "'");
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Form '" + formKey + "' found in formset '" +
+ key + "' for locale '" + localeKey + "'");
+ }
}
- return formSet.getForm(formKey);
+
+ return form;
+
}
/**
Added: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest-config.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest-config.xml?rev=329836&view=auto
==============================================================================
--- jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest-config.xml (added)
+++ jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest-config.xml Mon Oct 31 07:12:50 2005
@@ -0,0 +1,141 @@
+<!DOCTYPE form-validation PUBLIC
+ "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
+ "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
+
+<!--
+ Each of the form's in this test config has a field with a property name of
+ "testProperty" which has a variable named "localeVar" which has the value of
+ the locale for the Form.
+
+ The "localeVar" is used to check that the form is retrieved from the expected
+ formset.
+-->
+<form-validation>
+ <global>
+ <validator name="required"
+ classname="org.apache.commons.validator.TestValidator"
+ method="validateRequired"
+ methodParams="java.lang.Object,org.apache.commons.validator.Field"
+ msg=""/>
+ </global>
+
+ <!-- default formset -->
+ <formset>
+
+ <form name="testForm_default">
+ <field property="testProperty" depends="required">
+ <var><var-name>localeVar</var-name>
+ <var-value>default</var-value>
+ </var>
+ </field>
+ </form>
+
+ <form name="testForm_language">
+ <field property="testProperty" depends="required">
+ <var><var-name>localeVar</var-name>
+ <var-value>default</var-value>
+ </var>
+ </field>
+ </form>
+
+ <form name="testForm_language_country">
+ <field property="testProperty" depends="required">
+ <var><var-name>localeVar</var-name>
+ <var-value>default</var-value>
+ </var>
+ </field>
+ </form>
+
+ <form name="testForm_language_country_variant">
+ <field property="testProperty" depends="required">
+ <var><var-name>localeVar</var-name>
+ <var-value>default</var-value>
+ </var>
+ </field>
+ </form>
+
+ </formset>
+
+ <!-- French formset -->
+ <formset language="fr">
+
+ <form name="testForm_language">
+ <field property="testProperty" depends="required">
+ <var><var-name>localeVar</var-name>
+ <var-value>fr</var-value>
+ </var>
+ </field>
+ </form>
+
+ <form name="testForm_language_country">
+ <field property="testProperty" depends="required">
+ <var><var-name>localeVar</var-name>
+ <var-value>fr</var-value>
+ </var>
+ </field>
+ </form>
+
+ <form name="testForm_language_country_variant">
+ <field property="testProperty" depends="required">
+ <var><var-name>localeVar</var-name>
+ <var-value>fr</var-value>
+ </var>
+ </field>
+ </form>
+
+ </formset>
+
+ <!-- French formset -->
+ <formset language="fr" country="FR">
+
+ <form name="testForm_language_country">
+ <field property="testProperty" depends="required">
+ <var><var-name>localeVar</var-name>
+ <var-value>fr_FR</var-value>
+ </var>
+ </field>
+ </form>
+
+ <form name="testForm_language_country_variant">
+ <field property="testProperty" depends="required">
+ <var><var-name>localeVar</var-name>
+ <var-value>fr_FR</var-value>
+ </var>
+ </field>
+ </form>
+
+ </formset>
+
+ <!-- Canadian French formset -->
+ <formset language="fr" country="CA">
+ <form name="testForm_language_country">
+ <field property="testProperty" depends="required">
+ <var><var-name>localeVar</var-name>
+ <var-value>fr_CA</var-value>
+ </var>
+ </field>
+ </form>
+
+ <form name="testForm_language_country_variant">
+ <field property="testProperty" depends="required">
+ <var><var-name>localeVar</var-name>
+ <var-value>fr_CA</var-value>
+ </var>
+ </field>
+ </form>
+ </formset>
+
+ <!-- Candaian French Variant formset -->
+ <formset language="fr" country="CA" variant="XXX">
+
+ <form name="testForm_language_country_variant">
+ <field property="testProperty" depends="required">
+ <var><var-name>localeVar</var-name>
+ <var-value>fr_CA_XXX</var-value>
+ </var>
+ </field>
+ </form>
+
+ </formset>
+
+</form-validation>
Propchange: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest-config.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest-config.xml
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest.java?rev=329836&view=auto
==============================================================================
--- jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest.java (added)
+++ jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest.java Mon Oct 31 07:12:50 2005
@@ -0,0 +1,246 @@
+/*
+ * $Id$
+ * $Rev$
+ * $Date$
+ *
+ * ====================================================================
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * 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 org.apache.commons.validator;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Locale;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.xml.sax.SAXException;
+
+/**
+ * Tests retrieving forms using different Locales.
+ */
+public class RetrieveFormTest extends TestCase {
+
+ /**
+ * Resources used for validation tests.
+ */
+ private ValidatorResources resources = null;
+
+ /**
+ * Prefix for the forms.
+ */
+ private static final String FORM_PREFIX = "testForm_";
+
+ /**
+ * Prefix for the forms.
+ */
+ private static final Locale CANADA_FRENCH_XXX = new Locale("fr", "CA", "XXX");
+
+ /**
+ * @return a test suite (<code>TestSuite</code>) that includes all methods
+ * starting with "test"
+ */
+ public static Test suite() {
+ // All methods starting with "test" will be executed in the test suite.
+ return new TestSuite(RetrieveFormTest.class);
+ }
+
+ /**
+ * Constructor for FormTest.
+ * @param name
+ */
+ public RetrieveFormTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Load <code>ValidatorResources</code> from multiple xml files.
+ */
+ protected void setUp() throws IOException, SAXException {
+ InputStream[] streams =
+ new InputStream[] {
+ this.getClass().getResourceAsStream(
+ "RetrieveFormTest-config.xml")};
+
+ this.resources = new ValidatorResources(streams);
+
+ for (int i = 0; i < streams.length; i++) {
+ streams[i].close();
+ }
+ }
+
+ /**
+ * Test a form defined only in the "default" formset.
+ */
+ public void testDefaultForm() throws ValidatorException {
+
+ String formKey = FORM_PREFIX + "default";
+
+ // *** US locale ***
+ checkForm(Locale.US, formKey, "default");
+
+ // *** French locale ***
+ checkForm(Locale.FRENCH, formKey, "default");
+
+ // *** France locale ***
+ checkForm(Locale.FRANCE, formKey, "default");
+
+ // *** Candian (English) locale ***
+ checkForm(Locale.CANADA, formKey, "default");
+
+ // *** Candian French locale ***
+ checkForm(Locale.CANADA_FRENCH, formKey, "default");
+
+ // *** Candian French Variant locale ***
+ checkForm(CANADA_FRENCH_XXX, formKey, "default");
+
+ }
+
+ /**
+ * Test a form defined in the "default" formset and formsets
+ * where just the "language" is specified.
+ */
+ public void testLanguageForm() throws ValidatorException {
+
+ String formKey = FORM_PREFIX + "language";
+
+ // *** US locale ***
+ checkForm(Locale.US, formKey, "default");
+
+ // *** French locale ***
+ checkForm(Locale.FRENCH, formKey, "fr");
+
+ // *** France locale ***
+ checkForm(Locale.FRANCE, formKey, "fr");
+
+ // *** Candian (English) locale ***
+ checkForm(Locale.CANADA, formKey, "default");
+
+ // *** Candian French locale ***
+ checkForm(Locale.CANADA_FRENCH, formKey, "fr");
+
+ // *** Candian French Variant locale ***
+ checkForm(CANADA_FRENCH_XXX, formKey, "fr");
+
+ }
+
+ /**
+ * Test a form defined in the "default" formset, formsets
+ * where just the "language" is specified and formset where
+ * the language and country are specified.
+ */
+ public void testLanguageCountryForm() throws ValidatorException {
+
+ String formKey = FORM_PREFIX + "language_country";
+
+ // *** US locale ***
+ checkForm(Locale.US, formKey, "default");
+
+ // *** French locale ***
+ checkForm(Locale.FRENCH, formKey, "fr");
+
+ // *** France locale ***
+ checkForm(Locale.FRANCE, formKey, "fr_FR");
+
+ // *** Candian (English) locale ***
+ checkForm(Locale.CANADA, formKey, "default");
+
+ // *** Candian French locale ***
+ checkForm(Locale.CANADA_FRENCH, formKey, "fr_CA");
+
+ // *** Candian French Variant locale ***
+ checkForm(CANADA_FRENCH_XXX, formKey, "fr_CA");
+
+ }
+
+ /**
+ * Test a form defined in all the formsets
+ */
+ public void testLanguageCountryVariantForm() throws ValidatorException {
+
+ String formKey = FORM_PREFIX + "language_country_variant";
+
+ // *** US locale ***
+ checkForm(Locale.US, formKey, "default");
+
+ // *** French locale ***
+ checkForm(Locale.FRENCH, formKey, "fr");
+
+ // *** France locale ***
+ checkForm(Locale.FRANCE, formKey, "fr_FR");
+
+ // *** Candian (English) locale ***
+ checkForm(Locale.CANADA, formKey, "default");
+
+ // *** Candian French locale ***
+ checkForm(Locale.CANADA_FRENCH, formKey, "fr_CA");
+
+ // *** Candian French Variant locale ***
+ checkForm(CANADA_FRENCH_XXX, formKey, "fr_CA_XXX");
+
+ }
+
+ /**
+ * Test a form not defined
+ */
+ public void testFormNotFound() throws ValidatorException {
+
+ String formKey = "INVALID_NAME";
+
+ // *** US locale ***
+ checkFormNotFound(Locale.US, formKey);
+
+ // *** French locale ***
+ checkFormNotFound(Locale.FRENCH, formKey);
+
+ // *** France locale ***
+ checkFormNotFound(Locale.FRANCE, formKey);
+
+ // *** Candian (English) locale ***
+ checkFormNotFound(Locale.CANADA, formKey);
+
+ // *** Candian French locale ***
+ checkFormNotFound(Locale.CANADA_FRENCH, formKey);
+
+ // *** Candian French Variant locale ***
+ checkFormNotFound(CANADA_FRENCH_XXX, formKey);
+
+
+ }
+
+ private void checkForm(Locale locale, String formKey, String expectedVarValue) {
+
+ // Retrieve the Form
+ Form testForm = resources.getForm(locale, formKey);
+ assertNotNull("Form '" +formKey+"' null for locale " + locale, testForm);
+
+ // Validate the expected Form is retrieved by checking the "localeVar"
+ // value of the field.
+ Field testField = (Field)testForm.getField("testProperty");
+ assertEquals("Incorrect Form '" + formKey + "' for locale '" + locale + "'",
+ expectedVarValue,
+ testField.getVarValue("localeVar"));
+ }
+
+ private void checkFormNotFound(Locale locale, String formKey) {
+
+ // Retrieve the Form
+ Form testForm = resources.getForm(locale, formKey);
+ assertNull("Form '" +formKey+"' not null for locale " + locale, testForm);
+
+ }
+
+}
Propchange: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/RetrieveFormTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorTestSuite.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorTestSuite.java?rev=329836&r1=329835&r2=329836&view=diff
==============================================================================
--- jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorTestSuite.java (original)
+++ jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/ValidatorTestSuite.java Mon Oct 31 07:12:50 2005
@@ -64,6 +64,7 @@
suite.addTestSuite(ExceptionTest.class);
suite.addTest(UrlTest.suite());
suite.addTest(VarTest.suite());
+ suite.addTest(RetrieveFormTest.suite());
return suite;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org