KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > jelly > core > TestIncludeTag


1 /*
2  * Copyright 2002,2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.apache.commons.jelly.core;
17
18 import java.net.URL JavaDoc;
19
20 import junit.framework.TestCase;
21 import junit.framework.TestSuite;
22
23 import org.apache.commons.jelly.Jelly;
24 import org.apache.commons.jelly.JellyContext;
25 import org.apache.commons.jelly.Script;
26 import org.apache.commons.jelly.TagLibrary;
27 import org.apache.commons.jelly.XMLOutput;
28
29 /**
30  * Makes sure that nested includes work correctly
31  *
32  * @author Morgan Delagrange
33  * @version $Revision: 155420 $
34  */

35 public class TestIncludeTag extends TestCase {
36
37     Jelly jelly = null;
38     JellyContext context = null;
39     XMLOutput xmlOutput = null;
40
41     public TestIncludeTag(String JavaDoc name) {
42         super(name);
43     }
44
45     public static TestSuite suite() throws Exception JavaDoc {
46         return new TestSuite(TestIncludeTag.class);
47     }
48
49     public void setUp(String JavaDoc scriptName) throws Exception JavaDoc {
50         URL JavaDoc url = this.getClass().getResource(scriptName);
51         if ( url == null ) {
52             throw new Exception JavaDoc(
53                 "Could not find Jelly script: " + scriptName
54                 + " in package of class: " + this.getClass().getName()
55             );
56         }
57         setUpFromURL(url);
58     }
59
60     public void setUpFromURL(URL JavaDoc url) throws Exception JavaDoc {
61         context = new CoreTaglibOnlyContext();
62         xmlOutput = XMLOutput.createDummyXMLOutput();
63
64         jelly = new Jelly();
65
66         jelly.setUrl(url);
67
68         String JavaDoc exturl = url.toExternalForm();
69         int lastSlash = exturl.lastIndexOf("/");
70         String JavaDoc extBase = exturl.substring(0,lastSlash+1);
71         URL JavaDoc baseurl = new URL JavaDoc(extBase);
72         context.setCurrentURL(baseurl);
73     }
74
75     public void testInnermost() throws Exception JavaDoc {
76         // performs no includes
77
setUp("c.jelly");
78         Script script = jelly.compileScript();
79         script.run(context,xmlOutput);
80         assertTrue("should have set 'c' variable to 'true'",
81                    context.getVariable("c").equals("true"));
82     }
83
84     public void testMiddle() throws Exception JavaDoc {
85         // performs one include
86
setUp("b.jelly");
87         Script script = jelly.compileScript();
88         script.run(context,xmlOutput);
89         assertTrue("should have set 'c' variable to 'true'",
90                    context.getVariable("c").equals("true"));
91         assertTrue("should have set 'b' variable to 'true'",
92                    context.getVariable("b").equals("true"));
93     }
94
95     public void testOutermost() throws Exception JavaDoc {
96         // performs one nested include
97
setUp("a.jelly");
98         Script script = jelly.compileScript();
99         script.run(context,xmlOutput);
100         assertTrue("should have set 'c' variable to 'true'",
101                    context.getVariable("c").equals("true"));
102         assertTrue("should have set 'b' variable to 'true'",
103                    context.getVariable("b").equals("true"));
104         assertTrue("should have set 'a' variable to 'true'",
105                    context.getVariable("a").equals("true"));
106     }
107
108     /**
109      * Insure that includes happen correctly when Jelly scripts
110      * are referenced as a file (rather than as a classpath
111      * element). Specifically checks to make sure includes succeed
112      * when the initial script is not in the user.dir directory.
113      */

114     public void testFileInclude() throws Exception JavaDoc {
115         // testing outermost
116
setUpFromURL(new URL JavaDoc("file:src/test/org/apache/commons/jelly/core/a.jelly"));
117         Script script = jelly.compileScript();
118         script.run(context,xmlOutput);
119         assertTrue("should have set 'c' variable to 'true'",
120                    context.getVariable("c").equals("true"));
121         assertTrue("should have set 'b' variable to 'true'",
122                    context.getVariable("b").equals("true"));
123         assertTrue("should have set 'a' variable to 'true'",
124                    context.getVariable("a").equals("true"));
125     }
126
127     private class CoreTaglibOnlyContext extends JellyContext {
128
129         /**
130          * This implementations makes sure that only "jelly:core"
131          * taglib is instantiated, insuring that "optional" dependencies
132          * are not inadvertantly called. Specifically addresses a bug
133          * in older Jelly dev versions where a nested include
134          * would trigger instantiation of all tag libraries.
135          *
136          * @param namespaceURI
137          * @return
138          */

139         public TagLibrary getTagLibrary(String JavaDoc namespaceURI) {
140             if (namespaceURI.equals("jelly:core")) {
141                 return super.getTagLibrary(namespaceURI);
142             } else {
143                 throw new NoClassDefFoundError JavaDoc("Unexpected tag library uri: " +
144                                                    namespaceURI);
145             }
146         }
147
148     }
149
150 }
151
Popular Tags