use of freemarker.template.SimpleDate in project freemarker by apache.
the class TemplateTestCase method setUp.
/*
* This method just contains all the code to seed the data model
* ported over from the individual classes. This seems ugly and unnecessary.
* We really might as well just expose pretty much
* the same tree to all our tests. (JR)
*/
@Override
@SuppressWarnings("boxing")
public void setUp() throws Exception {
conf.setTemplateLoader(new CopyrightCommentRemoverTemplateLoader(new FileTemplateLoader(new File(getTestClassDirectory(), "templates"))));
BeansWrapper beansWrapper = new BeansWrapperBuilder(Configuration.VERSION_2_3_0).build();
dataModel.put(ASSERT_VAR_NAME, AssertDirective.INSTANCE);
dataModel.put(ASSERT_EQUALS_VAR_NAME, AssertEqualsDirective.INSTANCE);
dataModel.put(ASSERT_FAILS_VAR_NAME, AssertFailsDirective.INSTANCE);
dataModel.put(NO_OUTPUT_VAR_NAME, NoOutputDirective.INSTANCE);
dataModel.put(JAVA_OBJECT_INFO_VAR_NAME, JavaObjectInfo.INSTANCE);
dataModel.put(TEST_NAME_VAR_NAME, simpleTestName);
dataModel.put(ICI_INT_VALUE_VAR_NAME, conf.getIncompatibleImprovements().intValue());
dataModel.put("message", "Hello, world!");
if (simpleTestName.startsWith("api-builtin")) {
dataModel.put("map", ImmutableMap.of(1, "a", 2, "b", 3, "c"));
dataModel.put("list", ImmutableList.of(1, 2, 3));
dataModel.put("set", ImmutableSet.of("a", "b", "c"));
dataModel.put("s", "test");
} else if (simpleTestName.equals("bean-maps")) {
BeansWrapper w1 = new Java7MembersOnlyBeansWrapper();
BeansWrapper w2 = new Java7MembersOnlyBeansWrapper();
BeansWrapper w3 = new Java7MembersOnlyBeansWrapper();
BeansWrapper w4 = new Java7MembersOnlyBeansWrapper();
BeansWrapper w5 = new Java7MembersOnlyBeansWrapper();
BeansWrapper w6 = new Java7MembersOnlyBeansWrapper();
BeansWrapper w7 = new Java7MembersOnlyBeansWrapper();
w1.setExposureLevel(BeansWrapper.EXPOSE_PROPERTIES_ONLY);
w2.setExposureLevel(BeansWrapper.EXPOSE_PROPERTIES_ONLY);
w3.setExposureLevel(BeansWrapper.EXPOSE_NOTHING);
w4.setExposureLevel(BeansWrapper.EXPOSE_NOTHING);
w5.setExposureLevel(BeansWrapper.EXPOSE_ALL);
w6.setExposureLevel(BeansWrapper.EXPOSE_ALL);
w1.setMethodsShadowItems(true);
w2.setMethodsShadowItems(false);
w3.setMethodsShadowItems(true);
w4.setMethodsShadowItems(false);
w5.setMethodsShadowItems(true);
w6.setMethodsShadowItems(false);
w7.setSimpleMapWrapper(true);
Object test = getTestMapBean();
dataModel.put("m1", w1.wrap(test));
dataModel.put("m2", w2.wrap(test));
dataModel.put("m3", w3.wrap(test));
dataModel.put("m4", w4.wrap(test));
dataModel.put("m5", w5.wrap(test));
dataModel.put("m6", w6.wrap(test));
dataModel.put("m7", w7.wrap(test));
dataModel.put("s1", w1.wrap("hello"));
dataModel.put("s2", w1.wrap("world"));
dataModel.put("s3", w5.wrap("hello"));
dataModel.put("s4", w5.wrap("world"));
} else if (simpleTestName.equals("beans")) {
dataModel.put("array", new String[] { "array-0", "array-1" });
dataModel.put("list", Arrays.asList(new String[] { "list-0", "list-1", "list-2" }));
Map<Object, Object> tmap = new HashMap<Object, Object>();
tmap.put("key", "value");
Object objKey = new Object();
tmap.put(objKey, "objValue");
dataModel.put("map", tmap);
dataModel.put("objKey", objKey);
dataModel.put("obj", new freemarker.test.templatesuite.models.BeanTestClass());
dataModel.put("resourceBundle", new ResourceBundleModel(ResourceBundle.getBundle("freemarker.test.templatesuite.models.BeansTestResources"), BeansWrapper.getDefaultInstance()));
dataModel.put("date", new GregorianCalendar(1974, 10, 14).getTime());
dataModel.put("statics", beansWrapper.getStaticModels());
dataModel.put("enums", beansWrapper.getEnumModels());
} else if (simpleTestName.equals("boolean")) {
dataModel.put("boolean1", TemplateBooleanModel.FALSE);
dataModel.put("boolean2", TemplateBooleanModel.TRUE);
dataModel.put("boolean3", TemplateBooleanModel.TRUE);
dataModel.put("boolean4", TemplateBooleanModel.TRUE);
dataModel.put("boolean5", TemplateBooleanModel.FALSE);
dataModel.put("list1", new BooleanList1());
dataModel.put("list2", new BooleanList2());
dataModel.put("hash1", new BooleanHash1());
dataModel.put("hash2", new BooleanHash2());
} else if (simpleTestName.startsWith("dateformat")) {
GregorianCalendar cal = new GregorianCalendar(2002, 10, 15, 14, 54, 13);
cal.setTimeZone(TimeZone.getTimeZone("GMT"));
dataModel.put("date", new SimpleDate(cal.getTime(), TemplateDateModel.DATETIME));
dataModel.put("unknownDate", new SimpleDate(cal.getTime(), TemplateDateModel.UNKNOWN));
dataModel.put("javaGMT02", TimeZone.getTimeZone("GMT+02"));
dataModel.put("javaUTC", TimeZone.getTimeZone("UTC"));
dataModel.put("adaptedToStringScalar", new Object() {
@Override
public String toString() {
return "GMT+02";
}
});
dataModel.put("sqlDate", new java.sql.Date(1273955885023L));
dataModel.put("sqlTime", new java.sql.Time(74285023L));
} else if (templateName.equals("list.ftl") || templateName.equals("list2.ftl") || templateName.equals("list3.ftl") || simpleTestName.equals("listhash")) {
dataModel.put("listables", new Listables());
} else if (simpleTestName.startsWith("number-format")) {
dataModel.put("int", new SimpleNumber(Integer.valueOf(1)));
dataModel.put("double", new SimpleNumber(Double.valueOf(1.0)));
dataModel.put("double2", new SimpleNumber(Double.valueOf(1 + 1e-15)));
dataModel.put("double3", new SimpleNumber(Double.valueOf(1e-16)));
dataModel.put("double4", new SimpleNumber(Double.valueOf(-1e-16)));
dataModel.put("bigDecimal", new SimpleNumber(java.math.BigDecimal.valueOf(1)));
dataModel.put("bigDecimal2", new SimpleNumber(java.math.BigDecimal.valueOf(1, 16)));
} else if (simpleTestName.equals("simplehash-char-key")) {
HashMap<String, String> mStringC = new HashMap<String, String>();
mStringC.put("c", "string");
dataModel.put("mStringC", mStringC);
HashMap<String, String> mStringCNull = new HashMap<String, String>();
mStringCNull.put("c", null);
dataModel.put("mStringCNull", mStringCNull);
HashMap<Character, String> mCharC = new HashMap<Character, String>();
mCharC.put(Character.valueOf('c'), "char");
dataModel.put("mCharC", mCharC);
HashMap<String, String> mCharCNull = new HashMap<String, String>();
mCharCNull.put("c", null);
dataModel.put("mCharCNull", mCharCNull);
HashMap<Object, String> mMixed = new HashMap<Object, String>();
mMixed.put(Character.valueOf('c'), "char");
mMixed.put("s", "string");
mMixed.put("s2", "string2");
mMixed.put("s2n", null);
dataModel.put("mMixed", mMixed);
} else if (simpleTestName.equals("default-xmlns")) {
InputSource is = new InputSource(getClass().getResourceAsStream("models/defaultxmlns1.xml"));
NodeModel nm = NodeModel.parse(is);
dataModel.put("doc", nm);
} else if (simpleTestName.equals("multimodels")) {
dataModel.put("test", "selftest");
dataModel.put("self", "self");
dataModel.put("zero", Integer.valueOf(0));
dataModel.put("data", new MultiModel1());
} else if (simpleTestName.equals("stringbimethods")) {
dataModel.put("multi", new TestBoolean());
} else if (simpleTestName.startsWith("type-builtins")) {
dataModel.put("testmethod", new TestMethod());
dataModel.put("testnode", new TestNode());
dataModel.put("testcollection", new SimpleCollection(new ArrayList<Object>()));
dataModel.put("testcollectionEx", DefaultNonListCollectionAdapter.adapt(new HashSet<Object>(), null));
dataModel.put("bean", new TestBean());
} else if (simpleTestName.equals("date-type-builtins")) {
GregorianCalendar cal = new GregorianCalendar(2003, 4 - 1, 5, 6, 7, 8);
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
Date d = cal.getTime();
dataModel.put("unknown", d);
dataModel.put("timeOnly", new java.sql.Time(d.getTime()));
dataModel.put("dateOnly", new java.sql.Date(d.getTime()));
dataModel.put("dateTime", new java.sql.Timestamp(d.getTime()));
} else if (simpleTestName.equals("var-layers")) {
dataModel.put("x", Integer.valueOf(4));
dataModel.put("z", Integer.valueOf(4));
conf.setSharedVariable("y", Integer.valueOf(7));
} else if (simpleTestName.equals("xml-fragment")) {
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
f.setNamespaceAware(true);
DocumentBuilder db = f.newDocumentBuilder();
org.w3c.dom.Document doc = db.parse(new InputSource(getClass().getResourceAsStream("models/xmlfragment.xml")));
NodeModel.simplify(doc);
dataModel.put("node", NodeModel.wrap(doc.getDocumentElement().getFirstChild().getFirstChild()));
} else if (simpleTestName.equals("xmlns1")) {
InputSource is = new InputSource(getClass().getResourceAsStream("models/xmlns.xml"));
NodeModel nm = NodeModel.parse(is);
dataModel.put("doc", nm);
} else if (simpleTestName.equals("xmlns2")) {
InputSource is = new InputSource(getClass().getResourceAsStream("models/xmlns2.xml"));
NodeModel nm = NodeModel.parse(is);
dataModel.put("doc", nm);
} else if (simpleTestName.equals("xmlns3") || simpleTestName.equals("xmlns4")) {
InputSource is = new InputSource(getClass().getResourceAsStream("models/xmlns3.xml"));
NodeModel nm = NodeModel.parse(is);
dataModel.put("doc", nm);
} else if (simpleTestName.equals("xmlns5")) {
InputSource is = new InputSource(getClass().getResourceAsStream("models/defaultxmlns1.xml"));
NodeModel nm = NodeModel.parse(is);
dataModel.put("doc", nm);
} else if (simpleTestName.equals("xml-ns_prefix-scope")) {
InputSource is = new InputSource(getClass().getResourceAsStream("models/xml-ns_prefix-scope.xml"));
NodeModel nm = NodeModel.parse(is);
dataModel.put("doc", nm);
} else if (simpleTestName.startsWith("sequence-builtins")) {
Set<String> abcSet = new TreeSet<String>();
abcSet.add("a");
abcSet.add("b");
abcSet.add("c");
dataModel.put("abcSet", abcSet);
dataModel.put("abcSetNonSeq", DefaultNonListCollectionAdapter.adapt(abcSet, beansWrapper));
List<String> listWithNull = new ArrayList<String>();
listWithNull.add("a");
listWithNull.add(null);
listWithNull.add("c");
dataModel.put("listWithNull", listWithNull);
List<String> listWithNullsOnly = new ArrayList<String>();
listWithNull.add(null);
listWithNull.add(null);
listWithNull.add(null);
dataModel.put("listWithNullsOnly", listWithNullsOnly);
dataModel.put("abcCollection", new SimpleCollection(abcSet));
Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");
dataModel.put("set", set);
} else if (simpleTestName.equals("number-to-date")) {
dataModel.put("bigInteger", new BigInteger("1305575275540"));
dataModel.put("bigDecimal", new BigDecimal("1305575275539.5"));
} else if (simpleTestName.equals("varargs")) {
dataModel.put("m", new VarArgTestModel());
} else if (simpleTestName.startsWith("overloaded-methods-") && !simpleTestName.startsWith("overloaded-methods-2-")) {
dataModel.put("obj", new OverloadedMethods());
} else if (simpleTestName.startsWith("boolean-formatting")) {
dataModel.put("beansBoolean", new BooleanModel(Boolean.TRUE, (BeansWrapper) conf.getObjectWrapper()));
dataModel.put("booleanAndString", new BooleanAndStringTemplateModel());
dataModel.put("booleanVsStringMethods", new BooleanVsStringMethods());
} else if (simpleTestName.startsWith("number-math-builtins")) {
dataModel.put("fNan", Float.valueOf(Float.NaN));
dataModel.put("dNan", Double.valueOf(Double.NaN));
dataModel.put("fNinf", Float.valueOf(Float.NEGATIVE_INFINITY));
dataModel.put("dPinf", Double.valueOf(Double.POSITIVE_INFINITY));
dataModel.put("fn", Float.valueOf(-0.05f));
dataModel.put("dn", Double.valueOf(-0.05));
dataModel.put("ineg", Integer.valueOf(-5));
dataModel.put("ln", Long.valueOf(-5));
dataModel.put("sn", Short.valueOf((short) -5));
dataModel.put("bn", Byte.valueOf((byte) -5));
dataModel.put("bin", BigInteger.valueOf(5));
dataModel.put("bdn", BigDecimal.valueOf(-0.05));
dataModel.put("fp", Float.valueOf(0.05f));
dataModel.put("dp", Double.valueOf(0.05));
dataModel.put("ip", Integer.valueOf(5));
dataModel.put("lp", Long.valueOf(5));
dataModel.put("sp", Short.valueOf((short) 5));
dataModel.put("bp", Byte.valueOf((byte) 5));
dataModel.put("bip", BigInteger.valueOf(5));
dataModel.put("bdp", BigDecimal.valueOf(0.05));
} else if (simpleTestName.startsWith("classic-compatible")) {
dataModel.put("array", new String[] { "a", "b", "c" });
dataModel.put("beansArray", beansWrapper.wrap(new String[] { "a", "b", "c" }));
dataModel.put("beanTrue", beansWrapper.wrap(Boolean.TRUE));
dataModel.put("beanFalse", beansWrapper.wrap(Boolean.FALSE));
} else if (simpleTestName.startsWith("overloaded-methods-2-")) {
dataModel.put("obj", new OverloadedMethods2());
final boolean dow = conf.getObjectWrapper() instanceof DefaultObjectWrapper;
dataModel.put("dow", dow);
dataModel.put("dowPre22", dow && ((DefaultObjectWrapper) conf.getObjectWrapper()).getIncompatibleImprovements().intValue() < _TemplateAPI.VERSION_INT_2_3_22);
}
}
use of freemarker.template.SimpleDate in project freemarker by apache.
the class DateFormatTest method testIcIAndEscaping.
@Test
public void testIcIAndEscaping() throws Exception {
Configuration cfg = getConfiguration();
addToDataModel("d", new SimpleDate(new Date(12345678L), TemplateDateModel.DATETIME));
testIcIAndEscapingWhenCustFormsAreAccepted(cfg);
cfg.setIncompatibleImprovements(Configuration.VERSION_2_3_23);
testIcIAndEscapingWhenCustFormsAreAccepted(cfg);
cfg.setCustomDateFormats(Collections.<String, TemplateDateFormatFactory>emptyMap());
cfg.setDateTimeFormat("@epoch");
assertErrorContains("${d}", "\"@epoch\"");
cfg.setDateTimeFormat("'@'yyyy");
assertOutput("${d}", "@1970");
cfg.setDateTimeFormat("@@yyyy");
assertOutput("${d}", "@@1970");
cfg.setIncompatibleImprovements(Configuration.VERSION_2_3_24);
cfg.setDateTimeFormat("@epoch");
assertErrorContains("${d}", "custom", "\"epoch\"");
cfg.setDateTimeFormat("'@'yyyy");
assertOutput("${d}", "@1970");
cfg.setDateTimeFormat("@@yyyy");
assertOutput("${d}", "@@1970");
}
use of freemarker.template.SimpleDate in project leopard by tanhaichao.
the class AbstractTemplateMethod method exec.
@Override
public Object exec(@SuppressWarnings("rawtypes") List arguments) throws TemplateModelException {
// arguments.toArray();
Object[] args = new Object[arguments.size()];
int i = 0;
for (Object obj : arguments) {
if (obj != null) {
if (obj instanceof SimpleDate) {
args[i] = ((SimpleDate) obj).getAsDate();
} else if (obj instanceof SimpleNumber) {
args[i] = ((SimpleNumber) obj).getAsNumber();
} else if (obj instanceof SimpleNumber) {
args[i] = ((SimpleNumber) obj).getAsNumber();
} else if (obj instanceof SimpleScalar) {
args[i] = ((SimpleScalar) obj).toString();
} else if (obj instanceof StringModel) {
args[i] = ((StringModel) obj);
} else {
logger.error("obj:" + obj.getClass());
args[i] = obj.toString();
}
}
i++;
}
try {
return this.execute(args);
} catch (TemplateModelException e) {
throw e;
} catch (RuntimeException e) {
logger.error("key:" + this.getKey() + " clazz:" + this.getClass().getName());
throw e;
} catch (Exception e) {
throw new TemplateModelException(e.getMessage(), e);
}
}
use of freemarker.template.SimpleDate in project freemarker by apache.
the class BuiltinVariable method _eval.
@Override
TemplateModel _eval(Environment env) throws TemplateException {
if (parseTimeValue != null) {
return parseTimeValue;
}
if (name == NAMESPACE) {
return env.getCurrentNamespace();
}
if (name == MAIN) {
return env.getMainNamespace();
}
if (name == GLOBALS) {
return env.getGlobalVariables();
}
if (name == LOCALS) {
Macro.Context ctx = env.getCurrentMacroContext();
return ctx == null ? null : ctx.getLocals();
}
if (name == DATA_MODEL || name == DATA_MODEL_CC) {
return env.getDataModel();
}
if (name == VARS) {
return new VarsHash(env);
}
if (name == LOCALE) {
return new SimpleScalar(env.getLocale().toString());
}
if (name == LOCALE_OBJECT || name == LOCALE_OBJECT_CC) {
return env.getObjectWrapper().wrap(env.getLocale());
}
if (name == LANG) {
return new SimpleScalar(env.getLocale().getLanguage());
}
if (name == CURRENT_NODE || name == NODE || name == CURRENT_NODE_CC) {
return env.getCurrentVisitorNode();
}
if (name == TEMPLATE_NAME || name == TEMPLATE_NAME_CC) {
// remains broken.
return (env.getConfiguration().getIncompatibleImprovements().intValue() >= _TemplateAPI.VERSION_INT_2_3_23) ? new SimpleScalar(env.getTemplate230().getName()) : new SimpleScalar(env.getTemplate().getName());
}
if (name == MAIN_TEMPLATE_NAME || name == MAIN_TEMPLATE_NAME_CC) {
return SimpleScalar.newInstanceOrNull(env.getMainTemplate().getName());
}
if (name == CURRENT_TEMPLATE_NAME || name == CURRENT_TEMPLATE_NAME_CC) {
return SimpleScalar.newInstanceOrNull(env.getCurrentTemplate().getName());
}
if (name == PASS) {
return Macro.DO_NOTHING_MACRO;
}
if (name == OUTPUT_ENCODING || name == OUTPUT_ENCODING_CC) {
String s = env.getOutputEncoding();
return SimpleScalar.newInstanceOrNull(s);
}
if (name == URL_ESCAPING_CHARSET || name == URL_ESCAPING_CHARSET_CC) {
String s = env.getURLEscapingCharset();
return SimpleScalar.newInstanceOrNull(s);
}
if (name == ERROR) {
return new SimpleScalar(env.getCurrentRecoveredErrorMessage());
}
if (name == NOW) {
return new SimpleDate(new Date(), TemplateDateModel.DATETIME);
}
if (name == VERSION) {
return new SimpleScalar(Configuration.getVersionNumber());
}
if (name == INCOMPATIBLE_IMPROVEMENTS || name == INCOMPATIBLE_IMPROVEMENTS_CC) {
return new SimpleScalar(env.getConfiguration().getIncompatibleImprovements().toString());
}
if (name == GET_OPTIONAL_TEMPLATE) {
return GetOptionalTemplateMethod.INSTANCE;
}
if (name == GET_OPTIONAL_TEMPLATE_CC) {
return GetOptionalTemplateMethod.INSTANCE_CC;
}
if (name == CALLER_TEMPLATE_NAME || name == CALLER_TEMPLATE_NAME_CC) {
Context ctx = env.getCurrentMacroContext();
if (ctx == null) {
throw new TemplateException("Can't get ." + name + " here, as there's no macro or function (that's " + "implemented in the template) call in context.", env);
}
TemplateObject callPlace = ctx.callPlace;
String name = callPlace != null ? callPlace.getTemplate().getName() : null;
return name != null ? new SimpleScalar(name) : TemplateScalarModel.EMPTY_STRING;
}
throw new _MiscTemplateException(this, "Invalid special variable: ", name);
}
use of freemarker.template.SimpleDate in project freemarker by apache.
the class DateFormatTest method testCustomParameterized.
@Test
public void testCustomParameterized() throws Exception {
Configuration cfg = getConfiguration();
addToDataModel("d", new SimpleDate(new Date(12345678L), TemplateDateModel.DATETIME));
cfg.setDateTimeFormat("@div 1000");
assertOutput("${d}", "12345");
assertOutput("${d?string}", "12345");
assertOutput("${d?string.@div_100}", "123456");
assertErrorContains("${d?string.@div_xyz}", "\"@div_xyz\"", "\"xyz\"");
cfg.setDateTimeFormat("@div");
assertErrorContains("${d}", "\"datetime_format\"", "\"@div\"", "format parameter is required");
}
Aggregations