KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > gargoylesoftware > htmlunit > ScriptEngineTest


1 /*
2  * Copyright (c) 2002, 2005 Gargoyle Software Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * 1. Redistributions of source code must retain the above copyright notice,
8  * this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright notice,
10  * this list of conditions and the following disclaimer in the documentation
11  * and/or other materials provided with the distribution.
12  * 3. The end-user documentation included with the redistribution, if any, must
13  * include the following acknowledgment:
14  *
15  * "This product includes software developed by Gargoyle Software Inc.
16  * (http://www.GargoyleSoftware.com/)."
17  *
18  * Alternately, this acknowledgment may appear in the software itself, if
19  * and wherever such third-party acknowledgments normally appear.
20  * 4. The name "Gargoyle Software" must not be used to endorse or promote
21  * products derived from this software without prior written permission.
22  * For written permission, please contact info@GargoyleSoftware.com.
23  * 5. Products derived from this software may not be called "HtmlUnit", nor may
24  * "HtmlUnit" appear in their name, without prior written permission of
25  * Gargoyle Software Inc.
26  *
27  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
28  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
29  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARGOYLE
30  * SOFTWARE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
31  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
33  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
36  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37  */

38 package com.gargoylesoftware.htmlunit;
39
40 import java.util.ArrayList;
41 import java.util.Arrays;
42 import java.util.List;
43
44 import com.gargoylesoftware.htmlunit.html.HtmlElement;
45 import com.gargoylesoftware.htmlunit.html.HtmlPage;
46
47 /**
48  * Tests that have to do with when the scripting engine is called. Javascript
49  * specific tests will be found elsewhere.
50  *
51  * @version $Revision: 1.15 $
52  * @author <a HREF="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
53  * @author Marc Guillemot
54  */

55 public class ScriptEngineTest extends WebTestCase {
56     /**
57      * Create an instance
58      * @param name The name of the test
59      */

60     public ScriptEngineTest( final String name ) {
61         super(name);
62     }
63
64
65     /**
66      * Test that code in script tags is executed on page load. Try different combinations
67      * of the script tag except for the case where a remote javascript page is loaded. That
68      * one will be tested seperately.
69      * @throws Exception If something goes wrong.
70      */

71     public void testScriptTags_AllLocalContent() throws Exception {
72         final String content
73             = "<html>"
74             + "<head><title>foo</title>"
75             + "<script>One</script>" // no language specifed - assume javascript
76
+ "<script language='javascript'>Two</script>"
77             + "<script type='text/javascript'>Three</script>"
78             + "<script type='text/perl'>Four</script>" // type is unsupported language
79
+ "</head>"
80             + "<body>"
81             + "<p>hello world</p>"
82             + "</body></html>";
83         final List collectedScripts = new ArrayList();
84         loadPageAndCollectScripts(content, collectedScripts);
85
86         // NO MORE: The last expected is the dummy stub that is needed to initialize the javascript engine
87
final List expectedScripts = Arrays.asList( new String[]{
88             "One", "Two", "Three"} );
89
90         assertEquals( expectedScripts, collectedScripts );
91     }
92
93
94     private HtmlPage loadPageAndCollectScripts(
95             final String html, final List collectedScripts )
96         throws Exception {
97
98         final WebClient client = new WebClient();
99         client.setScriptEngine( new ScriptEngine(client) {
100             public void initialize(final HtmlPage page) {
101             }
102             public Object execute(
103                     final HtmlPage htmlPage, final String sourceCode,
104                     final String sourceName, final HtmlElement htmlElement ) {
105                 collectedScripts.add( sourceCode );
106                 return null;
107             }
108             public Object callFunction(
109                     final HtmlPage htmlPage, final Object javaScriptFunction,
110                     final Object thisObject, final Object [] args,
111                     final HtmlElement htmlElement ) {
112                 return null;
113             }
114             public String toString(
115                     final HtmlPage htmlPage, final Object javaScriptObject ) {
116                 return null;
117             }
118             public boolean isScriptRunning() {
119                 return false;
120             }
121         } );
122
123         final MockWebConnection webConnection = new MockWebConnection( client );
124
125         webConnection.setDefaultResponse( html );
126         client.setWebConnection( webConnection );
127
128         final HtmlPage page = (HtmlPage) client.getPage(new WebRequestSettings(URL_GARGOYLE, SubmitMethod.POST));
129         return page;
130     }
131 }
132
Popular Tags