aboutsummaryrefslogtreecommitdiff
path: root/velocity-engine-core/src/test/java/org/apache/velocity/test/StringResourceLoaderRepositoryTestCase.java
diff options
context:
space:
mode:
Diffstat (limited to 'velocity-engine-core/src/test/java/org/apache/velocity/test/StringResourceLoaderRepositoryTestCase.java')
-rw-r--r--velocity-engine-core/src/test/java/org/apache/velocity/test/StringResourceLoaderRepositoryTestCase.java214
1 files changed, 214 insertions, 0 deletions
diff --git a/velocity-engine-core/src/test/java/org/apache/velocity/test/StringResourceLoaderRepositoryTestCase.java b/velocity-engine-core/src/test/java/org/apache/velocity/test/StringResourceLoaderRepositoryTestCase.java
new file mode 100644
index 00000000..23aee4ce
--- /dev/null
+++ b/velocity-engine-core/src/test/java/org/apache/velocity/test/StringResourceLoaderRepositoryTestCase.java
@@ -0,0 +1,214 @@
+package org.apache.velocity.test;
+
+/*
+ * 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.
+ */
+
+import junit.framework.TestCase;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.runtime.RuntimeSingleton;
+import org.apache.velocity.runtime.resource.loader.StringResourceLoader;
+import org.apache.velocity.runtime.resource.util.StringResourceRepository;
+import org.apache.velocity.runtime.resource.util.StringResourceRepositoryImpl;
+import org.apache.velocity.test.misc.TestLogger;
+
+import java.io.StringWriter;
+
+/**
+ * Tests ability to have multiple repositories in the same app.
+ *
+ * @author Nathan Bubna
+ * @version $Id: StringResourceLoaderRepositoryTestCase.java 479058 2006-11-25 00:26:32Z henning $
+ */
+public class StringResourceLoaderRepositoryTestCase extends TestCase
+{
+ private VelocityContext context;
+
+ public StringResourceLoaderRepositoryTestCase(String name)
+ {
+ super(name);
+ }
+
+ @Override
+ public void setUp() throws Exception
+ {
+ Velocity.reset();
+ Velocity.setProperty(Velocity.RESOURCE_LOADERS, "string");
+ Velocity.addProperty("string.resource.loader.class", StringResourceLoader.class.getName());
+ Velocity.addProperty("string.resource.loader.modificationCheckInterval", "1");
+ Velocity.setProperty(Velocity.RUNTIME_LOG_INSTANCE, new TestLogger());
+ Velocity.init();
+
+ StringResourceRepository repo = getRepo(null, null);
+ repo.putStringResource("foo", "This is $foo");
+ repo.putStringResource("bar", "This is $bar");
+
+ context = new VelocityContext();
+ context.put("foo", "wonderful!");
+ context.put("bar", "horrible!");
+ context.put("woogie", "a woogie");
+ }
+
+
+ protected VelocityEngine newStringEngine(String repoName, boolean isStatic)
+ {
+ VelocityEngine engine = new VelocityEngine();
+ TestLogger logger = new TestLogger();
+ engine.setProperty(Velocity.RESOURCE_LOADERS, "string");
+ engine.addProperty("string.resource.loader.class", StringResourceLoader.class.getName());
+ if (repoName != null)
+ {
+ engine.addProperty("string.resource.loader.repository.name", repoName);
+ }
+ if (!isStatic)
+ {
+ engine.addProperty("string.resource.loader.repository.static", "false");
+ }
+ engine.addProperty("string.resource.loader.modificationCheckInterval", "1");
+ engine.setProperty(Velocity.RUNTIME_LOG_INSTANCE, logger);
+ return engine;
+ }
+
+ protected StringResourceRepository getRepo(String name, VelocityEngine engine)
+ {
+ if (engine == null)
+ {
+ if (name == null)
+ {
+ return StringResourceLoader.getRepository();
+ }
+ else
+ {
+ return StringResourceLoader.getRepository(name);
+ }
+ }
+ else
+ {
+ if (name == null)
+ {
+ return (StringResourceRepository)engine.getApplicationAttribute(StringResourceLoader.REPOSITORY_NAME_DEFAULT);
+ }
+ else
+ {
+ return (StringResourceRepository)engine.getApplicationAttribute(name);
+ }
+ }
+ }
+
+ protected String render(Template template) throws Exception
+ {
+ StringWriter out = new StringWriter();
+ template.merge(this.context, out);
+ return out.toString();
+ }
+
+
+ public void testSharedRepo() throws Exception
+ {
+ // this engine's string resource loader should share a repository
+ // with the singleton's string resource loader
+ VelocityEngine engine = newStringEngine(null, true);
+
+ // get and merge the same template from both runtimes with the same context
+ String engineOut = render(engine.getTemplate("foo"));
+ String singletonOut = render(RuntimeSingleton.getTemplate("foo"));
+
+ // make sure they're equal
+ assertEquals(engineOut, singletonOut);
+ }
+
+ public void testAlternateStaticRepo() throws Exception
+ {
+ VelocityEngine engine = newStringEngine("alternate.repo", true);
+ // should be null be for init
+ StringResourceRepository repo = getRepo("alternate.repo", null);
+ assertNull(repo);
+ engine.init();
+ // and not null after init
+ repo = getRepo("alternate.repo", null);
+ assertNotNull(repo);
+ repo.putStringResource("foo", "This is NOT $foo");
+
+ // get and merge template with the same name from both runtimes with the same context
+ String engineOut = render(engine.getTemplate("foo"));
+ String singletonOut = render(RuntimeSingleton.getTemplate("foo"));
+
+ // make sure they're NOT equal
+ assertFalse(engineOut.equals(singletonOut));
+ }
+
+ public void testPreCreatedStaticRepo() throws Exception
+ {
+ VelocityEngine engine = newStringEngine("my.repo", true);
+ MyRepo repo = new MyRepo();
+ repo.put("bar", "This is NOT $bar");
+ StringResourceLoader.setRepository("my.repo", repo);
+
+ String out = render(engine.getTemplate("bar"));
+ assertEquals(out, "This is NOT horrible!");
+ }
+
+ public void testAppRepo() throws Exception
+ {
+ VelocityEngine engine = newStringEngine(null, false);
+ engine.init();
+
+ StringResourceRepository repo = getRepo(null, engine);
+ assertNotNull(repo);
+ repo.putStringResource("woogie", "What is $woogie?");
+
+ String out = render(engine.getTemplate("woogie"));
+ assertEquals(out, "What is a woogie?");
+ }
+
+ public void testAlternateAppRepo() throws Exception
+ {
+ VelocityEngine engine = newStringEngine("alternate.app.repo", false);
+ engine.init();
+
+ StringResourceRepository repo = getRepo("alternate.app.repo", engine);
+ assertNotNull(repo);
+ repo.putStringResource("you/foo.vm", "You look $foo");
+
+ String out = render(engine.getTemplate("you/foo.vm"));
+ assertEquals(out, "You look wonderful!");
+ }
+
+ public void testPreCreatedAppRepo() throws Exception
+ {
+ VelocityEngine engine = newStringEngine("my.app.repo", false);
+ MyRepo repo = new MyRepo();
+ repo.put("you/bar.vm", "You look $bar");
+ engine.setApplicationAttribute("my.app.repo", repo);
+
+ String out = render(engine.getTemplate("you/bar.vm"));
+ assertEquals(out, "You look horrible!");
+ }
+
+ public static class MyRepo extends StringResourceRepositoryImpl
+ {
+ public void put(String name, String template)
+ {
+ putStringResource(name, template);
+ }
+ }
+
+}