blob: 8eb3f7b573d7a2ae70ca1f5d4abfac16e548ff32 [file] [log] [blame]
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 org.apache.velocity.runtime.RuntimeConstants;
/**
* This class tests the BlockMacro functionality.
*/
public class BlockMacroTestCase extends BaseTestCase
{
public BlockMacroTestCase(String name)
{
super(name);
}
public void testMultipleBodyContentIncludes() throws Exception
{
String template = "#macro(foo $txt) Yeah, $txt! $bodyContent $bodyContent#end #@foo(\"woohoo\")jee#end";
String result = " Yeah, woohoo! jee jee";
assertEvalEquals(result, template);
}
public void testNestedVelocityLogic() throws Exception
{
String template = "#macro(foo $txt) Yeah, $txt! $bodyContent#end #@foo(\"woohoo\")#foreach($i in [1..3])$i:#{end}#end";
String result = " Yeah, woohoo! 1:2:3:";
assertEvalEquals(result, template);
}
public void testEmptyBody() throws Exception
{
String template = "#macro(foo $txt) Yeah, $txt! $bodyContent#end #@foo(\"woohoo\")#end";
String result = " Yeah, woohoo! ";
assertEvalEquals(result, template);
}
public void testNoArgumentsEmptyBodyCall() throws Exception
{
String template = "#macro(foo) Yeah! $bodyContent#end #@foo()#end";
String result = " Yeah! ";
assertEvalEquals(result, template);
}
public void testCustomBodyReference() throws Exception
{
engine.setProperty(RuntimeConstants.VM_BODY_REFERENCE, "myBody");
String template = "#macro(foo) Yeah! $myBody#end #@foo()#end";
String result = " Yeah! ";
assertEvalEquals(result, template);
}
public void testVelocity671() throws Exception
{
engine.setProperty(RuntimeConstants.VM_PERM_INLINE_LOCAL, Boolean.TRUE);
String template = "#macro(echo)$bodyContent#end #@echo()Yeah!#end";
String result = " Yeah!";
assertEvalEquals(result, template);
}
public void testStrict()
{
engine.setProperty(RuntimeConstants.RUNTIME_REFERENCES_STRICT, true);
assertEvalException("#@foo#end");
assertEvalException("#@foo()#end");
}
public void testVelocity690()
{
assertEvalEquals(" output ", "#macro(foo) output #end#@foo #end");
assertEvalEquals("#[ output )", "#macro(foo2)#[$bodyContent)#end#@foo2 output #end");
assertEvalEquals("#[output)", "#macro(foo2)#[$bodyContent)#end#{@foo2}output#end");
assertEvalException("#macro(foo) output #end#@foo");
}
public void testVelocity675() throws Exception
{
assertEvalEquals("#@foo#end", "#@foo#end");
}
public void testVelocity685() throws Exception
{
engine.setProperty(RuntimeConstants.VM_ARGUMENTS_STRICT, Boolean.TRUE);
assertEvalEquals(" ", "#macro(foo)#end #@foo() junk #end");
}
public void testVelocity686() throws Exception
{
String template = "#macro(foo)#set( $x = $bodyContent )#end"+
"#@foo()b#end a $x ";
assertEvalEquals(" a b ", template);
}
public void testNestedBlockMacro()
{
String template = "#macro(foo)foo:$bodyContent#end"+
"#macro(bar)bar:$bodyContent#end"+
"#@foo()foo,#@bar()bar#end#end";
assertEvalEquals("foo:foo,bar:bar", template);
}
public void testRecursiveBlockMacro()
{
engine.setProperty(RuntimeConstants.VM_MAX_DEPTH, 3);
String template = "#macro(foo)start:$bodyContent#end"+
"#@foo()call:$bodyContent#end";
assertEvalEquals("start:call:call:call:$bodyContent", template);
}
public void testBlueJoesProblem()
{
engine.setProperty("macro."+RuntimeConstants.PROVIDE_SCOPE_CONTROL, Boolean.TRUE);
addTemplate("a", "#macro(wrap $layout)$!macro.put($layout,$bodyContent)#parse($layout)#end"+
"#@wrap('b')a#end");
addTemplate("b", "#@wrap('c')b$!macro.get('b')b#end");
addTemplate("c", "c$!macro.get('c')c");
assertTmplEquals("cbabc", "a");
}
}