package com.github.jknack.handlebars.i282; 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 Issue282 extends AbstractTest { @Test(expected = HandlebarsException.class) public void missingSubexpression() throws Exception { Hash helpers = $( "vowels", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return context.toString(); } }); shouldCompileTo("{{vowels (a)}}", $, helpers, ""); } @Test public void subexpression() throws Exception { Hash helpers = $("inner-helper", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return options.helperName + "-" + context; } }, "outer-helper", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return context.toString() + options.params[0]; } }); shouldCompileTo("{{outer-helper (inner-helper 'abc') 'def'}}", $, helpers, "inner-helper-abcdef"); } @Test public void vowels() throws Exception { Hash helpers = $( "a", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return options.helperName + context; } }, "e", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return options.helperName + context; } }, "i", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return options.helperName + context; } }, "o", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return options.helperName + context; } }, "u", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return options.helperName; } }, "vowels", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return context.toString(); } }); shouldCompileTo("{{vowels (a (e (i (o (u)))))}}", $, helpers, "aeiou"); } @Test public void vowelsWithParams() throws Exception { Hash helpers = $( "a", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return options.helperName + ":" + options.params[0] + context; } }, "e", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return options.helperName + ":" + options.params[0] + context; } }, "i", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return options.helperName + ":" + options.params[0] + context; } }, "o", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return options.helperName + ":" + options.params[0] + context; } }, "u", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return options.helperName + ":" + context; } }, "vowels", new Helper<Object>() { @Override public Object apply(final Object context, final Options options) throws IOException { return context.toString(); } }); shouldCompileTo("{{vowels (a (e (i (o (u 5) 4) 3) 2) 1)}}", $, helpers, "a:1e:2i:3o:4u:5"); } }