/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestRifeConfig.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.config;
import com.uwyn.rife.config.exceptions.DateFormatInitializationException;
import com.uwyn.rife.ioc.HierarchicalProperties;
import com.uwyn.rife.rep.Participant;
import com.uwyn.rife.rep.Rep;
import com.uwyn.rife.rep.Repository;
import com.uwyn.rife.rep.SingleObjectParticipant;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.text.DateFormat;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
public class TestRifeConfig extends TestCase
{
private Repository mDefaultRep = null;
public TestRifeConfig(String name)
{
super(name);
}
public void setUp()
{
mDefaultRep = Rep.getDefaultRepository();
}
public void tearDown()
{
Rep.setDefaultRepository(mDefaultRep);
}
public void testShortDateFormat()
throws Exception
{
switchLocale(USLocaleConfig.class);
DateFormat sf = RifeConfig.Tools.getDefaultShortDateFormat();
String formatted = sf.format(new GregorianCalendar(2004, 7, 31, 15, 53).getTime());
assertEquals(formatted, "8/31/04");
switchLocale(BelgiumNLLocaleConfig.class);
sf = RifeConfig.Tools.getDefaultShortDateFormat();
formatted = sf.format(new GregorianCalendar(2004, 7, 31, 15, 53).getTime());
assertEquals(formatted, "31/08/04");
switchLocale(GeneralESLocaleConfig.class);
sf = RifeConfig.Tools.getDefaultShortDateFormat();
formatted = sf.format(new GregorianCalendar(2004, 7, 31, 15, 53).getTime());
assertEquals(formatted, "31/08/04");
switchLocale(FormattedDateFormatConfig.class);
sf = RifeConfig.Tools.getDefaultShortDateFormat();
formatted = sf.format(new GregorianCalendar(2004, 7, 31, 15, 53).getTime());
assertEquals(formatted, "Tue, Aug 31, 2004");
try
{
switchLocale(BadlyFormattedDateFormatConfig.class);
sf = RifeConfig.Tools.getDefaultShortDateFormat();
formatted = sf.format(new GregorianCalendar(2004, 7, 31, 15, 53).getTime());
assertFalse(true);
}
catch (DateFormatInitializationException e)
{
assertTrue(true);
}
}
public void testLongDateFormat()
throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException
{
switchLocale(USLocaleConfig.class);
DateFormat sf = RifeConfig.Tools.getDefaultLongDateFormat();
String formatted = sf.format(new GregorianCalendar(2004, 7, 31, 15, 53).getTime());
assertEquals(formatted, "Aug 31, 2004 3:53 PM");
switchLocale(BelgiumNLLocaleConfig.class);
sf = RifeConfig.Tools.getDefaultLongDateFormat();
formatted = sf.format(new GregorianCalendar(2004, 7, 31, 15, 53).getTime());
assertEquals(formatted, "31-aug-2004 15:53");
switchLocale(GeneralESLocaleConfig.class);
sf = RifeConfig.Tools.getDefaultLongDateFormat();
formatted = sf.format(new GregorianCalendar(2004, 7, 31, 15, 53).getTime());
assertEquals(formatted, "31-ago-2004 15:53");
switchLocale(FormattedDateFormatConfig.class);
sf = RifeConfig.Tools.getDefaultLongDateFormat();
formatted = sf.format(new GregorianCalendar(2004, 7, 31, 15, 53).getTime());
assertEquals(formatted, "Tue, 31 Aug 2004 15:53:00");
try
{
switchLocale(BadlyFormattedDateFormatConfig.class);
sf = RifeConfig.Tools.getDefaultLongDateFormat();
formatted = sf.format(new GregorianCalendar(2004, 7, 31, 15, 53).getTime());
assertFalse(true);
}
catch (DateFormatInitializationException e)
{
assertTrue(true);
}
}
private void switchLocale(Class klazz)
throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException
{
MockRepository rep = new MockRepository();
rep.addParticipant("ParticipantConfig", klazz);
Rep.setDefaultRepository(rep);
}
public class USLocaleConfig extends SingleObjectParticipant
{
public Object getObject()
{
Config config = new Config();
config.setParameter(RifeConfig.Tools.PARAM_L10N_DEFAULT_COUNTRY, "US");
config.setParameter(RifeConfig.Tools.PARAM_L10N_DEFAULT_LANGUAGE, "EN");
return config;
}
}
public class BelgiumNLLocaleConfig extends SingleObjectParticipant
{
public Object getObject()
{
Config config = new Config();
config.setParameter(RifeConfig.Tools.PARAM_L10N_DEFAULT_COUNTRY, "BE");
config.setParameter(RifeConfig.Tools.PARAM_L10N_DEFAULT_LANGUAGE, "NL");
return config;
}
}
public class GeneralESLocaleConfig extends SingleObjectParticipant
{
public Object getObject()
{
Config config = new Config();
config.setParameter(RifeConfig.Tools.PARAM_L10N_DEFAULT_LANGUAGE, "ES");
return config;
}
}
public class FormattedDateFormatConfig extends SingleObjectParticipant
{
public Object getObject()
{
Config config = new Config();
config.setParameter(RifeConfig.Tools.PARAM_L10N_DEFAULT_SHORT_DATEFORMAT, "EEE, MMM d, yyyy");
config.setParameter(RifeConfig.Tools.PARAM_L10N_DEFAULT_LONG_DATEFORMAT, "EEE, d MMM yyyy HH:mm:ss");
return config;
}
}
public class BadlyFormattedDateFormatConfig extends SingleObjectParticipant
{
public Object getObject()
{
Config config = new Config();
config.setParameter(RifeConfig.Tools.PARAM_L10N_DEFAULT_SHORT_DATEFORMAT, "wwww 999 uuuu");
config.setParameter(RifeConfig.Tools.PARAM_L10N_DEFAULT_LONG_DATEFORMAT, "vvvv, 82.2 cccc");
return config;
}
}
public class MockRepository implements Repository
{
private Map mParticipants = new HashMap();
public MockRepository()
{
}
public void addParticipant(String name, Class klazz)
throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException
{
Constructor localeConstructor = klazz.getDeclaredConstructor(new Class[] {TestRifeConfig.class});
TestRifeConfig t = new TestRifeConfig("Workaround for inner class instanciation");
mParticipants.put(name, localeConstructor.newInstance(new Object[] { t }));
}
public boolean hasParticipant(String name)
{
return mParticipants.containsKey(name);
}
public Participant getParticipant(String name)
{
return (Participant)mParticipants.get(name);
}
public Collection<? extends Participant> getParticipants(String name)
{
return mParticipants.values();
}
public boolean isFinished() { return true; }
public void cleanup() {}
public HierarchicalProperties getProperties()
{
HierarchicalProperties properties = new HierarchicalProperties();
for (Map.Entry property : System.getProperties().entrySet())
{
properties.put((String)property.getKey(), property.getValue());
}
return properties;
}
public Object getContext()
{
return null;
}
}
}