blob: 995d5a48c6747281f23e5de2c6af6f49206b175e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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<String, String> 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<String, Cookie> 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");
result = act("locale3", null, parameters);
assertNotNull("Action should always succeed", result);
assertEquals("Test for locale", "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", "", 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<String, String> 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);
assertNotNull("Test for getSession(true)", session);
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 getSession(false)", 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());
}
}