You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/05/15 21:23:24 UTC
[08/51] [abbrv] [partial] incubator-freemarker git commit:
Restructured project so that freemarker-test-utils depends on freemarker-core
(and hence can provide common classes for testing templates,
and can use utility classes defined in the core). As a c
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/manualtest/Product.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/manualtest/Product.java b/freemarker-core/src/test/java/org/apache/freemarker/manualtest/Product.java
deleted file mode 100644
index fcb34e8..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/manualtest/Product.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.freemarker.manualtest;
-
-/**
- * Product bean; note that it must be a public class!
- */
-public class Product {
-
- private String url;
- private String name;
-
- // As per the JavaBeans spec., this defines the "url" bean property
- // It must be public!
- public String getUrl() {
- return url;
- }
-
- public void setUrl(String url) {
- this.url = url;
- }
-
- // As per the JavaBean spec., this defines the "name" bean property
- // It must be public!
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/manualtest/TemplateConfigurationExamples.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/manualtest/TemplateConfigurationExamples.java b/freemarker-core/src/test/java/org/apache/freemarker/manualtest/TemplateConfigurationExamples.java
deleted file mode 100644
index 8c515bd..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/manualtest/TemplateConfigurationExamples.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.freemarker.manualtest;
-
-import static org.junit.Assert.*;
-
-import java.nio.charset.StandardCharsets;
-import java.util.Date;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.Template;
-import org.apache.freemarker.core.TemplateConfiguration;
-import org.apache.freemarker.core.outputformat.impl.HTMLOutputFormat;
-import org.apache.freemarker.core.outputformat.impl.PlainTextOutputFormat;
-import org.apache.freemarker.core.outputformat.impl.UndefinedOutputFormat;
-import org.apache.freemarker.core.outputformat.impl.XMLOutputFormat;
-import org.apache.freemarker.core.templateresolver.ConditionalTemplateConfigurationFactory;
-import org.apache.freemarker.core.templateresolver.FileExtensionMatcher;
-import org.apache.freemarker.core.templateresolver.FileNameGlobMatcher;
-import org.apache.freemarker.core.templateresolver.FirstMatchTemplateConfigurationFactory;
-import org.apache.freemarker.core.templateresolver.MergingTemplateConfigurationFactory;
-import org.apache.freemarker.core.templateresolver.OrMatcher;
-import org.apache.freemarker.core.templateresolver.PathGlobMatcher;
-import org.apache.freemarker.core.util._DateUtil;
-import org.apache.freemarker.test.TemplateTest;
-import org.apache.freemarker.test.TestConfigurationBuilder;
-import org.junit.Test;
-
-public class TemplateConfigurationExamples extends TemplateTest {
-
- @Test
- public void example1JavaCfg() throws Exception {
- example1(true);
- }
-
- @Test
- public void example1PropertiesCfg() throws Exception {
- example1(false);
- }
-
- private void example1(boolean javaCfg) throws Exception {
- TestConfigurationBuilder cfgB = new TestConfigurationBuilder(this.getClass());
- if (javaCfg) {
- cfgB.setTemplateConfigurations(new ConditionalTemplateConfigurationFactory(
- new FileExtensionMatcher("xml"),
- new TemplateConfiguration.Builder()
- .sourceEncoding(StandardCharsets.UTF_8)
- .outputFormat(XMLOutputFormat.INSTANCE)
- .build()));
-
- } else {
- cfgB.setTemplateConfigurations(null);
- cfgB.setSettings(loadPropertiesFile("TemplateConfigurationExamples1.properties"));
- }
- setConfiguration(cfgB.build());
-
- addTemplate("t.xml", "");
-
- Template t = getConfiguration().getTemplate("t.xml");
- assertEquals(StandardCharsets.UTF_8, t.getActualSourceEncoding());
- assertEquals(XMLOutputFormat.INSTANCE, t.getOutputFormat());
- }
-
- @Test
- public void example2JavaCfg() throws Exception {
- example2(true);
- }
-
- @Test
- public void example2PropertiesCfg() throws Exception {
- example2(false);
- }
-
- private void example2(boolean javaCfg) throws Exception {
- TestConfigurationBuilder cfgB = new TestConfigurationBuilder(this.getClass());
- if (javaCfg) {
- cfgB.setTemplateConfigurations(
- new ConditionalTemplateConfigurationFactory(
- new PathGlobMatcher("mail/**"),
- new FirstMatchTemplateConfigurationFactory(
- new ConditionalTemplateConfigurationFactory(
- new FileNameGlobMatcher("*.subject.*"),
- new TemplateConfiguration.Builder()
- .outputFormat(PlainTextOutputFormat.INSTANCE)
- .build()),
- new ConditionalTemplateConfigurationFactory(
- new FileNameGlobMatcher("*.body.*"),
- new TemplateConfiguration.Builder()
- .outputFormat(HTMLOutputFormat.INSTANCE)
- .build())
- )
- .noMatchErrorDetails(
- "Mail template names must contain \".subject.\" or \".body.\"!")));
- } else{
- cfgB.setSettings(loadPropertiesFile("TemplateConfigurationExamples2.properties"));
- }
- setConfiguration(cfgB.build());
-
- addTemplate("t.subject.ftl", "");
- addTemplate("mail/t.subject.ftl", "");
- addTemplate("mail/t.body.ftl", "");
-
- Configuration cfg = getConfiguration();
- assertEquals(UndefinedOutputFormat.INSTANCE, cfg.getTemplate("t.subject.ftl").getOutputFormat());
- assertEquals(PlainTextOutputFormat.INSTANCE, cfg.getTemplate("mail/t.subject.ftl").getOutputFormat());
- assertEquals(HTMLOutputFormat.INSTANCE, cfg.getTemplate("mail/t.body.ftl").getOutputFormat());
- }
-
- @Test
- public void example3JavaCfg() throws Exception {
- example3(true);
- }
-
- @Test
- public void example3PropertiesCfg() throws Exception {
- example3(false);
- }
-
- private void example3(boolean javaCfg) throws Exception {
- TestConfigurationBuilder cfgB = new TestConfigurationBuilder(this.getClass())
- .sourceEncoding(StandardCharsets.ISO_8859_1);
- if (javaCfg) {
- cfgB.setTemplateConfigurations(
- new MergingTemplateConfigurationFactory(
- new ConditionalTemplateConfigurationFactory(
- new FileNameGlobMatcher("*.stats.*"),
- new TemplateConfiguration.Builder()
- .dateTimeFormat("iso")
- .dateFormat("iso")
- .timeFormat("iso")
- .timeZone(_DateUtil.UTC)
- .build()),
- new ConditionalTemplateConfigurationFactory(
- new PathGlobMatcher("mail/**"),
- new TemplateConfiguration.Builder()
- .sourceEncoding(StandardCharsets.UTF_8)
- .build()),
- new FirstMatchTemplateConfigurationFactory(
- new ConditionalTemplateConfigurationFactory(
- new FileExtensionMatcher("xml"),
- new TemplateConfiguration.Builder()
- .outputFormat(XMLOutputFormat.INSTANCE)
- .build()),
- new ConditionalTemplateConfigurationFactory(
- new OrMatcher(
- new FileExtensionMatcher("html"),
- new FileExtensionMatcher("htm")),
- new TemplateConfiguration.Builder()
- .outputFormat(HTMLOutputFormat.INSTANCE)
- .build())
- ).allowNoMatch(true)));
- } else {
- cfgB.setSettings(loadPropertiesFile("TemplateConfigurationExamples3.properties"));
- }
- setConfiguration(cfgB.build());
-
- addTemplate("t.stats.html", "${ts?datetime} ${ts?date} ${ts?time}");
- addTemplate("t.html", "");
- addTemplate("t.htm", "");
- addTemplate("t.xml", "");
- addTemplate("mail/t.html", "");
-
- addToDataModel("ts", new Date(1440431606011L));
-
- Configuration cfg = getConfiguration();
- assertEquals(HTMLOutputFormat.INSTANCE, cfg.getTemplate("t.html").getOutputFormat());
- assertEquals(StandardCharsets.ISO_8859_1, cfg.getTemplate("t.html").getActualSourceEncoding());
- assertEquals(HTMLOutputFormat.INSTANCE, cfg.getTemplate("t.htm").getOutputFormat());
- assertEquals(XMLOutputFormat.INSTANCE, cfg.getTemplate("t.xml").getOutputFormat());
- assertEquals(HTMLOutputFormat.INSTANCE, cfg.getTemplate("t.stats.html").getOutputFormat());
- assertOutputForNamed("t.stats.html", "2015-08-24T15:53:26.011Z 2015-08-24 15:53:26.011Z");
- assertEquals(StandardCharsets.UTF_8, cfg.getTemplate("mail/t.html").getActualSourceEncoding());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/manualtest/UnitAwareTemplateNumberFormatFactory.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/manualtest/UnitAwareTemplateNumberFormatFactory.java b/freemarker-core/src/test/java/org/apache/freemarker/manualtest/UnitAwareTemplateNumberFormatFactory.java
deleted file mode 100644
index 89f20fa..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/manualtest/UnitAwareTemplateNumberFormatFactory.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.freemarker.manualtest;
-
-import java.util.Locale;
-
-import org.apache.freemarker.core.Environment;
-import org.apache.freemarker.core.model.TemplateModelException;
-import org.apache.freemarker.core.model.TemplateNumberModel;
-import org.apache.freemarker.core.valueformat.TemplateNumberFormat;
-import org.apache.freemarker.core.valueformat.TemplateNumberFormatFactory;
-import org.apache.freemarker.core.valueformat.TemplateValueFormatException;
-
-/**
- * A number format that takes any other number format as parameter (specified as a string, as
- * usual in FreeMarker), then if the model is a {@link UnitAwareTemplateNumberModel}, it shows
- * the unit after the number formatted with the other format, otherwise it just shows the formatted
- * number without unit.
- */
-public class UnitAwareTemplateNumberFormatFactory extends TemplateNumberFormatFactory {
-
- public static final UnitAwareTemplateNumberFormatFactory INSTANCE
- = new UnitAwareTemplateNumberFormatFactory();
-
- private UnitAwareTemplateNumberFormatFactory() {
- // Defined to decrease visibility
- }
-
- @Override
- public TemplateNumberFormat get(String params, Locale locale, Environment env)
- throws TemplateValueFormatException {
- return new UnitAwareNumberFormat(env.getTemplateNumberFormat(params, locale));
- }
-
- private static class UnitAwareNumberFormat extends TemplateNumberFormat {
-
- private final TemplateNumberFormat innerFormat;
-
- private UnitAwareNumberFormat(TemplateNumberFormat innerFormat) {
- this.innerFormat = innerFormat;
- }
-
- @Override
- public String formatToPlainText(TemplateNumberModel numberModel)
- throws TemplateModelException, TemplateValueFormatException {
- String innerResult = innerFormat.formatToPlainText(numberModel);
- return numberModel instanceof UnitAwareTemplateNumberModel
- ? innerResult + " " + ((UnitAwareTemplateNumberModel) numberModel).getUnit()
- : innerResult;
- }
-
- @Override
- public boolean isLocaleBound() {
- return innerFormat.isLocaleBound();
- }
-
- @Override
- public String getDescription() {
- return "unit-aware " + innerFormat.getDescription();
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/manualtest/UnitAwareTemplateNumberModel.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/manualtest/UnitAwareTemplateNumberModel.java b/freemarker-core/src/test/java/org/apache/freemarker/manualtest/UnitAwareTemplateNumberModel.java
deleted file mode 100644
index 1e54254..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/manualtest/UnitAwareTemplateNumberModel.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.freemarker.manualtest;
-
-import org.apache.freemarker.core.model.TemplateModelException;
-import org.apache.freemarker.core.model.TemplateNumberModel;
-
-public class UnitAwareTemplateNumberModel implements TemplateNumberModel {
-
- private final Number value;
- private final String unit;
-
- public UnitAwareTemplateNumberModel(Number value, String unit) {
- this.value = value;
- this.unit = unit;
- }
-
- @Override
- public Number getAsNumber() throws TemplateModelException {
- return value;
- }
-
- public String getUnit() {
- return unit;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/test/CopyrightCommentRemoverTemplateLoader.java b/freemarker-core/src/test/java/org/apache/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
deleted file mode 100644
index 3b1f1ee..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.freemarker.test;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.Serializable;
-import java.io.StringReader;
-import java.nio.charset.StandardCharsets;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.input.ReaderInputStream;
-import org.apache.freemarker.core.templateresolver.TemplateLoader;
-import org.apache.freemarker.core.templateresolver.TemplateLoaderSession;
-import org.apache.freemarker.core.templateresolver.TemplateLoadingResult;
-import org.apache.freemarker.core.templateresolver.TemplateLoadingResultStatus;
-import org.apache.freemarker.core.templateresolver.TemplateLoadingSource;
-
-/**
- * Removes the Apache copyright boiler plate from the beginning of the template, so that they don't mess up the expected
- * template output. This can interfere with tests that try to test I/O errors and such low level things, so use with
- * care.
- */
-public class CopyrightCommentRemoverTemplateLoader implements TemplateLoader {
-
- private final TemplateLoader innerTemplateLoader;
-
- public CopyrightCommentRemoverTemplateLoader(TemplateLoader innerTemplateLoader) {
- this.innerTemplateLoader = innerTemplateLoader;
- }
-
- @Override
- public TemplateLoaderSession createSession() {
- return null;
- }
-
- @Override
- public TemplateLoadingResult load(String name, TemplateLoadingSource ifSourceDiffersFrom,
- Serializable ifVersionDiffersFrom, TemplateLoaderSession session) throws IOException {
- TemplateLoadingResult result = innerTemplateLoader.load(name, ifSourceDiffersFrom, ifVersionDiffersFrom, session);
- if (result.getStatus() != TemplateLoadingResultStatus.OPENED) {
- return result;
- }
- if (result.getInputStream() != null) {
- return new TemplateLoadingResult(
- result.getSource(), result.getVersion(), getWithoutCopyrightHeader(result.getInputStream()),
- result.getTemplateConfiguration());
- } else {
- return new TemplateLoadingResult(
- result.getSource(), result.getVersion(), getWithoutCopyrightHeader(result.getReader()),
- result.getTemplateConfiguration());
- }
- }
-
- @Override
- public void resetState() {
- // Do nothing
- }
-
- private Reader getWithoutCopyrightHeader(Reader reader) throws IOException {
- if (reader == null) {
- return null;
- }
- try {
- String content = IOUtils.toString(reader);
- return new StringReader(TestUtil.removeFTLCopyrightComment(content));
- } finally {
- reader.close();
- }
- }
-
- private InputStream getWithoutCopyrightHeader(InputStream in) throws IOException {
- if (in == null) {
- return null;
- }
- try {
- // Encoding then decosing in ISO-8859-1 is binary loseless
- String content = IOUtils.toString(in, StandardCharsets.ISO_8859_1.name());
- return new ReaderInputStream(
- new StringReader(TestUtil.removeFTLCopyrightComment(content)),
- StandardCharsets.ISO_8859_1);
- } finally {
- in.close();
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/test/MonitoredTemplateLoader.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/test/MonitoredTemplateLoader.java b/freemarker-core/src/test/java/org/apache/freemarker/test/MonitoredTemplateLoader.java
deleted file mode 100644
index 0ab2922..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/test/MonitoredTemplateLoader.java
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.freemarker.test;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.Serializable;
-import java.io.StringReader;
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.freemarker.core.templateresolver.TemplateLoader;
-import org.apache.freemarker.core.templateresolver.TemplateLoaderSession;
-import org.apache.freemarker.core.templateresolver.TemplateLoadingResult;
-import org.apache.freemarker.core.templateresolver.TemplateLoadingResultStatus;
-import org.apache.freemarker.core.templateresolver.TemplateLoadingSource;
-
-import com.google.common.base.Objects;
-
-public class MonitoredTemplateLoader implements TemplateLoader {
-
- private final List<AbstractTemplateLoader2Event> events
- = Collections.synchronizedList(new ArrayList<AbstractTemplateLoader2Event>());
-
- private Map<String, StoredTemplate> templates
- = new ConcurrentHashMap<>();
-
- @Override
- public TemplateLoaderSession createSession() {
- events.add(CreateSessionEvent.INSTANCE);
- return new MonitoredTemplateLoader2Session();
- }
-
- @Override
- public TemplateLoadingResult load(String name, TemplateLoadingSource ifSourceDiffersFrom, Serializable ifVersionDiffersFrom,
- TemplateLoaderSession session)
- throws IOException {
- TemplateLoadingResult result = loadInner(name, ifSourceDiffersFrom, ifVersionDiffersFrom, session);
- events.add(new LoadEvent(name, result.getStatus()));
- return result;
- }
-
- private TemplateLoadingResult loadInner(String name, TemplateLoadingSource ifSourceDiffersFrom,
- Serializable ifVersionDiffersFrom, TemplateLoaderSession session) throws UnsupportedEncodingException {
- if (session.isClosed()) {
- throw new IllegalArgumentException("Template loader session is already closed.");
- }
-
- StoredTemplate storedTemplate = templates.get(name);
- if (storedTemplate == null) {
- return TemplateLoadingResult.NOT_FOUND;
- }
-
- TemplateLoadingSource source = storedTemplate.getSource();
- Serializable version = storedTemplate.getVersion();
- if (ifSourceDiffersFrom != null
- && ifSourceDiffersFrom.equals(source)
- && Objects.equal(ifVersionDiffersFrom, version)) {
- return TemplateLoadingResult.NOT_MODIFIED;
- }
-
- String content = storedTemplate.getContent();
- return storedTemplate.inputStreamEncoding == null
- ? new TemplateLoadingResult(source, version, new StringReader(content), null)
- : new TemplateLoadingResult(source, version,
- new ByteArrayInputStream(content.getBytes(storedTemplate.inputStreamEncoding)), null);
- }
-
- @Override
- public void resetState() {
- events.add(ResetStateEvent.INSTANCE);
- }
-
- public StoredTemplate putTextTemplate(String name, String content) {
- return putTextTemplate(name, "v1", content);
- }
-
- public StoredTemplate putTextTemplate(String name, Serializable version, String content) {
- StoredTemplate storedTemplate = new StoredTemplate(name, version, content, null);
- templates.put(name, storedTemplate);
- return storedTemplate;
- }
-
- public StoredTemplate putBinaryTemplate(String name, String content) {
- return putBinaryTemplate(name, content, "v1");
- }
-
- public StoredTemplate putBinaryTemplate(String name, String content, Serializable version) {
- return putBinaryTemplate(name, content, null, version);
- }
-
- public StoredTemplate putBinaryTemplate(String name, String content,
- Charset inputStreamEncoding, Serializable version) {
- StoredTemplate storedTemplate = new StoredTemplate(name, version, content,
- inputStreamEncoding != null ? inputStreamEncoding : StandardCharsets.UTF_8);
- templates.put(name, storedTemplate);
- return storedTemplate;
- }
-
- public List<AbstractTemplateLoader2Event> getEvents() {
- return events;
- }
-
- /**
- * Gets a filtered event list.
- */
- @SuppressWarnings("unchecked")
- public <E extends AbstractTemplateLoader2Event> List<E> getEvents(Class<E> eventClass) {
- List<E> result = new ArrayList<>();
- for (AbstractTemplateLoader2Event event : events) {
- if (eventClass.isInstance(event)) {
- result.add((E) event);
- }
- }
- return result;
- }
-
- /**
- * Extract from the {@link #getEvents()} the template names for which {@link TemplateLoader#load} was called.
- */
- public List<String> getLoadNames() {
- List<String> result = new ArrayList<>();
- for (AbstractTemplateLoader2Event event : events) {
- if (event instanceof LoadEvent) {
- result.add(((LoadEvent) event).name);
- }
- }
- return result;
- }
-
- public void clearEvents() {
- events.clear();
- }
-
- @SuppressWarnings("serial")
- public static class StoredTemplate implements TemplateLoadingSource {
- private String name;
- private Serializable version;
- private String content;
- private Charset inputStreamEncoding;
-
- private StoredTemplate(String name, Serializable version, String content, Charset inputStreamEncoding) {
- this.name = name;
- this.version = version;
- this.content = content;
- this.inputStreamEncoding = inputStreamEncoding;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public TemplateLoadingSource getSource() {
- return this;
- }
-
- public Serializable getVersion() {
- return version;
- }
-
- public void setVersion(Serializable version) {
- this.version = version;
- }
-
- public String getContent() {
- return content;
- }
-
- public void setContent(String content) {
- this.content = content;
- }
-
- public Charset getInputStreamEncoding() {
- return inputStreamEncoding;
- }
-
- public void setInputStreamEncoding(Charset inputStreamEncoding) {
- this.inputStreamEncoding = inputStreamEncoding;
- }
-
- }
-
- public abstract static class AbstractTemplateLoader2Event {
- // empty
- }
-
- public static class LoadEvent extends AbstractTemplateLoader2Event {
- private final String name;
- private final TemplateLoadingResultStatus resultStatus;
-
- public LoadEvent(String name, TemplateLoadingResultStatus resultStatus) {
- this.name = name;
- this.resultStatus = resultStatus;
- }
-
- public String getName() {
- return name;
- }
-
- public TemplateLoadingResultStatus getResultStatus() {
- return resultStatus;
- }
-
- @Override
- public String toString() {
- return "LoadEvent [name=" + name + ", resultStatus=" + resultStatus + "]";
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- result = prime * result + ((resultStatus == null) ? 0 : resultStatus.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- LoadEvent other = (LoadEvent) obj;
- if (name == null) {
- if (other.name != null)
- return false;
- } else if (!name.equals(other.name))
- return false;
- return resultStatus == other.resultStatus;
- }
-
- }
-
- public static class ResetStateEvent extends AbstractTemplateLoader2Event {
-
- public static ResetStateEvent INSTANCE = new ResetStateEvent();
-
- private ResetStateEvent() {
- //
- }
-
- @Override
- public String toString() {
- return "ResetStateEvent []";
- }
-
- }
-
- public static class CreateSessionEvent extends AbstractTemplateLoader2Event {
-
- public static CreateSessionEvent INSTANCE = new CreateSessionEvent();
-
- private CreateSessionEvent() {
- //
- }
-
- @Override
- public String toString() {
- return "CreateSessionEvent []";
- }
-
- }
-
- public static class CloseSessionEvent extends AbstractTemplateLoader2Event {
-
- public static CloseSessionEvent INSTANCE = new CloseSessionEvent();
-
- private CloseSessionEvent() {
- //
- }
-
- @Override
- public String toString() {
- return "CloseSessionEvent []";
- }
-
- }
-
- public class MonitoredTemplateLoader2Session implements TemplateLoaderSession {
-
- private boolean closed;
-
- @Override
- public void close() {
- closed = true;
- events.add(CloseSessionEvent.INSTANCE);
- }
-
- @Override
- public boolean isClosed() {
- return closed;
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/test/TemplateTest.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/test/TemplateTest.java b/freemarker-core/src/test/java/org/apache/freemarker/test/TemplateTest.java
deleted file mode 100644
index 566cc90..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/test/TemplateTest.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.freemarker.test;
-
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.ParseException;
-import org.apache.freemarker.core.Template;
-import org.apache.freemarker.core.TemplateException;
-import org.apache.freemarker.core.templateresolver.TemplateLoader;
-import org.apache.freemarker.core.templateresolver.impl.ByteArrayTemplateLoader;
-import org.apache.freemarker.core.templateresolver.impl.MultiTemplateLoader;
-import org.apache.freemarker.core.util._NullArgumentException;
-import org.apache.freemarker.core.util._StringUtil;
-import org.apache.freemarker.test.templatesuite.TemplateTestSuite;
-import org.junit.Ignore;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
-/**
- * Superclass of JUnit tests that process templates but aren't practical to implement via {@link TemplateTestSuite}.
- */
-@Ignore
-public abstract class TemplateTest {
-
- private Configuration configuration;
- private boolean dataModelCreated;
- private Object dataModel;
- private Map<String, String> addedTemplates = new HashMap<>();
-
- /**
- * Gets the {@link Configuration} used, automaticlly creating and setting if it wasn't yet.
- */
- protected final Configuration getConfiguration() {
- if (configuration == null) {
- try {
- setConfiguration(createDefaultConfiguration());
- } catch (Exception e) {
- throw new RuntimeException("Failed to create configuration", e);
- }
- }
- return configuration;
- }
-
- /**
- * @param configuration Usually should be built using {@link TestConfigurationBuilder}; not {@code null}.
- */
- protected final void setConfiguration(Configuration configuration) {
- _NullArgumentException.check("configuration", configuration);
- if (this.configuration == configuration) {
- return;
- }
-
- this.configuration = configuration;
- afterConfigurationSet();
- }
-
- protected void assertOutput(String ftl, String expectedOut) throws IOException, TemplateException {
- assertOutput(createTemplate(ftl), expectedOut, false);
- }
-
- private Template createTemplate(String ftl) throws IOException {
- return new Template(null, ftl, getConfiguration());
- }
-
- protected void assertOutputForNamed(String name, String expectedOut) throws IOException, TemplateException {
- assertOutput(getConfiguration().getTemplate(name), expectedOut, false);
- }
-
- @SuppressFBWarnings(value="UI_INHERITANCE_UNSAFE_GETRESOURCE", justification="By design relative to subclass")
- protected void assertOutputForNamed(String name) throws IOException, TemplateException {
- String expectedOut;
- {
- String resName = name + ".out";
- InputStream in = getClass().getResourceAsStream(resName);
- if (in == null) {
- throw new IOException("Reference output resource not found: " + getClass() + ", " + resName);
- }
- try {
- expectedOut = TestUtil.removeTxtCopyrightComment(IOUtils.toString(in, StandardCharsets.UTF_8.name()));
- } finally {
- in.close();
- }
- }
- assertOutput(getConfiguration().getTemplate(name), expectedOut, true);
- }
-
- protected void assertOutput(Template t, String expectedOut) throws TemplateException, IOException {
- assertOutput(t, expectedOut, false);
- }
-
- protected void assertOutput(Template t, String expectedOut, boolean normalizeNewlines)
- throws TemplateException, IOException {
- String actualOut = getOutput(t);
-
- if (normalizeNewlines) {
- expectedOut = normalizeNewLines(expectedOut);
- actualOut = normalizeNewLines(actualOut);
- }
- assertEquals(expectedOut, actualOut);
- }
-
- protected String getOutput(String ftl) throws IOException, TemplateException {
- return getOutput(createTemplate(ftl));
- }
-
- protected String getOutput(Template t) throws TemplateException, IOException {
- StringWriter out = new StringWriter();
- t.process(getDataModel(), out);
- return out.toString();
- }
-
- protected Configuration createDefaultConfiguration() throws Exception {
- return new TestConfigurationBuilder().build();
- }
-
- private void afterConfigurationSet() {
- ensureAddedTemplatesPresent();
- addCommonTemplates();
- }
-
- private void ensureAddedTemplatesPresent() {
- for (Map.Entry<String, String> ent : addedTemplates.entrySet()) {
- addTemplate(ent.getKey(), ent.getValue());
- }
- }
-
- protected void addCommonTemplates() {
- //
- }
-
- protected Object getDataModel() {
- if (!dataModelCreated) {
- dataModel = createDataModel();
- dataModelCreated = true;
- }
- return dataModel;
- }
-
- protected Object createDataModel() {
- return null;
- }
-
- @SuppressWarnings("boxing")
- protected Map<String, Object> createCommonTestValuesDataModel() {
- Map<String, Object> dataModel = new HashMap<>();
- dataModel.put("map", Collections.singletonMap("key", "value"));
- dataModel.put("list", Collections.singletonList("item"));
- dataModel.put("s", "text");
- dataModel.put("n", 1);
- dataModel.put("b", true);
- dataModel.put("bean", new TestBean());
- return dataModel;
- }
-
- protected void addTemplate(String name, String content) {
- Configuration cfg = getConfiguration();
- TemplateLoader tl = cfg.getTemplateLoader();
- ByteArrayTemplateLoader btl;
- btl = extractByteArrayTemplateLoader(tl);
- btl.putTemplate(name, content.getBytes(StandardCharsets.UTF_8));
- addedTemplates.put(name, content);
- }
-
- private ByteArrayTemplateLoader extractByteArrayTemplateLoader(TemplateLoader tl) {
- if (tl instanceof MultiTemplateLoader) {
- MultiTemplateLoader mtl = (MultiTemplateLoader) tl;
- for (int i = 0; i < mtl.getTemplateLoaderCount(); i++) {
- TemplateLoader tli = mtl.getTemplateLoader(i);
- if (tli instanceof ByteArrayTemplateLoader) {
- return (ByteArrayTemplateLoader) tli;
- }
- }
- throw new IllegalStateException(
- "The template loader was a MultiTemplateLoader that didn't contain ByteArrayTemplateLoader: "
- + tl);
- } else if (tl instanceof ByteArrayTemplateLoader) {
- return (ByteArrayTemplateLoader) tl;
- } else if (tl == null) {
- throw new IllegalStateException("The templateLoader was null in the configuration");
- } else {
- throw new IllegalStateException(
- "The template loader was already set to a non-ByteArrayTemplateLoader non-MultiTemplateLoader: "
- + tl);
- }
- }
-
- protected void addToDataModel(String name, Object value) {
- Object dm = getDataModel();
- if (dm == null) {
- dm = new HashMap<String, Object>();
- dataModel = dm;
- }
- if (dm instanceof Map) {
- ((Map) dm).put(name, value);
- } else {
- throw new IllegalStateException("Can't add to non-Map data-model: " + dm);
- }
- }
-
- protected Properties loadPropertiesFile(String name) throws IOException {
- Properties props = new Properties();
- InputStream in = getClass().getResourceAsStream(name);
- try {
- props.load(in);
- } finally {
- in.close();
- }
- return props;
- }
-
- protected Throwable assertErrorContains(String ftl, String... expectedSubstrings) {
- return assertErrorContains(null, ftl, null, expectedSubstrings);
- }
-
- protected Throwable assertErrorContains(String ftl, Class<? extends Throwable> exceptionClass,
- String... expectedSubstrings) {
- return assertErrorContains(null, ftl, exceptionClass, expectedSubstrings);
- }
-
- protected void assertErrorContainsForNamed(String name, String... expectedSubstrings) {
- assertErrorContains(name, null, null, expectedSubstrings);
- }
-
- protected void assertErrorContainsForNamed(String name, Class<? extends Throwable> exceptionClass,
- String... expectedSubstrings) {
- assertErrorContains(name, null, exceptionClass, expectedSubstrings);
- }
-
- private Throwable assertErrorContains(String name, String ftl, Class<? extends Throwable> exceptionClass,
- String... expectedSubstrings) {
- try {
- Template t;
- if (ftl == null) {
- t = getConfiguration().getTemplate(name);
- } else {
- t = new Template("adhoc", ftl, getConfiguration());
- }
- t.process(getDataModel(), new StringWriter());
- fail("The tempalte had to fail");
- return null;
- } catch (TemplateException e) {
- if (exceptionClass != null) {
- assertThat(e, instanceOf(exceptionClass));
- }
- assertContainsAll(e.getMessageWithoutStackTop(), expectedSubstrings);
- return e;
- } catch (ParseException e) {
- if (exceptionClass != null) {
- assertThat(e, instanceOf(exceptionClass));
- }
- assertContainsAll(e.getEditorMessage(), expectedSubstrings);
- return e;
- } catch (Exception e) {
- if (exceptionClass != null) {
- assertThat(e, instanceOf(exceptionClass));
- return e;
- } else {
- throw new RuntimeException("Unexpected exception class: " + e.getClass().getName(), e);
- }
- }
- }
-
- private void assertContainsAll(String msg, String... expectedSubstrings) {
- for (String needle: expectedSubstrings) {
- if (needle.startsWith("\\!")) {
- String netNeedle = needle.substring(2);
- if (msg.contains(netNeedle)) {
- fail("The message shouldn't contain substring " + _StringUtil.jQuote(netNeedle) + ":\n" + msg);
- }
- } else if (!msg.contains(needle)) {
- fail("The message didn't contain substring " + _StringUtil.jQuote(needle) + ":\n" + msg);
- }
- }
- }
-
- private String normalizeNewLines(String s) {
- return _StringUtil.replace(s, "\r\n", "\n").replace('\r', '\n');
- }
-
- public static class TestBean {
- private int x;
- private boolean b;
-
- public int getX() {
- return x;
- }
- public void setX(int x) {
- this.x = x;
- }
- public boolean isB() {
- return b;
- }
- public void setB(boolean b) {
- this.b = b;
- }
-
- public int intM() {
- return 1;
- }
-
- public int intMP(int x) {
- return x;
- }
-
- public void voidM() {
-
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/test/TestConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/test/TestConfigurationBuilder.java b/freemarker-core/src/test/java/org/apache/freemarker/test/TestConfigurationBuilder.java
deleted file mode 100644
index 7f869db..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/test/TestConfigurationBuilder.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.freemarker.test;
-
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.Locale;
-import java.util.TimeZone;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.Configuration.Builder;
-import org.apache.freemarker.core.Version;
-import org.apache.freemarker.core.templateresolver.TemplateLoader;
-import org.apache.freemarker.core.templateresolver.impl.ByteArrayTemplateLoader;
-import org.apache.freemarker.core.templateresolver.impl.ClassTemplateLoader;
-import org.apache.freemarker.core.templateresolver.impl.MultiTemplateLoader;
-
-/**
- * Configuration builder you should use instead of {@link Builder} in unit tests.
- * It tries to make the behavior of the tests independent of the environment where we run them. For convenience, it
- * has a {@link ByteArrayTemplateLoader} as the default template loader.
- */
-public class TestConfigurationBuilder extends Configuration.ExtendableBuilder<TestConfigurationBuilder> {
-
- private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getTimeZone("GMT+1");
- private final Class<?> classTemplateLoaderBase;
- private TemplateLoader defaultTemplateLoader;
-
- public TestConfigurationBuilder() {
- this((Version) null);
- }
-
- public TestConfigurationBuilder(Class<?> classTemplateLoaderBase) {
- this(null, classTemplateLoaderBase);
- }
-
- public TestConfigurationBuilder(Version incompatibleImprovements) {
- this(incompatibleImprovements, null);
- }
-
- public TestConfigurationBuilder(Version incompatibleImprovements, Class<?> classTemplateLoaderBase) {
- super(incompatibleImprovements != null ? incompatibleImprovements : Configuration.VERSION_3_0_0);
- this.classTemplateLoaderBase = classTemplateLoaderBase;
- }
-
- @Override
- protected Locale getDefaultLocale() {
- return Locale.US;
- }
-
- @Override
- protected Charset getDefaultSourceEncoding() {
- return StandardCharsets.UTF_8;
- }
-
- @Override
- protected TimeZone getDefaultTimeZone() {
- return DEFAULT_TIME_ZONE;
- }
-
- @Override
- protected TemplateLoader getDefaultTemplateLoader() {
- if (defaultTemplateLoader == null) {
- if (classTemplateLoaderBase == null) {
- defaultTemplateLoader = new ByteArrayTemplateLoader();
- } else {
- defaultTemplateLoader = new MultiTemplateLoader(
- new ByteArrayTemplateLoader(),
- new ClassTemplateLoader(classTemplateLoaderBase, ""));
- }
- }
- return defaultTemplateLoader;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/test/hamcerst/Matchers.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/test/hamcerst/Matchers.java b/freemarker-core/src/test/java/org/apache/freemarker/test/hamcerst/Matchers.java
deleted file mode 100644
index 7552a8d..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/test/hamcerst/Matchers.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.freemarker.test.hamcerst;
-
-import org.hamcrest.Matcher;
-
-public final class Matchers {
-
- private Matchers() {
- // Not meant to be instantiated
- }
-
- public static Matcher<String> containsStringIgnoringCase(String substring) {
- return StringContainsIgnoringCase.containsStringIgnoringCase(substring);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/test/hamcerst/StringContainsIgnoringCase.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/test/hamcerst/StringContainsIgnoringCase.java b/freemarker-core/src/test/java/org/apache/freemarker/test/hamcerst/StringContainsIgnoringCase.java
deleted file mode 100644
index 914bbd1..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/test/hamcerst/StringContainsIgnoringCase.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.freemarker.test.hamcerst;
-
-import org.hamcrest.Factory;
-import org.hamcrest.Matcher;
-import org.hamcrest.core.SubstringMatcher;
-
-public class StringContainsIgnoringCase extends SubstringMatcher {
-
- public StringContainsIgnoringCase(String substring) {
- super(substring);
- }
-
- @Override
- protected boolean evalSubstringOf(String s) {
- return s.toLowerCase().contains(substring.toLowerCase());
- }
-
- @Override
- protected String relationship() {
- return "containing ignoring case";
- }
-
- @Factory
- public static Matcher<String> containsStringIgnoringCase(String substring) {
- return new StringContainsIgnoringCase(substring);
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/test/package.html
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/test/package.html b/freemarker-core/src/test/java/org/apache/freemarker/test/package.html
deleted file mode 100644
index 3dbb3fb..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/test/package.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<html>
-<head>
-</head>
-<body>
-<p>Testing-related classes that don't fit into the normal packages.
-Normally you put the test classes into the same package where the
-tested classes are, but under <tt>src/test/java/<tt> instead of
-under <tt>src/main/java/<tt>.</p>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/28a276c8/freemarker-core/src/test/java/org/apache/freemarker/test/templatesuite/TemplateTestCase.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/test/java/org/apache/freemarker/test/templatesuite/TemplateTestCase.java b/freemarker-core/src/test/java/org/apache/freemarker/test/templatesuite/TemplateTestCase.java
deleted file mode 100644
index 07bf0ca..0000000
--- a/freemarker-core/src/test/java/org/apache/freemarker/test/templatesuite/TemplateTestCase.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.freemarker.test.templatesuite;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.TimeZone;
-import java.util.TreeSet;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.apache.freemarker.core.ASTPrinter;
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.ConfigurationException;
-import org.apache.freemarker.core.Template;
-import org.apache.freemarker.core.TemplateException;
-import org.apache.freemarker.core.Version;
-import org.apache.freemarker.core.model.TemplateBooleanModel;
-import org.apache.freemarker.core.model.TemplateDateModel;
-import org.apache.freemarker.core.model.TemplateMethodModel;
-import org.apache.freemarker.core.model.TemplateNodeModel;
-import org.apache.freemarker.core.model.TemplateScalarModel;
-import org.apache.freemarker.core.model.TemplateSequenceModel;
-import org.apache.freemarker.core.model.impl.DefaultNonListCollectionAdapter;
-import org.apache.freemarker.core.model.impl.DefaultObjectWrapper;
-import org.apache.freemarker.core.model.impl.ResourceBundleModel;
-import org.apache.freemarker.core.model.impl.SimpleCollection;
-import org.apache.freemarker.core.model.impl.SimpleDate;
-import org.apache.freemarker.core.model.impl.SimpleNumber;
-import org.apache.freemarker.core.templateresolver.impl.ClassTemplateLoader;
-import org.apache.freemarker.core.util._NullArgumentException;
-import org.apache.freemarker.core.util._NullWriter;
-import org.apache.freemarker.core.util._StringUtil;
-import org.apache.freemarker.dom.NodeModel;
-import org.apache.freemarker.test.CopyrightCommentRemoverTemplateLoader;
-import org.apache.freemarker.test.TestConfigurationBuilder;
-import org.apache.freemarker.test.templatesuite.models.BooleanAndStringTemplateModel;
-import org.apache.freemarker.test.templatesuite.models.BooleanHash1;
-import org.apache.freemarker.test.templatesuite.models.BooleanHash2;
-import org.apache.freemarker.test.templatesuite.models.BooleanList1;
-import org.apache.freemarker.test.templatesuite.models.BooleanList2;
-import org.apache.freemarker.test.templatesuite.models.BooleanVsStringMethods;
-import org.apache.freemarker.test.templatesuite.models.JavaObjectInfo;
-import org.apache.freemarker.test.templatesuite.models.Listables;
-import org.apache.freemarker.test.templatesuite.models.MultiModel1;
-import org.apache.freemarker.test.templatesuite.models.OverloadedMethods2;
-import org.apache.freemarker.test.templatesuite.models.VarArgTestModel;
-import org.apache.freemarker.test.util.AssertDirective;
-import org.apache.freemarker.test.util.AssertEqualsDirective;
-import org.apache.freemarker.test.util.AssertFailsDirective;
-import org.apache.freemarker.test.util.FileTestCase;
-import org.apache.freemarker.test.util.NoOutputDirective;
-import org.apache.freemarker.test.util.XMLLoader;
-import org.junit.Ignore;
-import org.xml.sax.InputSource;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-
-import junit.framework.AssertionFailedError;
-
-/**
- * Instances of this are created and called by {@link TemplateTestSuite}. (It's on "Ignore" so that Eclipse doesn't try
- * to run this alone.)
- */
-@Ignore
-public class TemplateTestCase extends FileTestCase {
-
- // Name of variables exposed to all test FTL-s:
- private static final String ICI_INT_VALUE_VAR_NAME = "iciIntValue";
- private static final String TEST_NAME_VAR_NAME = "testName";
- private static final String JAVA_OBJECT_INFO_VAR_NAME = "javaObjectInfo";
- private static final String NO_OUTPUT_VAR_NAME = "noOutput";
- private static final String ASSERT_FAILS_VAR_NAME = "assertFails";
- private static final String ASSERT_EQUALS_VAR_NAME = "assertEquals";
- private static final String ASSERT_VAR_NAME = "assert";
-
- private final String simpleTestName;
- private final String templateName;
- private final String expectedFileName;
- private final boolean noOutput;
-
- private final Configuration.ExtendableBuilder confB;
- private final HashMap<String, Object> dataModel = new HashMap<>();
-
- public TemplateTestCase(String testName, String simpleTestName, String templateName, String expectedFileName, boolean noOutput,
- Version incompatibleImprovements) {
- super(testName);
- _NullArgumentException.check("testName", testName);
-
- _NullArgumentException.check("simpleTestName", simpleTestName);
- this.simpleTestName = simpleTestName;
-
- _NullArgumentException.check("templateName", templateName);
- this.templateName = templateName;
-
- _NullArgumentException.check("expectedFileName", expectedFileName);
- this.expectedFileName = expectedFileName;
-
- this.noOutput = noOutput;
-
- confB = new TestConfigurationBuilder(incompatibleImprovements);
- }
-
- public void setSetting(String param, String value) throws IOException {
- if ("auto_import".equals(param)) {
- StringTokenizer st = new StringTokenizer(value);
- if (!st.hasMoreTokens()) fail("Expecting libname");
- String libname = st.nextToken();
- if (!st.hasMoreTokens()) fail("Expecting 'as <alias>' in autoimport");
- String as = st.nextToken();
- if (!as.equals("as")) fail("Expecting 'as <alias>' in autoimport");
- if (!st.hasMoreTokens()) fail("Expecting alias after 'as' in autoimport");
- String alias = st.nextToken();
- confB.addAutoImport(alias, libname);
- } else if ("source_encoding".equals(param)) {
- confB.setSourceEncoding(Charset.forName(value));
- // INCOMPATIBLE_IMPROVEMENTS is a list here, and was already set in the constructor.
- } else if (!Configuration.ExtendableBuilder.INCOMPATIBLE_IMPROVEMENTS_KEY.equals(param)) {
- try {
- confB.setSetting(param, value);
- } catch (ConfigurationException e) {
- throw new RuntimeException(
- "Failed to set setting " +
- _StringUtil.jQuote(param) + " to " +
- _StringUtil.jQuote(value) + "; see cause exception.",
- e);
- }
- }
- }
-
- /*
- * 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 {
- confB.setTemplateLoader(
- new CopyrightCommentRemoverTemplateLoader(
- new ClassTemplateLoader(TemplateTestCase.class, "templates")));
-
- DefaultObjectWrapper dow = new DefaultObjectWrapper.Builder(Configuration.VERSION_3_0_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, confB.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("default-object-wrapper")) {
- dataModel.put("array", new String[] { "array-0", "array-1"});
- dataModel.put("list", Arrays.asList("list-0", "list-1", "list-2"));
- Map<Object, Object> tmap = new HashMap<>();
- tmap.put("key", "value");
- Object objKey = new Object();
- tmap.put(objKey, "objValue");
- dataModel.put("map", tmap);
- dataModel.put("objKey", objKey);
- dataModel.put("obj", new org.apache.freemarker.test.templatesuite.models.BeanTestClass());
- dataModel.put("resourceBundle",
- new ResourceBundleModel(ResourceBundle.getBundle(
- "org.apache.freemarker.test.templatesuite.models.BeansTestResources"), dow));
- dataModel.put("date", new GregorianCalendar(1974, 10, 14).getTime());
- dataModel.put("statics", dow.getStaticModels());
- dataModel.put("enums", dow.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(dow) );
- dataModel.put( "list2", new BooleanList2(dow) );
-
- 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<>();
- mStringC.put("c", "string");
- dataModel.put("mStringC", mStringC);
-
- HashMap<String, String> mStringCNull = new HashMap<>();
- mStringCNull.put("c", null);
- dataModel.put("mStringCNull", mStringCNull);
-
- HashMap<Character, String> mCharC = new HashMap<>();
- mCharC.put(Character.valueOf('c'), "char");
- dataModel.put("mCharC", mCharC);
-
- HashMap<String, String> mCharCNull = new HashMap<>();
- mCharCNull.put("c", null);
- dataModel.put("mCharCNull", mCharCNull);
-
- HashMap<Object, String> mMixed = new HashMap<>();
- 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 = XMLLoader.toModel(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<>(), dow));
- dataModel.put("testcollectionEx", DefaultNonListCollectionAdapter.adapt(new HashSet<>(), dow));
- 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));
- confB.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 = XMLLoader.toModel(is);
- dataModel.put("doc", nm);
- } else if (simpleTestName.equals("xmlns2")) {
- InputSource is = new InputSource(getClass().getResourceAsStream("models/xmlns2.xml"));
- NodeModel nm = XMLLoader.toModel(is);
- dataModel.put("doc", nm);
- } else if (simpleTestName.equals("xmlns3") || simpleTestName.equals("xmlns4")) {
- InputSource is = new InputSource(getClass().getResourceAsStream("models/xmlns3.xml"));
- NodeModel nm = XMLLoader.toModel(is);
- dataModel.put("doc", nm);
- } else if (simpleTestName.equals("xmlns5")) {
- InputSource is = new InputSource(getClass().getResourceAsStream("models/defaultxmlns1.xml"));
- NodeModel nm = XMLLoader.toModel(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 = XMLLoader.toModel(is);
- dataModel.put("doc", nm);
- } else if (simpleTestName.startsWith("sequence-builtins")) {
- Set<String> abcSet = new TreeSet<>();
- abcSet.add("a");
- abcSet.add("b");
- abcSet.add("c");
- dataModel.put("abcSet", abcSet);
- dataModel.put("abcSetNonSeq", DefaultNonListCollectionAdapter.adapt(abcSet, dow));
-
- List<String> listWithNull = new ArrayList<>();
- listWithNull.add("a");
- listWithNull.add(null);
- listWithNull.add("c");
- dataModel.put("listWithNull", listWithNull);
-
- List<String> listWithNullsOnly = new ArrayList<>();
- listWithNull.add(null);
- listWithNull.add(null);
- listWithNull.add(null);
- dataModel.put("listWithNullsOnly", listWithNullsOnly);
-
- dataModel.put("abcCollection", new SimpleCollection(abcSet, dow));
-
- Set<String> set = new HashSet<>();
- 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("boolean-formatting")) {
- 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("overloaded-methods")) {
- dataModel.put("obj", new OverloadedMethods2());
- }
- }
-
- @Override
- public void runTest() throws IOException, ConfigurationException {
- Template template;
- try {
- template = confB.build().getTemplate(templateName);
- } catch (IOException e) {
- throw new AssertionFailedError(
- "Could not load template " + _StringUtil.jQuote(templateName) + ":\n" + getStackTrace(e));
- }
- ASTPrinter.validateAST(template);
-
- StringWriter out = noOutput ? null : new StringWriter();
- try {
- template.process(dataModel, out != null ? out : _NullWriter.INSTANCE);
- } catch (TemplateException e) {
- throw new AssertionFailedError("Template " + _StringUtil.jQuote(templateName) + " has stopped with error:\n"
- + getStackTrace(e));
- }
-
- if (out != null) {
- assertExpectedFileEqualsString(expectedFileName, out.toString());
- }
- }
-
- private String getStackTrace(Throwable e) {
- StringWriter sw = new StringWriter();
- e.printStackTrace(new PrintWriter(sw));
- return sw.toString();
- }
-
- @Override
- protected String getExpectedContentFileDirectoryResourcePath() throws IOException {
- return joinResourcePaths(super.getExpectedContentFileDirectoryResourcePath(), "expected");
- }
-
- @Override
- protected Charset getTestResourceDefaultCharset() {
- return confB.getOutputEncoding() != null ? confB.getOutputEncoding() : StandardCharsets.UTF_8;
- }
-
- static class TestBoolean implements TemplateBooleanModel, TemplateScalarModel {
- @Override
- public boolean getAsBoolean() {
- return true;
- }
-
- @Override
- public String getAsString() {
- return "de";
- }
- }
-
- static class TestMethod implements TemplateMethodModel {
- @Override
- public Object exec(List arguments) {
- return "x";
- }
- }
-
- static class TestNode implements TemplateNodeModel {
-
- @Override
- public String getNodeName() {
- return "name";
- }
-
- @Override
- public TemplateNodeModel getParentNode() {
- return null;
- }
-
- @Override
- public String getNodeType() {
- return "element";
- }
-
- @Override
- public TemplateSequenceModel getChildNodes() {
- return null;
- }
-
- @Override
- public String getNodeNamespace() {
- return null;
- }
- }
-
- public Object getTestMapBean() {
- Map<String, Object> testBean = new TestMapBean();
- testBean.put("name", "Chris");
- testBean.put("location", "San Francisco");
- testBean.put("age", Integer.valueOf(27));
- return testBean;
- }
-
- public static class TestMapBean extends HashMap<String, Object> {
- public String getName() {
- return "Christopher";
- }
- public int getLuckyNumber() {
- return 7;
- }
- }
-
- public static class TestBean {
-
- public int m(int n) {
- return n * 10;
- }
-
- public int mOverloaded(int n) {
- return n * 10;
- }
-
- public String mOverloaded(String s) {
- return s.toUpperCase();
- }
-
- }
-
-}