package org.trimou.handlebars;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.trimou.AbstractTest;
import org.trimou.MustacheExceptionAssert;
import org.trimou.engine.MustacheEngine;
import org.trimou.engine.MustacheEngineBuilder;
import org.trimou.exception.MustacheProblem;
import org.trimou.handlebars.LogHelper.Level;
import org.trimou.handlebars.LogHelper.Slf4jLoggerAdapter;
/**
*
* @author Martin Kouba
*/
public class LogHelperTest extends AbstractTest {
@Test
public void testLogHelper() {
String name = "MyLogger";
TestLoggerAdapter adapter = new TestLoggerAdapter(name);
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.registerHelpers(HelpersBuilder.empty()
.add("log",
LogHelper.builder().setDefaultLevel(Level.INFO)
.setLoggerAdapter(adapter).build())
.build())
.build();
String msg = "Hello me!";
engine.compileMustache("log_helper1",
"{{log \"" + msg + "\" level=\"WARN\"}}").render(null);
assertEquals(Level.WARN, adapter.getLevels().get(0));
assertEquals(msg + " [log_helper1:1]", adapter.getMessages().get(0));
assertEquals(adapter.getParameters().get(0).length, 0);
msg = "Hello {}!";
engine.compileMustache("log_helper2", "{{log this \"me\"}}")
.render(msg);
assertEquals(Level.INFO, adapter.getLevels().get(1));
assertEquals(msg + " [log_helper2:1]", adapter.getMessages().get(1));
assertEquals(adapter.getParameters().get(1).length, 1);
engine = MustacheEngineBuilder.newBuilder()
.registerHelpers(HelpersBuilder.empty()
.add("log",
LogHelper.builder().setAppendTemplateInfo(false)
.setDefaultLevel(Level.INFO)
.setLoggerAdapter(adapter).build())
.build())
.build();
engine.compileMustache("log_helper3", "{{log \"" + msg + "\"}}")
.render(null);
assertEquals(Level.INFO, adapter.getLevels().get(2));
assertEquals(msg, adapter.getMessages().get(2));
assertEquals(adapter.getParameters().get(2).length, 0);
}
@Test
public void testLogHelperValidation() {
final MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.registerHelpers(HelpersBuilder.empty()
.add("log", LogHelper.builder().build()).build())
.build();
MustacheExceptionAssert
.expect(MustacheProblem.COMPILE_HELPER_VALIDATION_FAILURE)
.check(() -> engine.compileMustache("log_helper_validation01",
"{{#log \"Foo\"}}{{/log}}"))
.check(() -> engine.compileMustache("log_helper_validation02",
"{{log}}"));
}
private static class TestLoggerAdapter extends Slf4jLoggerAdapter {
final List<Level> levels = new ArrayList<>();
final List<String> messages = new ArrayList<>();
final List<Object[]> parameters = new ArrayList<>();
public TestLoggerAdapter(String name) {
super(name);
}
@Override
public void log(Level level, String message, Object[] params) {
super.log(level, message, params);
levels.add(level);
messages.add(message);
parameters.add(params);
}
public List<Level> getLevels() {
return levels;
}
public List<String> getMessages() {
return messages;
}
public List<Object[]> getParameters() {
return parameters;
}
}
}