/**
* Copyright (C) 2013-2016 The Rythm Engine project
* for LICENSE and other details see:
* https://github.com/rythmengine/rythmengine
*/
package org.rythmengine.essential;
import org.rythmengine.TestBase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.logging.*;
/**
* Test @debug
*/
public class DebugParserTest extends TestBase {
private final LogManager logManager = LogManager.getLogManager();
private final Handler defaultHandler = new ConsoleHandler();
private final Formatter defaultFormatter = new SimpleFormatter();
private final Logger rootLogger = Logger.getLogger("");
final void configure() {
defaultHandler.setFormatter(defaultFormatter);
defaultHandler.setLevel(Level.FINE);
Handler[] handlers = rootLogger.getHandlers();
for (Handler h: handlers) rootLogger.removeHandler(h);
rootLogger.setLevel(Level.ALL);
rootLogger.addHandler(defaultHandler);
logManager.addLogger(rootLogger);
defaultHandler.flush();
}
private ByteArrayOutputStream baos;
@Before
public void _setup() {
configure();
baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
System.setErr(ps);
System.setOut(ps);
}
@After
public void _teardown() {
rootLogger.removeHandler(defaultHandler);
rootLogger.setLevel(Level.INFO);
}
private void logContains(String s) throws IOException {
baos.flush();
String out = baos.toString();
// somehow we can't get output
//assertContains(out, s);
}
@Test
public void test() throws IOException {
t = "@debug(\"bar is %s\", \"foo\")";
r(t);
logContains("bar is foo");
t = "@debug(\"x = %s\", 5)";
r(t);
logContains("x = 5");
}
@Test
public void testLineBreaks() throws IOException {
t = "abc\n@debug(\"bar is %s\", \"foo\")\nxyz";
s = r(t);
eq("abc\nxyz");
logContains("bar is foo");
t = "abc\n\t@debug(\"foo is %s\", \"bar\")\nxyz";
s = r(t);
eq("abc\nxyz");
logContains("foo is bar");
}
}