blob: 10153a751e0f507f79ab416aaadeac92cf24df42 [file] [log] [blame]
/*
* 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.cocoon.components.treeprocessor.variables;
import java.util.HashMap;
import java.util.Map;
import org.apache.cocoon.SitemapComponentTestCase;
import org.apache.cocoon.components.treeprocessor.InvokeContext;
import org.apache.cocoon.environment.mock.MockRequest;
import org.apache.cocoon.sitemap.PatternException;
/**
* Test case for the nested variant of the PreparedVariableResolver
*
* @author <a href="mailto:uv@upaya.co.uk">Upayavira</a>
* @version CVS $Id$
*/
public class PreparedVariableResolverTestCase extends SitemapComponentTestCase {
public void testNestedExpressions() throws Exception {
String expr = "{request-param:{request-param:foo}}";
MockRequest request = getRequest();
request.reset();
request.addParameter("foo", "bar");
request.addParameter("bar", "123");
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements = new HashMap();
context.pushMap("sitemap", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals("123", resolver.resolve(context, getObjectModel()));
}
public void testNestedModuleAndSitemapExpressions() throws Exception {
String expr = "{request-param:f{1}}";
MockRequest request = getRequest();
request.reset();
request.addParameter("foo", "123");
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements = new HashMap();
sitemapElements.put("1", "oo");
context.pushMap("sitemap", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals("123", resolver.resolve(context, getObjectModel()));
}
public void testAnchors() throws PatternException {
String expr = "{#label:name}";
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements = new HashMap();
sitemapElements.put("name", "123");
context.pushMap("label", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals("123", resolver.resolve(context, getObjectModel()));
}
public void testSitemapVariables() throws PatternException {
String expr = "123{1}";
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements = new HashMap();
sitemapElements.put("1", "abc");
context.pushMap("label", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals("123abc", resolver.resolve(context, getObjectModel()));
}
public void testSitemapVariablesWithText() throws PatternException {
String expr = "123{1}/def";
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements = new HashMap();
sitemapElements.put("1", "abc");
context.pushMap("label", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals("123abc/def", resolver.resolve(context, getObjectModel()));
}
public void testPrefixedSitemapVariable() throws PatternException {
String expr = "123{sitemap:1}/def";
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements = new HashMap();
sitemapElements.put("1", "abc");
context.pushMap("label", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals("123abc/def", resolver.resolve(context, getObjectModel()));
}
public void testMultilevelSitemapVariables() throws PatternException {
String expr = "from {../1} to {1}";
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements;
sitemapElements = new HashMap();
sitemapElements.put("1", "juliet");
context.pushMap("label1", sitemapElements);
sitemapElements = new HashMap();
sitemapElements.put("1", "oscar");
context.pushMap("label2", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals("from juliet to oscar", resolver.resolve(context, getObjectModel()));
}
public void testRootSitemapVariables() throws PatternException {
String expr = "from {/1} to {1}";
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements;
sitemapElements = new HashMap();
sitemapElements.put("1", "juliet");
context.pushMap("label1", sitemapElements);
sitemapElements = new HashMap();
sitemapElements.put("1", "oscar");
context.pushMap("label2", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals("from juliet to oscar", resolver.resolve(context, getObjectModel()));
}
public void testColonInTextContent() throws PatternException {
String expr = "http://cocoon.apache.org";
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements;
sitemapElements = new HashMap();
context.pushMap("label", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals("http://cocoon.apache.org", resolver.resolve(context, getObjectModel()));
}
public void testColonBeginningTextContent() throws PatternException {
String expr = ":colon-starts-this";
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements;
sitemapElements = new HashMap();
context.pushMap("label", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals(":colon-starts-this", resolver.resolve(context, getObjectModel()));
}
public void testEmbeddedColon() throws PatternException {
String expr = "{1}:{1}";
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements;
sitemapElements = new HashMap();
sitemapElements.put("1", "abc");
context.pushMap("label", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals("abc:abc", resolver.resolve(context, getObjectModel()));
}
public void testEscapedBraces() throws PatternException {
String expr = "This is a \\{brace\\}";
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements;
sitemapElements = new HashMap();
context.pushMap("label", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals("This is a {brace}", resolver.resolve(context, getObjectModel()));
}
public void testModuleWithoutOption() throws PatternException {
String expr = "{baselink:}";
InvokeContext context = new InvokeContext(true);
context.enableLogging(getLogger());
Map sitemapElements = new HashMap();
context.pushMap("sitemap", sitemapElements);
PreparedVariableResolver resolver = new PreparedVariableResolver(expr, getManager());
assertEquals("", resolver.resolve(context, getObjectModel()));
}
}