Java tutorial
/** * Copyright (c) 2012 Edgar Espina * This file is part of Handlebars.java. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.github.jknack.handlebars; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.junit.Test; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.jknack.handlebars.Blog.Views.Public; /** * Unit test for {@link Jackson2Helper}. * * @author edgar.espina * @since 0.1.0 */ public class Jackson2HelperTest { @Test public void toJSON() throws IOException { Handlebars handlebars = new Handlebars(); handlebars.registerHelper("@json", Jackson2Helper.INSTANCE); Template template = handlebars.compileInline("{{@json this}}"); CharSequence result = template.apply(new Blog("First Post", "...")); assertEquals("{\"title\":\"First Post\",\"body\":\"...\",\"comments\":[]}", result); } @Test public void toPrettyJSON() throws IOException { Handlebars handlebars = new Handlebars(); handlebars.registerHelper("@json", Jackson2Helper.INSTANCE); Template template = handlebars.compileInline("{{@json this pretty=true}}"); CharSequence result = template.apply(new Blog("First Post", "...")); assertEquals("{\n" + " \"title\" : \"First Post\",\n" + " \"body\" : \"...\",\n" + " \"comments\" : [ ]\n" + "}", result); } @Test public void toJSONViewInclusive() throws IOException { Handlebars handlebars = new Handlebars(); handlebars.registerHelper("@json", Jackson2Helper.INSTANCE); Template template = handlebars .compileInline("{{@json this view=\"com.github.jknack.handlebars.Blog$Views$Public\"}}"); CharSequence result = template.apply(new Blog("First Post", "...")); assertEquals("{\"title\":\"First Post\",\"body\":\"...\",\"comments\":[]}", result); } @Test public void toJSONViewExclusive() throws IOException { Handlebars handlebars = new Handlebars(); ObjectMapper mapper = new ObjectMapper(); mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false); handlebars.registerHelper("@json", new Jackson2Helper(mapper)); Template template = handlebars .compileInline("{{@json this view=\"com.github.jknack.handlebars.Blog$Views$Public\"}}"); CharSequence result = template.apply(new Blog("First Post", "...")); assertEquals("{\"title\":\"First Post\"}", result); } @Test public void toJSONAliasViewExclusive() throws IOException { Handlebars handlebars = new Handlebars(); ObjectMapper mapper = new ObjectMapper(); mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false); handlebars.registerHelper("@json", new Jackson2Helper(mapper).viewAlias("myView", Public.class)); Template template = handlebars.compileInline("{{@json this view=\"myView\"}}"); CharSequence result = template.apply(new Blog("First Post", "...")); assertEquals("{\"title\":\"First Post\"}", result); } @Test(expected = HandlebarsException.class) public void jsonViewNotFound() throws IOException { Handlebars handlebars = new Handlebars(); ObjectMapper mapper = new ObjectMapper(); mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false); handlebars.registerHelper("@json", new Jackson2Helper(mapper)); Template template = handlebars.compileInline("{{@json this view=\"missing.ViewClass\"}}"); CharSequence result = template.apply(new Blog("First Post", "...")); assertEquals("{\"title\":\"First Post\"}", result); } @Test public void escapeHtml() throws IOException { Handlebars handlebars = new Handlebars(); handlebars.registerHelper("@json", Jackson2Helper.INSTANCE); Map<String, String> model = new HashMap<String, String>(); model.put("script", "<script text=\"text/javascript\"></script>"); assertEquals("{\"script\":\"<script text=\\\"text/javascript\\\"></script>\"}", handlebars.compileInline("{{@json this}}").apply(model)); assertEquals("{\"script\":\"\\u003Cscript text=\\\"text/javascript\\\"\\u003E\\u003C/script\\u003E\"}", handlebars.compileInline("{{@json this escapeHTML=true}}").apply(model)); } }