From 1d2e1009e5ecd844a49cb34e9e039ddb2eb29790 Mon Sep 17 00:00:00 2001 From: ryounes Date: Tue, 12 Apr 2011 19:58:02 +0000 Subject: [PATCH] NIHVIVO-1562 Test for object dump with EXPOSE_NOTHING BeansWrapper --- .../ext/dump/BaseDumpDirective.java | 7 +- .../ext/dump/DumpDirectiveTest.java | 123 ++++++++++++++---- 2 files changed, 101 insertions(+), 29 deletions(-) diff --git a/webapp/src/freemarker/ext/dump/BaseDumpDirective.java b/webapp/src/freemarker/ext/dump/BaseDumpDirective.java index 9468e3ee4..09f90ad8b 100644 --- a/webapp/src/freemarker/ext/dump/BaseDumpDirective.java +++ b/webapp/src/freemarker/ext/dump/BaseDumpDirective.java @@ -275,6 +275,9 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { String methodDisplayName = getMethodDisplayName(method); if ( ! methodDisplayName.endsWith(")") ) { try { + // See note in getAvailableMethods: when we have the keys, we can get the values without + // now invoking the method. Then getMethodsAvailableToTemplate should pass back + // a map of keys to values. Object result = method.invoke(object); log.debug("Result of invoking method " + method.getName() + " is an object of type " + result.getClass().getName()); if (result instanceof TemplateModel) { @@ -354,7 +357,9 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel { // Include only methods included in keys(). This factors in visibility // defined by the model's BeansWrapper. - if (keySet.contains(method.getName())) { + if (keySet.contains(method.getName())) { + // if the key has a value, we could add it here rather than invoking the + // method later availableMethods.add(method); } } diff --git a/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java b/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java index 9db13790e..d893ef581 100644 --- a/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java +++ b/webapp/test/freemarker/ext/dump/DumpDirectiveTest.java @@ -25,9 +25,10 @@ import org.junit.Before; import org.junit.Test; import freemarker.core.Environment; -import freemarker.ext.dump.BaseDumpDirective.Type; +import freemarker.ext.beans.BeansWrapper; import freemarker.ext.dump.BaseDumpDirective.DateType; import freemarker.ext.dump.BaseDumpDirective.Key; +import freemarker.ext.dump.BaseDumpDirective.Type; import freemarker.template.Configuration; import freemarker.template.SimpleCollection; import freemarker.template.Template; @@ -463,8 +464,6 @@ public class DumpDirectiveTest { } - // RY Do these with different BeansWrappers - @Test public void dumpStringToStringMap() { @@ -583,42 +582,86 @@ public class DumpDirectiveTest { test(varName, dataModel, expectedDump); } - + @Test - public void dumpObject() { + public void dumpObjectWithExposeNothingWrapper() { String varName = "employee"; Map dataModel = new HashMap(); - - Calendar c = Calendar.getInstance(); - c.set(75, Calendar.MAY, 5); - Employee jdoe = new Employee("John", "Doe", c.getTime(), 34523); - - c.set(65, Calendar.AUGUST, 10); - Employee jsmith = new Employee("Jane", "Smith", c.getTime(), 78234); - - c.set(80, Calendar.JUNE, 20); - Employee mjones = new Employee("Michael", "Jones", c.getTime(), 65432); - - c.set(81, Calendar.NOVEMBER, 30); - Employee mturner = new Employee("Mary", "Turner", c.getTime(), 89531); - - List supervisees = new ArrayList(); - supervisees.add(mjones); - supervisees.add(mturner); - jdoe.setSupervisor(jsmith); - jdoe.setSupervisees(supervisees); - jdoe.setSalary(65000); - - dataModel.put("employee", jdoe); + BeansWrapper wrapper = new BeansWrapper(); + wrapper.setExposureLevel(BeansWrapper.EXPOSE_NOTHING); + try { + dataModel.put("employee", wrapper.wrap(getEmployee())); + } catch (TemplateModelException e) { + // ?? + } Map expectedDump = new HashMap(); expectedDump.put(Key.NAME.toString(), varName); expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee"); + expectedDump.put(Key.VALUE.toString(), new HashMap()); + test(varName, dataModel, expectedDump); + } + + @Test + public void dumpObjectWithExposePropertiesOnlyWrapper() { - //test(varName, dataModel, expectedDump); + String varName = "employee"; + Map dataModel = new HashMap(); + BeansWrapper wrapper = new BeansWrapper(); + wrapper.setExposureLevel(BeansWrapper.EXPOSE_NOTHING); + try { + dataModel.put("employee", wrapper.wrap(getEmployee())); + } catch (TemplateModelException e) { + // ?? + } + + Map expectedDump = new HashMap(); + expectedDump.put(Key.NAME.toString(), varName); + expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee"); + expectedDump.put(Key.VALUE.toString(), new HashMap()); + test(varName, dataModel, expectedDump); } + @Test + public void dumpObjectWithExposeSafeWrapper() { + + String varName = "employee"; + Map dataModel = new HashMap(); + BeansWrapper wrapper = new BeansWrapper(); + wrapper.setExposureLevel(BeansWrapper.EXPOSE_NOTHING); + try { + dataModel.put("employee", wrapper.wrap(getEmployee())); + } catch (TemplateModelException e) { + // ?? + } + + Map expectedDump = new HashMap(); + expectedDump.put(Key.NAME.toString(), varName); + expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee"); + expectedDump.put(Key.VALUE.toString(), new HashMap()); + test(varName, dataModel, expectedDump); + } + + @Test + public void dumpObjectWithExposeAllWrapper() { + + String varName = "employee"; + Map dataModel = new HashMap(); + BeansWrapper wrapper = new BeansWrapper(); + wrapper.setExposureLevel(BeansWrapper.EXPOSE_NOTHING); + try { + dataModel.put("employee", wrapper.wrap(getEmployee())); + } catch (TemplateModelException e) { + // ?? + } + + Map expectedDump = new HashMap(); + expectedDump.put(Key.NAME.toString(), varName); + expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee"); + expectedDump.put(Key.VALUE.toString(), new HashMap()); + test(varName, dataModel, expectedDump); + } /////////////////////////// Private stub classes and helper methods /////////////////////////// private void test(String varName, Map dataModel, Map expectedDump) { @@ -816,4 +859,28 @@ public class DumpDirectiveTest { return supervisees; } } + + private Employee getEmployee() { + Calendar c = Calendar.getInstance(); + c.set(75, Calendar.MAY, 5); + Employee jdoe = new Employee("John", "Doe", c.getTime(), 34523); + + c.set(65, Calendar.AUGUST, 10); + Employee jsmith = new Employee("Jane", "Smith", c.getTime(), 78234); + + c.set(80, Calendar.JUNE, 20); + Employee mjones = new Employee("Michael", "Jones", c.getTime(), 65432); + + c.set(81, Calendar.NOVEMBER, 30); + Employee mturner = new Employee("Mary", "Turner", c.getTime(), 89531); + + List supervisees = new ArrayList(); + supervisees.add(mjones); + supervisees.add(mturner); + jdoe.setSupervisor(jsmith); + jdoe.setSupervisees(supervisees); + jdoe.setSalary(65000); + + return jdoe; + } }