You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by jh...@apache.org on 2006/03/11 11:32:23 UTC
svn commit: r385050 - in /cocoon/branches/BRANCH_2_1_X:
src/test/org/apache/cocoon/acting/LocaleActionTestCase.java
src/test/org/apache/cocoon/acting/LocaleActionTestCase.xtest
src/test/org/apache/cocoon/environment/mock/MockRequest.java status.xml
Author: jheymans
Date: Sat Mar 11 02:32:21 2006
New Revision: 385050
URL: http://svn.apache.org/viewcvs?rev=385050&view=rev
Log:
<action dev="JHS" type="fix" fixes-bug="COCOON-1779" due-to="Andrew Stevens" due-to-email="ats@hotmail.com">
JUnit tests for LocaleAction.
</action>
Added:
cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/acting/LocaleActionTestCase.java
cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/acting/LocaleActionTestCase.xtest
Modified:
cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/environment/mock/MockRequest.java
cocoon/branches/BRANCH_2_1_X/status.xml
Added: cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/acting/LocaleActionTestCase.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/acting/LocaleActionTestCase.java?rev=385050&view=auto
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/acting/LocaleActionTestCase.java (added)
+++ cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/acting/LocaleActionTestCase.java Sat Mar 11 02:32:21 2006
@@ -0,0 +1,186 @@
+/*
+ * Copyright 2006 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.cocoon.acting;
+
+import java.util.Map;
+
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.cocoon.SitemapComponentTestCase;
+import org.apache.cocoon.environment.Cookie;
+import org.apache.cocoon.environment.Session;
+import org.apache.cocoon.environment.mock.MockCookie;
+import org.apache.cocoon.environment.mock.MockSession;
+
+/**
+ * JUnit-based tests for {@link LocaleAction} class.
+ *
+ * @author Andrew Stevens
+ */
+public class LocaleActionTestCase extends SitemapComponentTestCase {
+ /*
+ * Locales are looked for in following order:
+ * Locale provided as a request parameter
+ * Locale provided as a session attribute
+ * Locale provided as a cookie
+ * Locale provided using a sitemap parameter (<map:parameter name="locale" value="{1}">
+ * style parameter within the <map:act> node)
+ * Locale provided by the user agent, or server default, if use-locale == true
+ * The default locale, if specified in the action's configuration
+ * First found locale will be returned. The returned map will contain
+ * {locale}, {language}, {country} & {variant}.
+ */
+
+ /**
+ * Test of act method, of class org.apache.cocoon.acting.LocaleAction.
+ */
+ public void testFindLocale() throws Exception {
+ // Test different locations for locale info in reverse order
+ Parameters parameters = new Parameters();
+ Map result;
+
+ // 0. When no configuration, expect action to fail
+ result = act("locale0", null, parameters);
+ assertNull("Action should have failed", result);
+
+ // 1. When nothing specified, use action's default constants
+ result = act("locale1", null, parameters);
+ assertNotNull("Action should always succeed", result);
+ assertEquals("Test for locale", "en_US", result.get("locale"));
+ assertEquals("Test for language", "en", result.get("language"));
+ assertEquals("Test for country", "US", result.get("country"));
+ assertEquals("Test for variant", "", result.get("variant"));
+
+ // 2. Configuration
+ result = act("locale2", null, parameters);
+ assertNotNull("Action should always succeed", result);
+ assertEquals("Test for locale", "de_DE_EURO", result.get("locale"));
+ assertEquals("Test for language", "de", result.get("language"));
+ assertEquals("Test for country", "DE", result.get("country"));
+ assertEquals("Test for variant", "EURO", result.get("variant"));
+
+ // 3. User Agent or server default
+ getRequest().setLocale(new java.util.Locale("fr", "FR", "MAC")); // only if use-locale == true in configuration
+// getRequest().setHeader("Accept-Language", "fr-FR,fr;q=0.75,en;q=0.5");
+ result = act("locale3", null, parameters);
+ assertNotNull("Action should always succeed", result);
+ assertEquals("Test for locale", "fr_FR_MAC", result.get("locale"));
+ assertEquals("Test for language", "fr", result.get("language"));
+ assertEquals("Test for country", "FR", result.get("country"));
+ assertEquals("Test for variant", "MAC", result.get("variant"));
+
+ // 4. Sitemap parameter
+ parameters.setParameter("locale", "zh_CN_WIN");
+ result = act("locale3", null, parameters);
+ assertNotNull("Action should always succeed", result);
+ assertEquals("Test for locale", "zh_CN_WIN", result.get("locale"));
+ assertEquals("Test for language", "zh", result.get("language"));
+ assertEquals("Test for country", "CN", result.get("country"));
+ assertEquals("Test for variant", "WIN", result.get("variant"));
+
+ // 5. Cookie
+ Map cookies = getRequest().getCookieMap();
+ MockCookie mockCookie = new MockCookie();
+ mockCookie.setName("locale");
+ mockCookie.setValue("no_NO_B");
+ cookies.put("locale", mockCookie );
+ result = act("locale3", null, parameters);
+ assertNotNull("Action should always succeed", result);
+ assertEquals("Test for locale", "no_NO_B", result.get("locale"));
+ assertEquals("Test for language", "no", result.get("language"));
+ assertEquals("Test for country", "NO", result.get("country"));
+ assertEquals("Test for variant", "B", result.get("variant"));
+
+ // 6. Session attribute
+ MockSession session = (MockSession) getRequest().getSession();
+ session.setAttribute("locale", "th_TH_TH");
+ result = act("locale3", null, parameters);
+ assertNotNull("Action should always succeed", result);
+ assertEquals("Test for locale", "th_TH_TH", result.get("locale"));
+ assertEquals("Test for language", "th", result.get("language"));
+ assertEquals("Test for country", "TH", result.get("country"));
+ assertEquals("Test for variant", "TH", result.get("variant"));
+
+ // 7. Request parameter
+ getRequest().addParameter("locale", "es_MX_POSIX");
+ result = act("locale3", null, parameters);
+ assertNotNull("Action should always succeed", result);
+ assertEquals("Test for locale", "es_MX_POSIX", result.get("locale"));
+ assertEquals("Test for language", "es", result.get("language"));
+ assertEquals("Test for country", "MX", result.get("country"));
+ assertEquals("Test for variant", "POSIX", result.get("variant"));
+ }
+
+ /**
+ * Test of act method, of class org.apache.cocoon.acting.LocaleAction.
+ */
+ public void testStoreLocale() throws Exception {
+ // Test different locations for storing locale
+ Parameters parameters = new Parameters();
+ Map result;
+ Session session;
+ Cookie cookie;
+
+ // 1. Don't store
+ result = act("locale2", null, parameters);
+ assertNotNull("Action should always succeed", result);
+ assertNull("Test for request attribute", getRequest().getAttribute("locale"));
+ assertNull("Test for session", getRequest().getSession(false));
+ assertTrue("Test for cookie", getResponse().getCookies().isEmpty());
+
+ // 2. Store, but don't create session
+ result = act("locale4", null, parameters);
+ assertNotNull("Action should always succeed", result);
+ assertEquals("Test for request attribute", "no_NO_B", getRequest().getAttribute("locale"));
+ assertNull("Test for session", getRequest().getSession(false));
+ assertEquals("Test for cookie", 1, getResponse().getCookies().size());
+ cookie = (Cookie) getResponse().getCookies().toArray()[0];
+ assertEquals("Check cookie name", "locale", cookie.getName());
+ assertEquals("Check cookie value", "no_NO_B", cookie.getValue());
+
+ // 3. Store, creating session
+ getRequest().reset();
+ getRequest().clearSession();
+ getResponse().reset();
+ result = act("locale5", null, parameters);
+ assertNotNull("Action should always succeed", result);
+ assertEquals("Test for request attribute", "en_GB_SCOUSE", getRequest().getAttribute("locale"));
+ session = getRequest().getSession(false);
+ assertNotNull("Test for session", session);
+ assertEquals("Test session attribute", "en_GB_SCOUSE", session.getAttribute("locale"));
+ assertEquals("Test for cookie", 1, getResponse().getCookies().size());
+ cookie = (Cookie) getResponse().getCookies().toArray()[0];
+ assertEquals("Check cookie name", "locale", cookie.getName());
+ assertEquals("Check cookie value", "en_GB_SCOUSE", cookie.getValue());
+
+ // 4. Store, with existing session
+ getRequest().reset();
+ getRequest().clearSession();
+ getResponse().reset();
+ session = getRequest().getSession(true);
+ result = act("locale4", null, parameters);
+ assertNotNull("Action should always succeed", result);
+ assertEquals("Test for request attribute", "no_NO_B", getRequest().getAttribute("locale"));
+ session = getRequest().getSession(false);
+ assertNotNull("Test for session", session);
+ assertEquals("Test session attribute", "no_NO_B", session.getAttribute("locale"));
+ assertEquals("Test for cookie", 1, getResponse().getCookies().size());
+ cookie = (Cookie) getResponse().getCookies().toArray()[0];
+ assertEquals("Check cookie name", "locale", cookie.getName());
+ assertEquals("Check cookie value", "no_NO_B", cookie.getValue());
+ }
+
+}
Added: cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/acting/LocaleActionTestCase.xtest
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/acting/LocaleActionTestCase.xtest?rev=385050&view=auto
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/acting/LocaleActionTestCase.xtest (added)
+++ cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/acting/LocaleActionTestCase.xtest Sat Mar 11 02:32:21 2006
@@ -0,0 +1,90 @@
+<?xml version="1.0" ?>
+<!--
+ Copyright 2006 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.
+-->
+<testcase>
+ <roles>
+ <role name="org.apache.excalibur.source.SourceFactorySelector"
+ shorthand="source-factories"
+ default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"/>
+
+ <role name="org.apache.excalibur.source.SourceResolver"
+ shorthand="source-resolver"
+ default-class="org.apache.excalibur.source.impl.SourceResolverImpl"/>
+
+ <role name="org.apache.cocoon.acting.ActionSelector"
+ shorthand="actions"
+ default-class="org.apache.cocoon.components.ExtendedComponentSelector"/>
+ </roles>
+
+ <components>
+ <source-factories>
+ <component-instance class="org.apache.excalibur.source.impl.ResourceSourceFactory" name="resource"/>
+ <component-instance class="org.apache.excalibur.source.impl.URLSourceFactory" name="*"/>
+ </source-factories>
+
+ <source-resolver class="org.apache.excalibur.source.impl.SourceResolverImpl"/>
+
+ <actions logger="test">
+ <component-instance name="locale0" class="org.apache.cocoon.acting.LocaleAction"/>
+ <component-instance name="locale1" class="org.apache.cocoon.acting.LocaleAction">
+ <locale-attribute>locale</locale-attribute>
+ <use-locale>false</use-locale>
+ <default-locale/>
+ <store-in-request>false</store-in-request>
+ <create-session>false</create-session>
+ <store-in-session>false</store-in-session>
+ <store-in-cookie>false</store-in-cookie>
+ </component-instance>
+ <component-instance name="locale2" class="org.apache.cocoon.acting.LocaleAction">
+ <locale-attribute>locale</locale-attribute>
+ <use-locale>false</use-locale>
+ <default-locale language="de" country="DE" variant="EURO"/>
+ <store-in-request>false</store-in-request>
+ <create-session>false</create-session>
+ <store-in-session>false</store-in-session>
+ <store-in-cookie>false</store-in-cookie>
+ </component-instance>
+ <component-instance name="locale3" class="org.apache.cocoon.acting.LocaleAction">
+ <locale-attribute>locale</locale-attribute>
+ <use-locale>true</use-locale>
+ <default-locale language="de" country="DE" variant="WIN"/>
+ <store-in-request>false</store-in-request>
+ <create-session>false</create-session>
+ <store-in-session>false</store-in-session>
+ <store-in-cookie>false</store-in-cookie>
+ </component-instance>
+ <component-instance name="locale4" class="org.apache.cocoon.acting.LocaleAction">
+ <locale-attribute>locale</locale-attribute>
+ <use-locale>false</use-locale>
+ <default-locale language="no" country="NO" variant="B"/>
+ <store-in-request>true</store-in-request>
+ <create-session>false</create-session>
+ <store-in-session>true</store-in-session>
+ <store-in-cookie>true</store-in-cookie>
+ </component-instance>
+ <component-instance name="locale5" class="org.apache.cocoon.acting.LocaleAction">
+ <locale-attribute>locale</locale-attribute>
+ <use-locale>false</use-locale>
+ <default-locale language="en" country="GB" variant="SCOUSE"/>
+ <store-in-request>true</store-in-request>
+ <create-session>true</create-session>
+ <store-in-session>true</store-in-session>
+ <store-in-cookie>true</store-in-cookie>
+ </component-instance>
+ </actions>
+ </components>
+
+</testcase>
Modified: cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/environment/mock/MockRequest.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/environment/mock/MockRequest.java?rev=385050&r1=385049&r2=385050&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/environment/mock/MockRequest.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/test/org/apache/cocoon/environment/mock/MockRequest.java Sat Mar 11 02:32:21 2006
@@ -161,6 +161,10 @@
return locale;
}
+ public void setLocale(Locale loc) {
+ locale = loc;
+ }
+
public Enumeration getLocales() {
return Collections.enumeration(Collections.singleton(getLocale()));
}
Modified: cocoon/branches/BRANCH_2_1_X/status.xml
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/status.xml?rev=385050&r1=385049&r2=385050&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/status.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/status.xml Sat Mar 11 02:32:21 2006
@@ -180,6 +180,9 @@
<release version="@version@" date="@date@">
-->
<release version="2.1.9" date="TBD">
+ <action dev="JHS" type="fix" fixes-bug="COCOON-1779" due-to="Andrew Stevens" due-to-email="ats@hotmail.com">
+ JUnit tests for LocaleAction.
+ </action>
<action dev="JHS" type="fix" fixes-bug="COCOON-1335" due-to="Michal Durdina" due-to-email="durdina@asset.sk">
Removed dependency of RoleFilterTransformer on buggy FilterTransformer.
Also thanks to Andrew Stevens for updating the patch against recent branch and Doug Bennet for the reminder.