Package com.github.mustachejava

Source Code of com.github.mustachejava.MapNonGetMethodsTest

package com.github.mustachejava;

import com.github.mustachejava.reflect.ReflectionObjectHandler;
import com.github.mustachejava.reflect.SimpleObjectHandler;
import org.junit.Before;
import org.junit.Test;

import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

import static org.junit.Assert.assertEquals;

public class MapNonGetMethodsTest {
 
  /**
   * Extended reflection handler that can access map methods.
   */
  private class MapMethodReflectionHandler extends ReflectionObjectHandler {
    @Override
    protected boolean areMethodsAccessible(Map<?, ?> map) {
      return true;
    }
  }
 
  private class SimpleMapMethodHandler extends SimpleObjectHandler {
    @Override
    protected boolean areMethodsAccessible(Map<?, ?> map) {
      return true;
    }
  }

  private static final String TEMPLATE = "{{empty}}";
  private static final String TEMPLATE2 = "{{#entrySet}}" +
          "{{key}}={{value}}\n" +
          "{{/entrySet}}";

  private DefaultMustacheFactory factory;

  @Before
  public void setUp() {
    factory = new DefaultMustacheFactory();
  }

  @Test
  public void testKeyValues() {
    Map<String, String> model = new TreeMap<String, String>() {{
      put("test", "testvalue");
      put("key", "keyvalue");
    }};

    Reader reader = new StringReader(TEMPLATE2);
    factory.setObjectHandler(new MapMethodReflectionHandler());
    Mustache mustache = factory.compile(reader, "template");

    verifyOutput("key=keyvalue\ntest=testvalue\n", model, mustache);
  }

  @Test
  public void testMethodAccessDisallowed() {
    Map<String, Object> model = new HashMap<String, Object>();
   
    Reader reader = new StringReader(TEMPLATE);
    Mustache mustache = factory.compile(reader, "template");
   
    verifyOutput("", model, mustache);
  }
 
  @Test
  public void testMethodAccessAllowed() {
    Map<String, Object> model = new HashMap<String, Object>();
   
    factory.setObjectHandler(new MapMethodReflectionHandler());
    Reader reader = new StringReader(TEMPLATE);
    Mustache mustache = factory.compile(reader, "template");
   
    verifyOutput("true", model, mustache);
  }
 
  @Test
  public void testWrapperCaching() {
    factory.setObjectHandler(new MapMethodReflectionHandler());
    Reader reader = new StringReader(TEMPLATE);
    Mustache mustache = factory.compile(reader, "template");
   
    Map<String, String> model = new HashMap<String, String>();
    verifyOutput("true", model, mustache);
   
    model.put("empty", "data");
    verifyOutput("data", model, mustache);
  }
 

  @Test
  public void testSimpleHandlerMethodAccessDisallowed() {
    Map<String, Object> model = new HashMap<String, Object>();
   
    factory.setObjectHandler(new SimpleObjectHandler());
    Reader reader = new StringReader(TEMPLATE);
    Mustache mustache = factory.compile(reader, "template");
   
    verifyOutput("", model, mustache);
  }
 
  @Test
  public void testSimpleHandlerMethodAccessAllowed() {
    Map<String, Object> model = new HashMap<String, Object>();
   
    factory.setObjectHandler(new SimpleMapMethodHandler());
    Reader reader = new StringReader(TEMPLATE);
    Mustache mustache = factory.compile(reader, "template");
   
    verifyOutput("true", model, mustache);
  }
 
  private void verifyOutput(String expected, Object model, Mustache mustache) {
    StringWriter writer = new StringWriter();
    mustache.execute(writer, model);
   
    assertEquals(expected, writer.toString());
  }

}
TOP

Related Classes of com.github.mustachejava.MapNonGetMethodsTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.