001 /* 002 * Created on Mar 30, 2010 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 005 * the License. You may obtain a copy of the License at 006 * 007 * http://www.apache.org/licenses/LICENSE-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 010 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 011 * specific language governing permissions and limitations under the License. 012 * 013 * Copyright @2010 the original author or authors. 014 */ 015 package org.fest.swing.driver; 016 017 import static org.fest.swing.edt.GuiActionRunner.execute; 018 019 import java.applet.AppletContext; 020 import java.net.URL; 021 022 import javax.swing.JApplet; 023 024 import org.fest.swing.annotation.RunsInEDT; 025 import org.fest.swing.core.Robot; 026 import org.fest.swing.edt.GuiQuery; 027 import org.fest.swing.edt.GuiTask; 028 029 /** 030 * Understands functional testing of <code>{@link JApplet}</code>s: 031 * <ul> 032 * <li>user input simulation</li> 033 * <li>state verification</li> 034 * <li>property value query</li> 035 * </ul> 036 * This class is intended for internal use only. Please use the classes in the package 037 * <code>{@link org.fest.swing.fixture}</code> in your tests. 038 * 039 * @author Mel Llaguno 040 * @author Alex Ruiz 041 * 042 * @since 1.2 043 */ 044 public class JAppletDriver extends ComponentDriver { 045 046 /** 047 * Creates a new </code>{@link JAppletDriver}</code>. 048 * @param robot the robot to use simulate user input. 049 */ 050 public JAppletDriver(Robot robot) { 051 super(robot); 052 } 053 054 /** 055 * Returns the <code>{@link AppletContext}</code> of the given <code>{@link JApplet}</code>. 056 * @param applet the given {@code JApplet}. 057 * @return the {@code AppletContext} of the given {@code JApplet}. 058 */ 059 @RunsInEDT 060 public AppletContext appletContextOf(JApplet applet) { 061 return appletContext(applet); 062 } 063 064 @RunsInEDT 065 private static AppletContext appletContext(final JApplet applet) { 066 return execute(new GuiQuery<AppletContext>() { 067 protected AppletContext executeInEDT() { 068 return applet.getAppletContext(); 069 } 070 }); 071 } 072 073 /** 074 * Requests the given <code>{@link JApplet}</code> to be resized. 075 * @param applet the given {@code JApplet}. 076 * @param width the new width. 077 * @param height the new height. 078 */ 079 @RunsInEDT 080 public void resize(JApplet applet, int width, int height) { 081 doResize(applet, width, height); 082 } 083 084 @RunsInEDT 085 private static void doResize(final JApplet applet, final int width, final int height) { 086 execute(new GuiTask() { 087 protected void executeInEDT() { 088 applet.resize(width, height); 089 } 090 }); 091 } 092 093 /** 094 * Returns the URL of the directory that contains the given <code>{@link JApplet}</code>. 095 * @param applet the given {@code JApplet}. 096 * @return the URL of the directory that contains the given {@code JApplet}. 097 */ 098 @RunsInEDT 099 public URL codeBaseOf(JApplet applet) { 100 return codeBase(applet); 101 } 102 103 @RunsInEDT 104 private static URL codeBase(final JApplet applet) { 105 return execute(new GuiQuery<URL>() { 106 protected URL executeInEDT() { 107 return applet.getCodeBase(); 108 } 109 }); 110 } 111 112 /** 113 * Returns the URL of the document the given <code>{@link JApplet}</code> is embedded. 114 * @param applet the given {@code JApplet}. 115 * @return the URL of the document the given {@code JApplet} is embedded. 116 */ 117 @RunsInEDT 118 public URL documentBaseOf(JApplet applet) { 119 return documentBase(applet); 120 } 121 122 @RunsInEDT 123 private static URL documentBase(final JApplet applet) { 124 return execute(new GuiQuery<URL>() { 125 protected URL executeInEDT() { 126 return applet.getDocumentBase(); 127 } 128 }); 129 } 130 131 /** 132 * Returns the value of the named parameter in the given <code>{@link JApplet}</code> in the HTML tag, or 133 * <code>null</code> if not set. 134 * @param applet the given {@code JApplet}. 135 * @param parameterName a parameter name. 136 * @return the value of the named parameter in the given {code JApplet} in the HTML tag, or <code>null</code> if not 137 * set. 138 */ 139 @RunsInEDT 140 public String parameterValue(JApplet applet, String parameterName) { 141 return parameter(applet, parameterName); 142 } 143 144 @RunsInEDT 145 private static String parameter(final JApplet applet, final String parameterName) { 146 return execute(new GuiQuery<String>() { 147 protected String executeInEDT() { 148 return applet.getParameter(parameterName); 149 } 150 }); 151 } 152 153 /** 154 * Indicates whether the given <code>{@link JApplet}</code> is active or not. 155 * @param applet the given {@code JApplet}. 156 * @return <code>true</code> if the given {@code JApplet} is active; <code>false</code> otherwise. 157 */ 158 @RunsInEDT 159 public boolean isActive(JApplet applet) { 160 return active(applet); 161 } 162 163 @RunsInEDT 164 private static boolean active(final JApplet applet) { 165 return execute(new GuiQuery<Boolean>() { 166 protected Boolean executeInEDT() { 167 return applet.isActive(); 168 } 169 }); 170 } 171 }