package com.sandwich.koan; import static org.junit.Assert.fail; import java.util.Locale; import java.util.logging.Handler; import java.util.logging.LogRecord; import java.util.logging.Logger; import org.junit.After; import org.junit.Before; public class LocaleSwitchingTestCase { private Locale defaultLocale; @Before public void setUp(){ this.defaultLocale = Locale.getDefault(); } @After public void tearDown(){ Locale.setDefault(defaultLocale); } protected void assertLogged(String loggerName, final LoggerExpectation loggerExpectation) { Logger logger = Logger.getLogger(loggerName); final boolean[] called = new boolean[]{false}; final Handler handler = new Handler(){ @Override public void close() throws SecurityException {} @Override public void flush() {} @Override public void publish(final LogRecord record) { loggerExpectation.logCalled(record); called[0] = true; } }; logger.addHandler(handler); try{ loggerExpectation.invokeImplementation(); if(loggerExpectation.isLogCallRequired() && !called[0]){ fail("The logger was never called, it should have been."); } }finally{ logger.removeHandler(handler); } } protected class LoggerExpectation { protected void logCalled(LogRecord record){ fail("Unexpected logging event: "+record); } protected boolean isLogCallRequired(){ return true; } protected void invokeImplementation(){ fail("No invocation definition defined."); } } }