package org.marketcetera.util.file;
import java.io.Closeable;
import java.io.IOException;
import java.util.Iterator;
import java.util.Locale;
import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
import org.junit.Before;
import org.junit.Test;
import org.marketcetera.util.except.ExceptUtils;
import org.marketcetera.util.log.ActiveLocale;
import org.marketcetera.util.test.TestCaseBase;
import static org.junit.Assert.*;
/**
* @author tlerios@marketcetera.com
* @since 0.5.0
* @version $Id: CloseableRegistryTest.java 16154 2012-07-14 16:34:05Z colin $
*/
/* $License$ */
public class CloseableRegistryTest
extends TestCaseBase
{
private static final String TEST_CATEGORY=
CloseableRegistry.class.getName();
private static final String TEST_LOCATION=
ExceptUtils.class.getName();
private static final String TEST_MESSAGE=
"Closing failed";
private static final class OrderedCloseable
implements Closeable
{
private static int sSequence;
private int mSequence;
static void resetStaticSequence()
{
sSequence=0;
}
int getSequence()
{
return mSequence;
}
@Override
public void close()
{
mSequence=++sSequence;
}
}
private static final class ThrowingCloseable
implements Closeable
{
@Override
public void close()
throws IOException
{
throw new IOException();
}
}
@Before
public void setupCloseableRegistryTest()
{
OrderedCloseable.resetStaticSequence();
ActiveLocale.setProcessLocale(Locale.ROOT);
setLevel(TEST_CATEGORY,Level.WARN);
}
@Test
public void orderedClosing()
{
CloseableRegistry r=new CloseableRegistry();
OrderedCloseable t1=new OrderedCloseable();
r.register(t1);
OrderedCloseable t2=new OrderedCloseable();
r.register(t2);
r.close();
assertEquals(1,t2.getSequence());
assertEquals(2,t1.getSequence());
}
@Test
public void exceptionsIgnored()
{
CloseableRegistry r=new CloseableRegistry();
OrderedCloseable t1=new OrderedCloseable();
r.register(t1);
r.register(new ThrowingCloseable());
OrderedCloseable t2=new OrderedCloseable();
r.register(t2);
r.register(new ThrowingCloseable());
r.close();
assertEquals(1,t2.getSequence());
assertEquals(2,t1.getSequence());
Iterator<LoggingEvent> events=getAppender().getEvents().iterator();
assertEvent(events.next(),Level.WARN,TEST_CATEGORY,TEST_MESSAGE,
TEST_LOCATION);
assertEvent(events.next(),Level.WARN,TEST_CATEGORY,TEST_MESSAGE,
TEST_LOCATION);
assertFalse(events.hasNext());
}
}