NIHVIVO-1562 Test for object dump with EXPOSE_NOTHING BeansWrapper

This commit is contained in:
ryounes 2011-04-12 19:58:02 +00:00
parent f1288b90b5
commit 1d2e1009e5
2 changed files with 101 additions and 29 deletions

View file

@ -275,6 +275,9 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel {
String methodDisplayName = getMethodDisplayName(method); String methodDisplayName = getMethodDisplayName(method);
if ( ! methodDisplayName.endsWith(")") ) { if ( ! methodDisplayName.endsWith(")") ) {
try { 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); Object result = method.invoke(object);
log.debug("Result of invoking method " + method.getName() + " is an object of type " + result.getClass().getName()); log.debug("Result of invoking method " + method.getName() + " is an object of type " + result.getClass().getName());
if (result instanceof TemplateModel) { if (result instanceof TemplateModel) {
@ -355,6 +358,8 @@ public abstract class BaseDumpDirective implements TemplateDirectiveModel {
// Include only methods included in keys(). This factors in visibility // Include only methods included in keys(). This factors in visibility
// defined by the model's BeansWrapper. // 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); availableMethods.add(method);
} }
} }

View file

@ -25,9 +25,10 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import freemarker.core.Environment; 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.DateType;
import freemarker.ext.dump.BaseDumpDirective.Key; import freemarker.ext.dump.BaseDumpDirective.Key;
import freemarker.ext.dump.BaseDumpDirective.Type;
import freemarker.template.Configuration; import freemarker.template.Configuration;
import freemarker.template.SimpleCollection; import freemarker.template.SimpleCollection;
import freemarker.template.Template; import freemarker.template.Template;
@ -463,8 +464,6 @@ public class DumpDirectiveTest {
} }
// RY Do these with different BeansWrappers
@Test @Test
public void dumpStringToStringMap() { public void dumpStringToStringMap() {
@ -585,40 +584,84 @@ public class DumpDirectiveTest {
} }
@Test @Test
public void dumpObject() { public void dumpObjectWithExposeNothingWrapper() {
String varName = "employee"; String varName = "employee";
Map<String, Object> dataModel = new HashMap<String, Object>(); Map<String, Object> dataModel = new HashMap<String, Object>();
BeansWrapper wrapper = new BeansWrapper();
Calendar c = Calendar.getInstance(); wrapper.setExposureLevel(BeansWrapper.EXPOSE_NOTHING);
c.set(75, Calendar.MAY, 5); try {
Employee jdoe = new Employee("John", "Doe", c.getTime(), 34523); dataModel.put("employee", wrapper.wrap(getEmployee()));
} catch (TemplateModelException e) {
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<Employee> supervisees = new ArrayList<Employee>();
supervisees.add(mjones);
supervisees.add(mturner);
jdoe.setSupervisor(jsmith);
jdoe.setSupervisees(supervisees);
jdoe.setSalary(65000);
dataModel.put("employee", jdoe);
Map<String, Object> expectedDump = new HashMap<String, Object>(); Map<String, Object> expectedDump = new HashMap<String, Object>();
expectedDump.put(Key.NAME.toString(), varName); expectedDump.put(Key.NAME.toString(), varName);
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee"); expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
expectedDump.put(Key.VALUE.toString(), new HashMap<String, Object>());
//test(varName, dataModel, expectedDump); test(varName, dataModel, expectedDump);
} }
@Test
public void dumpObjectWithExposePropertiesOnlyWrapper() {
String varName = "employee";
Map<String, Object> dataModel = new HashMap<String, Object>();
BeansWrapper wrapper = new BeansWrapper();
wrapper.setExposureLevel(BeansWrapper.EXPOSE_NOTHING);
try {
dataModel.put("employee", wrapper.wrap(getEmployee()));
} catch (TemplateModelException e) {
// ??
}
Map<String, Object> expectedDump = new HashMap<String, Object>();
expectedDump.put(Key.NAME.toString(), varName);
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
expectedDump.put(Key.VALUE.toString(), new HashMap<String, Object>());
test(varName, dataModel, expectedDump);
}
@Test
public void dumpObjectWithExposeSafeWrapper() {
String varName = "employee";
Map<String, Object> dataModel = new HashMap<String, Object>();
BeansWrapper wrapper = new BeansWrapper();
wrapper.setExposureLevel(BeansWrapper.EXPOSE_NOTHING);
try {
dataModel.put("employee", wrapper.wrap(getEmployee()));
} catch (TemplateModelException e) {
// ??
}
Map<String, Object> expectedDump = new HashMap<String, Object>();
expectedDump.put(Key.NAME.toString(), varName);
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
expectedDump.put(Key.VALUE.toString(), new HashMap<String, Object>());
test(varName, dataModel, expectedDump);
}
@Test
public void dumpObjectWithExposeAllWrapper() {
String varName = "employee";
Map<String, Object> dataModel = new HashMap<String, Object>();
BeansWrapper wrapper = new BeansWrapper();
wrapper.setExposureLevel(BeansWrapper.EXPOSE_NOTHING);
try {
dataModel.put("employee", wrapper.wrap(getEmployee()));
} catch (TemplateModelException e) {
// ??
}
Map<String, Object> expectedDump = new HashMap<String, Object>();
expectedDump.put(Key.NAME.toString(), varName);
expectedDump.put(Key.TYPE.toString(), "freemarker.ext.dump.DumpDirectiveTest$Employee");
expectedDump.put(Key.VALUE.toString(), new HashMap<String, Object>());
test(varName, dataModel, expectedDump);
}
/////////////////////////// Private stub classes and helper methods /////////////////////////// /////////////////////////// Private stub classes and helper methods ///////////////////////////
private void test(String varName, Map<String, Object> dataModel, Map<String, Object> expectedDump) { private void test(String varName, Map<String, Object> dataModel, Map<String, Object> expectedDump) {
@ -816,4 +859,28 @@ public class DumpDirectiveTest {
return supervisees; 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<Employee> supervisees = new ArrayList<Employee>();
supervisees.add(mjones);
supervisees.add(mturner);
jdoe.setSupervisor(jsmith);
jdoe.setSupervisees(supervisees);
jdoe.setSalary(65000);
return jdoe;
}
} }