From 1ef114ff4525660a7d65345ecd4140d4b62abcb8 Mon Sep 17 00:00:00 2001 From: ryounes Date: Mon, 25 Apr 2011 14:13:33 +0000 Subject: [PATCH] NIHVIVO-1562 Add unit tests for TemplateDirectiveModel and TemplateMethodModel help() methods that return something other than the expected type. Delete HelpDirectiveTest since it just replicated method and help directive tests in DumpDirectiveTest, and was a nuisance to maintain. --- .../ext/dump/BaseDumpDirective.java | 6 +- .../ext/dump/DumpDirectiveTest.java | 81 ++++- .../ext/dump/HelpDirectiveTest.java | 288 ------------------ 3 files changed, 78 insertions(+), 297 deletions(-) delete mode 100644 webapp/test/freemarker/ext/dump/HelpDirectiveTest.java diff --git a/webapp/src/freemarker/ext/dump/BaseDumpDirective.java b/webapp/src/freemarker/ext/dump/BaseDumpDirective.java index d694d3f65..9191900bd 100644 --- a/webapp/src/freemarker/ext/dump/BaseDumpDirective.java +++ b/webapp/src/freemarker/ext/dump/BaseDumpDirective.java @@ -453,7 +453,11 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { Method help = cls.getMethod("help", String.class); try { return (Map) help.invoke(model, varName); - } catch (Exception e) { + } catch (ClassCastException e) { + log.error("Method help() of " + modelClass + " of class " + cls.getName() + " has incorrect return type."); + return null; + } catch (Exception e) { + // log.error("Error invoking method help() on " + modelClass + " of class " + cls.getName()); return null; } diff --git a/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java b/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java index 607d5e987..61a866910 100644 --- a/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java +++ b/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java @@ -286,12 +286,12 @@ public class DumpDirectiveTest { } @Test - public void dumpMethodWithBadHelp() { + public void dumpMethodWithStringHelp() { String varName = "square"; Map dataModel = new HashMap(); - TemplateMethodModel methodModel = new MethodWithBadHelp(); + TemplateMethodModel methodModel = new MethodWithStringHelp(); dataModel.put(varName, methodModel); Map expectedDumpValue = new HashMap(); @@ -304,6 +304,26 @@ public class DumpDirectiveTest { test(varName, dataModel, expectedDump); } + + @Test + public void dumpMethodWithStringStringMapHelp() { + + String varName = "square"; + Map dataModel = new HashMap(); + + TemplateMethodModel methodModel = new MethodWithStringStringMapHelp(); + dataModel.put(varName, methodModel); + + Map expectedDumpValue = new HashMap(); + expectedDumpValue.put(Key.TYPE.toString(), Type.METHOD); + expectedDumpValue.put(Key.CLASS.toString(), methodModel.getClass().getName()); + expectedDumpValue.put(Key.HELP.toString(), new HashMap()); + + Map expectedDump = new HashMap(); + expectedDump.put(varName, expectedDumpValue); + + test(varName, dataModel, expectedDump); + } @Test public void dumpHelplessDirective() { @@ -346,12 +366,12 @@ public class DumpDirectiveTest { } @Test - public void dumpDirectiveWithBadHelp() { + public void dumpDirectiveWithStringHelp() { String varName = "dump"; Map dataModel = new HashMap(); - TemplateDirectiveModel directiveModel = new DirectiveWithBadHelp(); + TemplateDirectiveModel directiveModel = new DirectiveWithStringHelp(); dataModel.put(varName, directiveModel); Map expectedDumpValue = new HashMap(); @@ -364,6 +384,26 @@ public class DumpDirectiveTest { test(varName, dataModel, expectedDump); } + + @Test + public void dumpDirectiveWithStringStringMapHelp() { + + String varName = "dump"; + Map dataModel = new HashMap(); + + TemplateDirectiveModel directiveModel = new DirectiveWithStringStringMapHelp(); + dataModel.put(varName, directiveModel); + + Map expectedDumpValue = new HashMap(); + expectedDumpValue.put(Key.TYPE.toString(), Type.DIRECTIVE); + expectedDumpValue.put(Key.CLASS.toString(), directiveModel.getClass().getName()); + expectedDumpValue.put(Key.HELP.toString(), new HashMap()); + + Map expectedDump = new HashMap(); + expectedDump.put(varName, expectedDumpValue); + + test(varName, dataModel, expectedDump); + } @Test public void dumpStringList() { @@ -814,15 +854,27 @@ public class DumpDirectiveTest { } } - private class MethodWithBadHelp implements TemplateMethodModel { + private class MethodWithStringHelp implements TemplateMethodModel { @Override public Object exec(List arg0) throws TemplateModelException { return null; } - public Map help() { - return new HashMap(); + public String help(String name) { + return "help"; + } + } + + private class MethodWithStringStringMapHelp implements TemplateMethodModel { + + @Override + public Object exec(List arg0) throws TemplateModelException { + return null; + } + + public Map help(String name) { + return new HashMap(); } } @@ -848,7 +900,7 @@ public class DumpDirectiveTest { } } - private class DirectiveWithBadHelp implements TemplateDirectiveModel { + private class DirectiveWithStringHelp implements TemplateDirectiveModel { @Override public void execute(Environment arg0, Map arg1, TemplateModel[] arg2, @@ -860,6 +912,19 @@ public class DumpDirectiveTest { return "help"; } } + + private class DirectiveWithStringStringMapHelp implements TemplateDirectiveModel { + + @Override + public void execute(Environment arg0, Map arg1, TemplateModel[] arg2, + TemplateDirectiveBody arg3) throws TemplateException, + IOException { + } + + public Map help(String name) { + return new HashMap(); + } + } private Map getDirectiveHelp(String name) { Map map = new HashMap(); diff --git a/webapp/test/freemarker/ext/dump/HelpDirectiveTest.java b/webapp/test/freemarker/ext/dump/HelpDirectiveTest.java deleted file mode 100644 index 050e14d42..000000000 --- a/webapp/test/freemarker/ext/dump/HelpDirectiveTest.java +++ /dev/null @@ -1,288 +0,0 @@ -/* $This file is distributed under the terms of the license in /doc/license.txt$ */ - -package freemarker.ext.dump; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.fail; - -import java.io.IOException; -import java.io.StringReader; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.junit.Before; -import org.junit.Test; - -import freemarker.core.Environment; -import freemarker.ext.dump.BaseDumpDirective.Key; -import freemarker.ext.dump.BaseDumpDirective.Type; -import freemarker.template.Configuration; -import freemarker.template.Template; -import freemarker.template.TemplateDirectiveBody; -import freemarker.template.TemplateDirectiveModel; -import freemarker.template.TemplateException; -import freemarker.template.TemplateMethodModel; -import freemarker.template.TemplateModel; -import freemarker.template.TemplateModelException; - -public class HelpDirectiveTest { - - private Template template; - - @Before - public void setUp() { - Configuration config = new Configuration(); - String templateStr = ""; - try { - template = new Template("template", new StringReader(templateStr), config); - } catch (Exception e) { - fail(e.getMessage()); - } - // Turn off log messages to console - Logger.getLogger(BaseDumpDirective.class).setLevel(Level.OFF); - } - - @Test - public void dumpHelplessMethod() { - - String varName = "square"; - Map dataModel = new HashMap(); - - TemplateMethodModel methodModel = new HelplessMethod(); - dataModel.put(varName, methodModel); - - Map expectedDumpValue = new HashMap(); - - expectedDumpValue.put(Key.TYPE.toString(), Type.METHOD); - expectedDumpValue.put(Key.CLASS.toString(), methodModel.getClass().getName()); - expectedDumpValue.put(Key.HELP.toString(), null); - - Map expectedDump = new HashMap(); - expectedDump.put(varName, expectedDumpValue); - - test(varName, dataModel, expectedDump); - } - - @Test - public void dumpHelpfulMethod() { - - String varName = "square"; - Map dataModel = new HashMap(); - - TemplateMethodModel methodModel = new HelpfulMethod(); - dataModel.put(varName, methodModel); - - Map expectedDumpValue = new HashMap(); - expectedDumpValue.put(Key.TYPE.toString(), Type.METHOD); - expectedDumpValue.put(Key.CLASS.toString(), methodModel.getClass().getName()); - expectedDumpValue.put(Key.HELP.toString(), getMethodHelp(varName)); - - Map expectedDump = new HashMap(); - expectedDump.put(varName, expectedDumpValue); - - test(varName, dataModel, expectedDump); - } - - @Test - public void dumpMethodWithBadHelp() { - - String varName = "square"; - Map dataModel = new HashMap(); - - TemplateMethodModel methodModel = new MethodWithBadHelp(); - dataModel.put(varName, methodModel); - - Map expectedDumpValue = new HashMap(); - expectedDumpValue.put(Key.TYPE.toString(), Type.METHOD); - expectedDumpValue.put(Key.CLASS.toString(), methodModel.getClass().getName()); - expectedDumpValue.put(Key.HELP.toString(), null); - - Map expectedDump = new HashMap(); - expectedDump.put(varName, expectedDumpValue); - - test(varName, dataModel, expectedDump); - } - - @Test - public void dumpHelplessDirective() { - - String varName = "dump"; - Map dataModel = new HashMap(); - - TemplateDirectiveModel directiveModel = new HelplessDirective(); - dataModel.put(varName, directiveModel); - - Map expectedDumpValue = new HashMap(); - expectedDumpValue.put(Key.TYPE.toString(), Type.DIRECTIVE); - expectedDumpValue.put(Key.CLASS.toString(), directiveModel.getClass().getName()); - expectedDumpValue.put(Key.HELP.toString(), null); - - Map expectedDump = new HashMap(); - expectedDump.put(varName, expectedDumpValue); - - test(varName, dataModel, expectedDump); - } - - @Test - public void dumpHelpfulDirective() { - - String varName = "dump"; - Map dataModel = new HashMap(); - - TemplateDirectiveModel directiveModel = new HelpfulDirective(); - dataModel.put(varName, directiveModel); - - Map expectedDumpValue = new HashMap(); - expectedDumpValue.put(Key.TYPE.toString(), Type.DIRECTIVE); - expectedDumpValue.put(Key.CLASS.toString(), directiveModel.getClass().getName()); - expectedDumpValue.put(Key.HELP.toString(), getDirectiveHelp(varName)); - - Map expectedDump = new HashMap(); - expectedDump.put(varName, expectedDumpValue); - - test(varName, dataModel, expectedDump); - } - - @Test - public void dumpDirectiveWithBadHelp() { - - String varName = "dump"; - Map dataModel = new HashMap(); - - TemplateDirectiveModel directiveModel = new DirectiveWithBadHelp(); - dataModel.put(varName, directiveModel); - - Map expectedDumpValue = new HashMap(); - expectedDumpValue.put(Key.TYPE.toString(), Type.DIRECTIVE); - expectedDumpValue.put(Key.CLASS.toString(), directiveModel.getClass().getName()); - expectedDumpValue.put(Key.HELP.toString(), null); - - Map expectedDump = new HashMap(); - expectedDump.put(varName, expectedDumpValue); - - test(varName, dataModel, expectedDump); - } - - /////////////////////////// Private test classes and helper methods /////////////////////////// - - private class HelplessMethod implements TemplateMethodModel { - - @Override - public Object exec(List arg0) throws TemplateModelException { - return null; - } - } - - private class HelpfulMethod implements TemplateMethodModel { - - @Override - public Object exec(List arg0) throws TemplateModelException { - return null; - } - - public Map help(String name) { - return getMethodHelp(name); - } - } - - private class MethodWithBadHelp implements TemplateMethodModel { - - @Override - public Object exec(List arg0) throws TemplateModelException { - return null; - } - - public Map help() { - return new HashMap(); - } - } - - private class HelplessDirective implements TemplateDirectiveModel { - - @Override - public void execute(Environment arg0, Map arg1, TemplateModel[] arg2, - TemplateDirectiveBody arg3) throws TemplateException, - IOException { - } - } - - private class HelpfulDirective implements TemplateDirectiveModel { - - @Override - public void execute(Environment arg0, Map arg1, TemplateModel[] arg2, - TemplateDirectiveBody arg3) throws TemplateException, - IOException { - } - - public Map help(String name) { - return getDirectiveHelp(name); - } - } - - private class DirectiveWithBadHelp implements TemplateDirectiveModel { - - @Override - public void execute(Environment arg0, Map arg1, TemplateModel[] arg2, - TemplateDirectiveBody arg3) throws TemplateException, - IOException { - } - - public String help(String name) { - return "help"; - } - } - - private Map getDirectiveHelp(String name) { - Map map = new HashMap(); - - map.put("effect", "Dump the contents of a template variable."); - - map.put("comments", "Sequences (lists and arrays) are enclosed in square brackets. Hashes are enclosed in curly braces."); - - Map parameters = new HashMap(); - parameters.put("var", "name of variable to dump"); - map.put("parameters", parameters); - - List examples = new ArrayList(); - examples.add("<@" + name + " var=\"urls\" />"); - map.put("examples", examples); - - return map; - } - - private Map getMethodHelp(String name) { - Map map = new HashMap(); - - map.put("returns", "The square of the argument"); - - List params = new ArrayList(); - params.add("Integer to square"); - map.put("parameters", params); - - List examples = new ArrayList(); - examples.add(name + "(4)"); - map.put("examples", examples); - - return map; - } - - private Map getDump(String varName, Map dataModel) { - try { - Environment env = template.createProcessingEnvironment(dataModel, new StringWriter()); - return new DumpDirective().getTemplateVariableDump(varName, env); - } catch (Exception e) { - fail(e.getMessage()); - return null; - } - } - - private void test(String varName, Map dataModel, Map expectedDump) { - Map dump = getDump(varName, dataModel); - assertEquals(expectedDump, dump); - } -}