package com.workshare.msnos.soup; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import com.workshare.msnos.soup.ShutdownHooks.Hook; public class ShutdownHooksTest { private StringBuffer trace = new StringBuffer(); @Before public void cleanup() { ShutdownHooks.clearAll(); } @Test public void shouldExecuteWithPriority() { ShutdownHooks.addHook(newHook("one", 100)); ShutdownHooks.addHook(newHook("two", 0)); ShutdownHooks.addHook(newHook("tre", -100)); ShutdownHooks.onShutdown(); assertEquals("onetwotre", trace.toString()); } @Test public void shouldAllowToRemoveHooks() { ShutdownHooks.addHook(newHook("one", 100)); ShutdownHooks.addHook(newHook("two", 0)); Hook hook = ShutdownHooks.addHook(newHook("tre", -100)); ShutdownHooks.removeHook(hook); ShutdownHooks.onShutdown(); final String tracestring = trace.toString(); assertTrue(tracestring.contains("one")); assertTrue(tracestring.contains("two")); assertFalse(tracestring.contains("tre")); } private Hook newHook(final String name, final int prio) { return new Hook() { @Override public void run() { trace.append(name); } @Override public String name() { return name; } @Override public int priority() { return prio; }}; } }