/******************************************************************************* * Gisgraphy Project * * 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. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA * * Copyright 2008 Gisgraphy project * David Masclet <davidmasclet@gisgraphy.com> * * *******************************************************************************/ /** * */ package com.gisgraphy.domain.valueobject; import java.util.Locale; import java.util.ResourceBundle; import static org.junit.Assert.*; import javax.annotation.Resource; import org.apache.commons.lang.RandomStringUtils; import org.junit.Test; import org.springframework.context.i18n.LocaleContextHolder; import com.gisgraphy.domain.geoloc.entity.Country; import com.gisgraphy.domain.geoloc.entity.GisFeature; import com.gisgraphy.domain.repository.IGisFeatureDao; import com.gisgraphy.fulltext.AbstractIntegrationHttpSolrTestCase; import com.gisgraphy.helper.GeolocHelper; public class FeatureCodeTest extends AbstractIntegrationHttpSolrTestCase { @Resource IGisFeatureDao gisFeatureDao; private static Locale localeaa = new Locale("aa"); private static Locale localeaacc = new Locale("aa", "dd"); private static Locale localebb = new Locale("bb"); private static Locale localebbdd = new Locale("bb", "dd"); private static Locale localeWithOutBundle = new Locale("ee", "ff"); @Test public void testGetLocalizedDescriptionShouldReturnLocalizedDescription() { assertEquals("The bundle should ignore the country if a bundle with only the language exists", ResourceBundle.getBundle(Constants.FEATURECODE_BUNDLE_KEY, localeaa).getString(FeatureCode.P_PPL.toString()), FeatureCode.P_PPL.getLocalizedDescription(localeaacc)); assertEquals("The bundle should take the country and language if a bundle with both exists", ResourceBundle.getBundle(Constants.FEATURECODE_BUNDLE_KEY, localebbdd).getString(FeatureCode.P_PPL.toString()), FeatureCode.P_PPL.getLocalizedDescription(localebbdd)); assertEquals("The bundle should be able to only take the language into account", ResourceBundle.getBundle(Constants.FEATURECODE_BUNDLE_KEY, localeaa).getString("P_PPL"), FeatureCode.P_PPL.getLocalizedDescription(localeaa)); // null Locale savedcontext = LocaleContextHolder.getLocale(); LocaleContextHolder.setLocale(localeaa);// force an existing // translation bundle assertEquals("if the locale is null, the LocaleContextHolder one should be used", FeatureCode.P_PPL.getLocalizedDescription(LocaleContextHolder.getLocale()), FeatureCode.P_PPL.getLocalizedDescription(null)); LocaleContextHolder.setLocale(savedcontext); // no bundle for the specified Locale LocaleContextHolder.setLocale(localeaa);// force an existing // translation bundle assertEquals("If no bundle for the specified locale exists the thread one should be used", FeatureCode.P_PPL.getLocalizedDescription(LocaleContextHolder.getLocale()), FeatureCode.P_PPL.getLocalizedDescription(localeWithOutBundle)); LocaleContextHolder.setLocale(savedcontext); // no bundle exists for the thread locale LocaleContextHolder.setLocale(localeWithOutBundle); assertEquals("If no bundle for the specified locale exists and the default" +" thread one does not exists, the locale.getDefault should be used : " + Locale.getDefault(), FeatureCode.P_PPL.getLocalizedDescription(Locale.getDefault()), FeatureCode.P_PPL.getLocalizedDescription(localeWithOutBundle)); // restore LocaleContextHolder.setLocale(savedcontext); // no bundle exists for the thread locale and default one, Locale savedDefault = Locale.getDefault(); LocaleContextHolder.setLocale(localeWithOutBundle); Locale.setDefault(localeWithOutBundle); assertEquals("If no bundle for the specified locale exists and no bundle for the default " +"thread one exists and no bundle for the default one exists," +" the DEFAULT_FALLBACK_LOCALE should be used : " + FeatureCode.DEFAULT_FALLBACK_LOCALE, FeatureCode.P_PPL.getLocalizedDescription(localeWithOutBundle), FeatureCode.P_PPL.getLocalizedDescription(null)); // restore Locale.setDefault(savedDefault); LocaleContextHolder.setLocale(savedcontext); // existing locale and non existing translation assertEquals("if no translation for the locale is found," +" default translation should be used : " + FeatureCode.DEFAULT_TRANSLATION, FeatureCode.DEFAULT_TRANSLATION, FeatureCode.UNKNOW.getLocalizedDescription(localeaa));// } @Test public void testAllPlaceTypeShouldbeMappedWithHibernate() { Long count = 1L; for (FeatureCode featureCode : FeatureCode.values()) { Object feature = featureCode.getObject(); if (feature instanceof Country) { Country typedFeature = (Country) feature; typedFeature.setIso3166Alpha2Code(RandomStringUtils.random(2)); typedFeature.setIso3166Alpha3Code(RandomStringUtils.random(3)); typedFeature.setIso3166NumericCode(count.intValue()); typedFeature.setFeatureId(count++); typedFeature.setLocation(GeolocHelper.createPoint(1.5F, 3.2F)); typedFeature.setName("name" + count); typedFeature.setSource(GISSource.PERSONAL); gisFeatureDao.save(typedFeature); } else { GisFeature typedFeature = (GisFeature) feature; typedFeature.setFeatureId(count++); typedFeature.setLocation(GeolocHelper.createPoint(1.5F, 3.2F)); typedFeature.setName("name" + count); typedFeature.setSource(GISSource.PERSONAL); gisFeatureDao.save(typedFeature); } } } }