final Hierarchy hierarchy = new Hierarchy();
final ByteArrayOutputStream output = new ByteArrayOutputStream();
final StreamTarget target = new StreamTarget( output, FORMATTER );
hierarchy.setDefaultLogTarget( target );
final Logger b = hierarchy.getLoggerFor( "b" );
final Logger bc = hierarchy.getLoggerFor( "b.c" );
final Logger bcd = hierarchy.getLoggerFor( "b.c.d" );
b.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bc.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bcd.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
b.setPriority( Priority.WARN );
b.debug( MSG );
assertEquals( "Priority debug output", "", getResult( output ) );
bc.debug( MSG );
assertEquals( "Priority debug output", "", getResult( output ) );
bcd.debug( MSG );
assertEquals( "Priority debug output", "", getResult( output ) );
bc.setPriority( Priority.DEBUG );
b.debug( MSG );
assertEquals( "Priority debug output", "", getResult( output ) );
bc.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bcd.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bcd.setPriority( Priority.WARN );
b.debug( MSG );
assertEquals( "Priority debug output", "", getResult( output ) );
bc.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bcd.debug( MSG );
assertEquals( "Priority debug output", "", getResult( output ) );
bcd.unsetPriority();
b.debug( MSG );
assertEquals( "Priority debug output", "", getResult( output ) );
bc.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bcd.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bc.unsetPriority();
b.debug( MSG );
assertEquals( "Priority debug output", "", getResult( output ) );
bc.debug( MSG );
assertEquals( "Priority debug output", "", getResult( output ) );
bcd.debug( MSG );
assertEquals( "Priority debug output", "", getResult( output ) );
b.unsetPriority();
b.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bc.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bcd.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bc.setPriority( Priority.WARN );
b.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bc.debug( MSG );
assertEquals( "Priority debug output", "", getResult( output ) );
bcd.debug( MSG );
assertEquals( "Priority debug output", "", getResult( output ) );
b.unsetPriority( true );
b.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bc.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
bcd.debug( MSG );
assertEquals( "Priority debug output", RMSG, getResult( output ) );
}