/**
* Licensed to The Apereo Foundation under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
*
* The Apereo Foundation licenses this file to you under the Educational
* Community 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://opensource.org/licenses/ecl2.txt
*
* 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.opencastproject.adminui.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.opencastproject.adminui.api.LanguageService;
import org.opencastproject.adminui.util.Language;
import org.opencastproject.adminui.util.TestClassPathInspector;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class LanguageServiceTest {
private LanguageServiceImpl languageService;
@Before
public void setUp() {
TestClassPathInspector classPathInspector = new TestClassPathInspector();
languageService = new LanguageServiceImpl();
languageService.setClassPathInspector(classPathInspector);
languageService.setLanguageFileFolder(LanguageService.TRANSLATION_FILES_PATH);
}
@Test
public void testIllegalPath() {
languageService.setLanguageFileFolder("quark");
testNumberOfLanguages(0);
}
@Test
public void testActivatorPath() {
testNumberOfLanguages(2);
}
@Test
public void testLanguageFormat() {
List<Language> availableLanguages = listAvailableLanguages();
for (Language lang : availableLanguages) {
assertNotNull(lang.getCode());
assertNotNull(lang.getDisplayName());
}
}
private void testNumberOfLanguages(int expectedNumber) {
List<Language> availableLanguages = listAvailableLanguages();
assertEquals(expectedNumber, availableLanguages.size());
}
private List<Language> listAvailableLanguages() {
List<Language> availableLanguages = languageService.getAvailableLanguages();
return availableLanguages;
}
@Test
public void testLanguageRegex() {
testPattern("lang-de_DE.json", "de");
}
@Test
public void testLanguageRegexFrench() {
testPattern("lang-fr_FR.json", "fr");
}
@Test
public void testIsoLanguage() {
testPattern("lang-aa.json", "aa");
}
protected void testPattern(String filename, String expected) {
Pattern p = Pattern.compile(LanguageService.LANGUAGE_PATTERN);
Matcher matcher = p.matcher(filename);
assertTrue(matcher.matches());
assertEquals(1, matcher.groupCount());
assertEquals(expected, matcher.group(1));
}
@Test
public void testLocaleExtraction() {
testLocale("de", "lang-de_DE.json");
}
@Test
public void testDefaultLanguage() {
testLocale("en", "quark");
}
@Test
public void testFrench() {
testLocale("fr", "lang-fr_FR.json");
}
@Test
public void testItalian() {
testLocale("it", "lang-it_IT.json");
}
@Test
public void testAllLanguages() {
Locale[] locales = Locale.getAvailableLocales();
for (Locale expected : locales) {
if (!"".equals(expected.getLanguage())) {
testLocale(expected.getLanguage(), "lang-" + expected.getLanguage() + ".json");
}
}
}
private void testLocale(String expectedLanguageName, String filename) {
String localeFromFilename = localeFromFilename(filename);
assertEquals(expectedLanguageName, localeFromFilename);
}
private String localeFromFilename(String translationFileName) {
Pattern p = Pattern.compile(LanguageService.LANGUAGE_PATTERN);
Matcher matcher = p.matcher(translationFileName);
if (matcher.matches()) {
return matcher.group(1);
}
return "en";
}
@Test
public void simpleTestFindBestLanguage() {
LanguageServiceTestExecutor test = new LanguageServiceTestExecutor(languageService);
test.setClientsAcceptableLanguages(Locale.GERMAN);
test.setServersAvailableLanguages("lang-en.json", "lang-de_DE.json");
test.execute("de_DE", "en_US");
}
@Test
public void testFallbackLanguageIsEnglish() {
LanguageServiceTestExecutor test = new LanguageServiceTestExecutor(languageService);
test.setClientsAcceptableLanguages(Locale.GERMAN);
test.setServersAvailableLanguages("lang-en_US.json", "lang-de_DE.json");
test.execute("de_DE", "en_US");
}
@Test
public void testBasilsBrowser() {
LanguageServiceTestExecutor test = new LanguageServiceTestExecutor(languageService);
test.setClientsAcceptableLanguages(Locale.GERMAN, Locale.US, Locale.ENGLISH);
test.setServersAvailableLanguages("lang-en_US.json", "lang-de_DE.json", "lang-en.json", "lang-jp_JP.json");
test.execute("de_DE", "en_US");
}
@Test
public void moreChoiceTestFindBestLanguage() {
LanguageServiceTestExecutor test = new LanguageServiceTestExecutor(languageService);
test.setClientsAcceptableLanguages(Locale.GERMAN, Locale.FRENCH, Locale.ITALIAN);
test.setServersAvailableLanguages("lang-en.json", "lang-de_CH.json");
test.execute("de_CH", "en_US");
}
@Test
public void shortLanguageNameTestFindBestLanguage() {
LanguageServiceTestExecutor test = new LanguageServiceTestExecutor(languageService);
test.setClientsAcceptableLanguages(Locale.GERMAN, Locale.FRENCH, Locale.ITALIAN);
test.setServersAvailableLanguages("lang-en.json", "lang-de.json");
test.execute("de", "en_US");
}
@Test
public void findDefaultBestLanguageTest() {
LanguageServiceTestExecutor test = new LanguageServiceTestExecutor(languageService);
test.setClientsAcceptableLanguages(Locale.GERMAN, Locale.FRENCH, Locale.ITALIAN);
test.setServersAvailableLanguages("tr", "cz", "jp");
test.execute("en_US", "en_US");
}
@Test
public void testFallbackLanguage() {
LanguageServiceTestExecutor test = new LanguageServiceTestExecutor(languageService);
test.setClientsAcceptableLanguages(Locale.GERMAN, Locale.FRENCH, Locale.ITALIAN);
test.setServersAvailableLanguages("de", "it", "jp");
test.execute("de", "en_US");
}
}