1 package org.apache.velocity.test;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.velocity.VelocityContext;
23 import org.apache.velocity.context.InternalContextAdapterImpl;
24 import org.apache.velocity.context.ProxyVMContext;
25 import org.apache.velocity.runtime.RuntimeConstants;
26 import org.apache.velocity.runtime.RuntimeInstance;
27
28
29
30
31
32
33
34 public class VMContextLocalscopeTestCase extends BaseTestCase {
35
36 public VMContextLocalscopeTestCase(String name)
37 {
38 super(name);
39 }
40
41 public void testViaEval()
42 {
43 engine.setProperty(RuntimeConstants.VM_CONTEXT_LOCALSCOPE, Boolean.TRUE);
44 assertEvalEquals("$a", "#macro(a)#set($a = 'b')#end#a$a");
45 context.put("b", "b");
46 assertEvalEquals("b", "#macro(b)$b#set($b = 'c')#end#b");
47 assertContextValue("b", "b");
48 }
49
50 public void testLocalscopePutDoesntLeakButGetDoes()
51 {
52 RuntimeInstance instance = new RuntimeInstance();
53 instance.setProperty(RuntimeConstants.VM_CONTEXT_LOCALSCOPE, Boolean.TRUE);
54 instance.init();
55
56 VelocityContext base = new VelocityContext();
57 base.put("outsideVar", "value1");
58
59 ProxyVMContext vm =
60 new ProxyVMContext(new InternalContextAdapterImpl(base), instance, true);
61 vm.put("newLocalVar", "value2");
62
63
64 assertNull(base.get("newLocalVar"));
65 assertEquals("value2", vm.get("newLocalVar"));
66
67
68 assertEquals("value1", vm.get("outsideVar"));
69
70
71 vm.put("outsideVar", "value3");
72 assertEquals("value3", vm.get("outsideVar"));
73 assertEquals("value1", base.get("outsideVar"));
74 }
75
76 }