KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > gargoylesoftware > htmlunit > html > HtmlFrameTest


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.html;
39
40 import java.util.ArrayList;
41 import java.util.Arrays;
42 import java.util.List;
43
44 import com.gargoylesoftware.htmlunit.CollectingAlertHandler;
45 import com.gargoylesoftware.htmlunit.MockWebConnection;
46 import com.gargoylesoftware.htmlunit.WebClient;
47 import com.gargoylesoftware.htmlunit.WebTestCase;
48
49 /**
50  * Tests for HtmlFrame
51  *
52  * @version $Revision: 1.13 $
53  * @author <a HREF="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
54  */

55 public class HtmlFrameTest extends WebTestCase {
56
57     /**
58      * Create an instance
59      *
60      * @param name Name of the test
61      */

62     public HtmlFrameTest( final String name ) {
63         super( name );
64     }
65
66     /**
67      * @throws Exception if the test fails
68      */

69     public void testSrcOfBlankAndEmpty() throws Exception {
70         final String firstContent
71             = "<html><head><title>first</title></head>"
72             + "<frameset cols='20%,80%'>"
73             + " <frame SRC='' id='frame1'>"
74             + " <frame SRC='about:blank' id='frame2'>"
75             + "</frameset></html>";
76         final HtmlPage page = loadPage(firstContent);
77
78         final HtmlFrame frame1 = (HtmlFrame)page.getHtmlElementById("frame1");
79         assertEquals( "frame1", "", ((HtmlPage)frame1.getEnclosedPage()).getTitleText() );
80
81         final HtmlFrame frame2 = (HtmlFrame)page.getHtmlElementById("frame2");
82         assertEquals( "frame2", "", ((HtmlPage)frame2.getEnclosedPage()).getTitleText() );
83     }
84
85     /**
86      * @throws Exception if the test fails
87      */

88     public void testOnLoadHandler() throws Exception {
89         final WebClient webClient = new WebClient();
90         final MockWebConnection webConnection =
91             new MockWebConnection(webClient);
92         final List collectedAlerts = new ArrayList();
93
94         webClient.setAlertHandler(new CollectingAlertHandler(collectedAlerts));
95
96         final String firstContent
97             = "<html><head><title>first</title></head>"
98             + "<frameset cols='20%,80%'>"
99             + " <frame id='frame1'>"
100             + " <frame onload='alert(this.tagName)' id='frame2'>"
101             + "</frameset></html>";
102         final List expectedAlerts = Arrays.asList( new String[]{"FRAME"} );
103
104         webConnection.setResponse(URL_FIRST, firstContent);
105         webClient.setWebConnection(webConnection);
106
107         final HtmlPage page = (HtmlPage) webClient.getPage(URL_FIRST);
108         assertEquals("first", page.getTitleText());
109
110         final HtmlFrame frame1 = (HtmlFrame)page.getHtmlElementById("frame1");
111         assertEquals("frame1", "", ((HtmlPage) frame1.getEnclosedPage()).getTitleText());
112
113         final HtmlFrame frame2 = (HtmlFrame)page.getHtmlElementById("frame2");
114         assertEquals("frame2", "", ((HtmlPage)frame2.getEnclosedPage()).getTitleText());
115
116         assertEquals(expectedAlerts, collectedAlerts);
117     }
118
119     /**
120      * @throws Exception if the test fails
121      */

122     public void testDocumentWrite() throws Exception {
123         final String firstContent
124             = "<html><head><title>first</title></head>"
125             + "<frameset cols='20%,80%'>"
126             + " <frame SRC='' name='frame1' id='frame1'>"
127             + " <frame onload=\"frame1.document.open();frame1.document.write("
128             + "'<html><head><title>generated</title></head><body>generated</body></html>');"
129             + "frame1.document.close()\" id='frame2'>"
130             + "</frameset></html>";
131         final HtmlPage page = loadPage(firstContent);
132         
133         assertEquals( "first", page.getTitleText() );
134
135         final HtmlFrame frame1 = (HtmlFrame)page.getHtmlElementById("frame1");
136         assertEquals( "frame1", "generated", ((HtmlPage)frame1.getEnclosedPage()).getTitleText() );
137
138         final HtmlFrame frame2 = (HtmlFrame)page.getHtmlElementById("frame2");
139         assertEquals( "frame2", "", ((HtmlPage)frame2.getEnclosedPage()).getTitleText() );
140     }
141
142     /**
143      * Test that frames are correctly deregistered even if not html
144      * @throws Exception if the test fails
145      */

146     public void testDeregisterNonHtmlFrame() throws Exception {
147         final WebClient webClient = new WebClient();
148         final MockWebConnection webConnection =
149             new MockWebConnection(webClient);
150
151         final String firstContent
152             = "<html><head><title>first</title></head>"
153             + "<frameset cols='100%'>"
154             + " <frame SRC='foo.txt'>"
155             + "</frameset></html>";
156         webConnection.setDefaultResponse("foo", 200, "OK", "text/plain");
157         webConnection.setResponse(URL_FIRST, firstContent);
158         webClient.setWebConnection(webConnection);
159
160         final HtmlPage page = (HtmlPage) webClient.getPage(URL_FIRST);
161         assertEquals("first", page.getTitleText());
162         
163         // loads something else to trigger frame de-registration
164
webClient.getPage(URL_SECOND);
165     }
166 }
167
Popular Tags