package com.github.jknack.handlebars.springmvc; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import java.io.IOException; import java.util.Locale; import org.junit.ComparisonFailure; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.servlet.View; import com.github.jknack.handlebars.Handlebars; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {HandlebarsApp.class }) public class HandlebarsViewResolverIntegrationTest { @Autowired @Qualifier("viewResolver") HandlebarsViewResolver viewResolver; @Autowired @Qualifier("viewResolverWithoutMessageHelper") HandlebarsViewResolver viewResolverWithoutMessageHelper; @Autowired @Qualifier("parameterizedHandlebarsViewResolver") HandlebarsViewResolver parameterizedHandlebarsViewResolver; @Test public void getHandlebars() throws Exception { assertNotNull(viewResolver); assertNotNull(viewResolver.getHandlebars()); } @Test public void resolveView() throws Exception { assertNotNull(viewResolver); View view = viewResolver.resolveViewName("template", Locale.getDefault()); assertNotNull(view); assertEquals(HandlebarsView.class, view.getClass()); } @Test public void resolveViewWithParameterized() throws Exception { assertNotNull(parameterizedHandlebarsViewResolver); View view = parameterizedHandlebarsViewResolver.resolveViewName("template", Locale.getDefault()); assertNotNull(view); assertEquals(HandlebarsView.class, view.getClass()); } @Test public void resolveViewWithFallback() throws Exception { try { assertNotNull(viewResolver); viewResolver.setFailOnMissingFile(false); View view = viewResolver.resolveViewName("invalidView", Locale.getDefault()); assertNull(view); } finally { viewResolver.setFailOnMissingFile(true); } } @Test public void resolveViewWithFallbackParameterized() throws Exception { try { assertNotNull(parameterizedHandlebarsViewResolver); parameterizedHandlebarsViewResolver.setFailOnMissingFile(false); View view = parameterizedHandlebarsViewResolver.resolveViewName("invalidView", Locale.getDefault()); assertNull(view); } finally { parameterizedHandlebarsViewResolver.setFailOnMissingFile(true); } } @Test(expected = IOException.class) public void failToResolve() throws Exception { try { assertNotNull(viewResolver); viewResolver.setFailOnMissingFile(true); viewResolver.resolveViewName("invalidView", Locale.getDefault()); } finally { viewResolver.setFailOnMissingFile(true); } } @Test(expected = IOException.class) public void failToResolveParameterized() throws Exception { try { assertNotNull(parameterizedHandlebarsViewResolver); parameterizedHandlebarsViewResolver.setFailOnMissingFile(true); parameterizedHandlebarsViewResolver.resolveViewName("invalidView", Locale.getDefault()); } finally { parameterizedHandlebarsViewResolver.setFailOnMissingFile(true); } } @Test(expected = IllegalStateException.class) public void getHandlebarsFail() throws Exception { assertNotNull(new HandlebarsViewResolver().getHandlebars()); } @Test public void messageHelper() throws Exception { assertNotNull(viewResolver); Handlebars handlebars = viewResolver.getHandlebars(); assertEquals("Handlebars Spring MVC!", handlebars.compileInline("{{message \"hello\"}}").apply(new Object())); assertEquals("Handlebars Spring MVC!", handlebars.compileInline("{{i18n \"hello\"}}").apply(new Object())); } @Test public void messageHelperWithParams() throws Exception { assertNotNull(viewResolver); Handlebars handlebars = viewResolver.getHandlebars(); assertEquals("Hello Handlebars!", handlebars.compileInline("{{message \"hello.0\" \"Handlebars\"}}").apply(new Object())); assertEquals("Hello Handlebars!", handlebars.compileInline("{{i18n \"hello.0\" \"Handlebars\"}}").apply(new Object())); assertEquals("Hello Spring MVC!", handlebars.compileInline("{{message \"hello.0\" \"Spring MVC\"}}").apply(new Object())); assertEquals("Hello Spring MVC!", handlebars.compileInline("{{i18n \"hello.0\" \"Spring MVC\"}}").apply(new Object())); } @Test public void i18nJs() throws Exception { // maven classpath String expected = "<script type='text/javascript'>\n" + " /* Spanish (Argentina) */\n" + " I18n.translations = I18n.translations || {};\n" + " I18n.translations['es_AR'] = {\n" + " \"hello\": \"Handlebars Spring MVC!\",\n" + " \"hello.0\": \"Hello {{arg0}}!\"\n" + " };\n" + "</script>\n"; assertNotNull(viewResolver); Handlebars handlebars = viewResolver.getHandlebars(); String output = handlebars.compileInline("{{i18nJs \"es_AR\"}}").apply(new Object()); try { // maven classpath assertEquals(expected, output); } catch (ComparisonFailure ex) { try { // eclipse classpath assertEquals("<script type='text/javascript'>\n" + " /* Spanish (Argentina) */\n" + " I18n.translations = I18n.translations || {};\n" + " I18n.translations['es_AR'] = {\n" + " \"hello\": \"Hola\",\n" + " \"hello.0\": \"Hello {{arg0}}!\"\n" + " };\n" + "</script>\n", output); } catch (ComparisonFailure java18) { // java 1.8 assertEquals("<script type='text/javascript'>\n" + " /* Spanish (Argentina) */\n" + " I18n.translations = I18n.translations || {};\n" + " I18n.translations['es_AR'] = {\n" + " \"hello.0\": \"Hello {{arg0}}!\",\n" + " \"hello\": \"Handlebars Spring MVC!\"\n" + " };\n" + "</script>\n", output); } } } @Test public void messageHelperWithDefaultValue() throws Exception { assertNotNull(viewResolver); Handlebars handlebars = viewResolver.getHandlebars(); assertEquals("hey", handlebars.compileInline("{{message \"hi\" default='hey'}}").apply(new Object())); } @Test public void customHelper() throws Exception { assertNotNull(viewResolver); Handlebars handlebars = viewResolver.getHandlebars(); assertEquals("Spring Helper", handlebars.compileInline("{{spring}}").apply(new Object())); } @Test public void setCustomHelper() throws Exception { assertNotNull(viewResolver); Handlebars handlebars = viewResolver.getHandlebars(); assertEquals("Spring Helper", handlebars.compileInline("{{setHelper}}").apply(new Object())); } @Test public void helperSource() throws Exception { assertNotNull(viewResolver); Handlebars handlebars = viewResolver.getHandlebars(); assertEquals("helper source!", handlebars.compileInline("{{helperSource}}").apply(new Object())); } @Test public void viewResolverWithMessageHelper() throws Exception { assertNotNull(viewResolver); assertNotNull(viewResolver.helper("message")); } @Test public void viewResolverWithoutMessageHelper() throws Exception { assertNotNull(viewResolverWithoutMessageHelper); assertNull(viewResolverWithoutMessageHelper.helper("message")); } }