package handlebarsjs.spec;
import java.io.IOException;
import org.junit.Test;
import com.github.jknack.handlebars.AbstractTest;
import com.github.jknack.handlebars.HandlebarsException;
import com.github.jknack.handlebars.Helper;
import com.github.jknack.handlebars.Options;
public class StringLiteralParametersTest extends AbstractTest {
@Test
public void simpleLiteralWork() throws IOException {
String string = "Message: {{hello \"world\" 12 true false}}";
Hash helpers = $("hello", new Helper<Object>() {
@Override
public Object apply(final Object context, final Options options) throws IOException {
return "Hello " + context + " " + options.param(0) + " times: " + options.param(1)
+ " " + options.param(2);
}
});
shouldCompileTo(string, $, helpers, "Message: Hello world 12 times: true false",
"template with a simple String literal");
}
@Test(expected = HandlebarsException.class)
public void usingQuoteInTheMiddleOfParameterRaisesAnError() throws IOException {
shouldCompileTo("Message: {{hello wo\"rld\"}}", $, null);
}
@Test
public void escapingAStringIsPossible() throws IOException {
String string = "Message: {{{hello \"\\\"world\\\"\"}}}";
Hash helpers = $("hello", new Helper<String>() {
@Override
public Object apply(final String param, final Options options) throws IOException {
return "Hello " + param;
}
});
shouldCompileTo(string, $, helpers, "Message: Hello \"world\"",
"template with an escaped String literal");
}
@Test
public void itWorksWithSingleQoutes() throws IOException {
String string = "Message: {{{hello \"Alan\'s world\"}}}";
Hash helpers = $("hello", new Helper<String>() {
@Override
public Object apply(final String param, final Options options) throws IOException {
return "Hello " + param;
}
});
shouldCompileTo(string, $, helpers, "Message: Hello Alan's world", "template with a ' mark");
}
@Test
public void simpleMultiParamsWork() throws IOException {
String string = "Message: {{goodbye cruel world}}";
String hash = "{cruel: cruel, world: world}";
Hash helpers = $("goodbye", new Helper<String>() {
@Override
public Object apply(final String cruel, final Options options) throws IOException {
return "Goodbye " + cruel + " " + options.get("world");
}
});
shouldCompileTo(string, hash, helpers, "Message: Goodbye cruel world",
"regular helpers with multiple params");
}
@Test
public void blockMultiParamsWork() throws IOException {
String string = "Message: {{#goodbye cruel world}}{{greeting}} {{adj}} {{noun}}{{/goodbye}}";
String hash = "{cruel: cruel, world: world}";
Hash helpers = $("goodbye", new Helper<String>() {
@Override
public Object apply(final String cruel, final Options options) throws IOException {
return options.fn($("greeting", "Goodbye", "adj", "cruel", "noun", "world"));
}
});
shouldCompileTo(string, hash, helpers, "Message: Goodbye cruel world",
"block helpers with multiple params");
}
}