001 /* 002 * Created on Feb 16, 2007 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 005 * in compliance with 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 010 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 011 * or implied. See the License for the specific language governing permissions and limitations under 012 * the License. 013 * 014 * Copyright @2007-2010 the original author or authors. 015 */ 016 package org.fest.swing.fixture; 017 018 import static org.fest.swing.core.BasicRobot.robotWithCurrentAwtHierarchy; 019 020 import java.awt.Dimension; 021 import java.awt.Window; 022 023 import org.fest.swing.core.BasicRobot; 024 import org.fest.swing.core.Robot; 025 import org.fest.swing.exception.ComponentLookupException; 026 import org.fest.swing.lock.ScreenLock; 027 028 /** 029 * Understands functional testing of <code>{@link Window}</code>s: 030 * <ul> 031 * <li>user input simulation</li> 032 * <li>state verification</li> 033 * <li>property value query</li> 034 * </ul> 035 * @param <T> the type of window handled by this fixture. 036 * 037 * @author Alex Ruiz 038 */ 039 public abstract class WindowFixture<T extends Window> extends ContainerFixture<T> implements CommonComponentFixture, 040 WindowLikeContainerFixture, JPopupMenuInvokerFixture { 041 042 /** 043 * Creates a new <code>{@link WindowFixture}</code>. This constructor creates a new <code>{@link Robot}</code> 044 * containing the current AWT hierarchy. 045 * @param type the type of <code>Window</code> to find using the created <code>Robot</code>. 046 * @throws NullPointerException if the given <code>Window</code> type is <code>null</code>. 047 * @throws ComponentLookupException if a <code>Window</code> having a matching type could not be found. 048 * @throws ComponentLookupException if more than one <code>Window</code> having a matching type is found. 049 * @see BasicRobot#robotWithCurrentAwtHierarchy() 050 */ 051 public WindowFixture(Class<? extends T> type) { 052 this(robotWithCurrentAwtHierarchy(), type); 053 } 054 055 /** 056 * Creates a new <code>{@link WindowFixture}</code>. 057 * @param robot performs simulation of user events on a <code>Window</code>. 058 * @param type the type of <code>Window</code> to find using the given <code>Robot</code>. 059 * @throws NullPointerException if the given robot is <code>null</code>. 060 * @throws NullPointerException if the given <code>Window</code> type is <code>null</code>. 061 * @throws ComponentLookupException if a <code>Window</code> having a matching type could not be found. 062 * @throws ComponentLookupException if more than one <code>Window</code> having a matching type is found. 063 */ 064 public WindowFixture(Robot robot, Class<? extends T> type) { 065 super(robot, type); 066 } 067 068 /** 069 * Creates a new <code>{@link WindowFixture}</code>. This constructor creates a new 070 * <code>{@link Robot}</code> containing the current AWT hierarchy. 071 * @param name the name of the <code>Window</code> to find. 072 * @param type the type of <code>Window</code> to find using the created <code>Robot</code>. 073 * @throws NullPointerException if the given <code>Window</code> type is <code>null</code>. 074 * @throws ComponentLookupException if a <code>Window</code> having a matching name could not be found. 075 * @throws ComponentLookupException if more than one <code>Window</code> having a matching name is found. 076 * @see BasicRobot#robotWithCurrentAwtHierarchy() 077 */ 078 public WindowFixture(String name, Class<? extends T> type) { 079 this(robotWithCurrentAwtHierarchy(), name, type); 080 } 081 082 /** 083 * Creates a new <code>{@link WindowFixture}</code>. 084 * @param robot performs simulation of user events on a <code>Window</code>. 085 * @param name the name of the <code>Window</code> to find using the given <code>Robot</code>. 086 * @param type the type of <code>Window</code> to find using the given <code>Robot</code>. 087 * @throws NullPointerException if the given robot is <code>null</code>. 088 * @throws NullPointerException if the given <code>Window</code> type is <code>null</code>. 089 * @throws ComponentLookupException if a <code>Window</code> having a matching name could not be found. 090 * @throws ComponentLookupException if more than one <code>Window</code> having a matching name is found. 091 */ 092 public WindowFixture(Robot robot, String name, Class<? extends T> type) { 093 super(robot, name, type); 094 } 095 096 /** 097 * Creates a new <code>{@link WindowFixture}</code>. This constructor creates a new <code>{@link Robot}</code> 098 * containing the current AWT hierarchy. 099 * @param target the <code>Window</code> to be managed by this fixture. 100 * @throws NullPointerException if the given target <code>Window</code> is <code>null</code>. 101 */ 102 public WindowFixture(T target) { 103 this(robotWithCurrentAwtHierarchy(), target); 104 } 105 106 /** 107 * Creates a new <code>{@link WindowFixture}</code>. 108 * @param robot performs simulation of user events on the given <code>Window</code>. 109 * @param target the <code>Window</code> to be managed by this fixture. 110 * @throws NullPointerException if the given robot is <code>null</code>. 111 * @throws NullPointerException if the given target <code>Window</code> is <code>null</code>. 112 */ 113 public WindowFixture(Robot robot, T target) { 114 super(robot, target); 115 } 116 117 /** 118 * Shows this fixture's <code>{@link Window}</code>. 119 * @return this fixture. 120 */ 121 protected abstract WindowFixture<T> show(); 122 123 /** 124 * Shows this fixture's <code>{@link Window}</code>, resized to the given size. 125 * @param size the size to resize this fixture's <code>Window</code> to. 126 * @return this fixture. 127 */ 128 protected abstract WindowFixture<T> show(Dimension size); 129 130 /** 131 * Cleans up any used resources (keyboard, mouse, open windows and <code>{@link ScreenLock}</code>) used by this 132 * robot. 133 */ 134 public final void cleanUp() { 135 robot.cleanUp(); 136 } 137 }