/** * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * * Copyright 2012-2015 the original author or authors. */ package org.assertj.swing.test.awt; import static org.assertj.swing.util.Maps.newHashMap; import static org.mockito.Mockito.spy; import java.awt.Button; import java.awt.Canvas; import java.awt.Checkbox; import java.awt.CheckboxMenuItem; import java.awt.Choice; import java.awt.Desktop; import java.awt.Dialog; import java.awt.Dialog.ModalExclusionType; import java.awt.Dialog.ModalityType; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.FileDialog; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Frame; import java.awt.GraphicsConfiguration; import java.awt.HeadlessException; import java.awt.Image; import java.awt.Insets; import java.awt.Label; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.Panel; import java.awt.PopupMenu; import java.awt.PrintJob; import java.awt.ScrollPane; import java.awt.Scrollbar; import java.awt.TextArea; import java.awt.TextField; import java.awt.Toolkit; import java.awt.Window; import java.awt.datatransfer.Clipboard; import java.awt.dnd.DragGestureEvent; import java.awt.dnd.InvalidDnDOperationException; import java.awt.dnd.peer.DragSourceContextPeer; import java.awt.event.AWTEventListener; import java.awt.font.TextAttribute; import java.awt.im.InputMethodHighlight; import java.awt.image.ColorModel; import java.awt.image.ImageObserver; import java.awt.image.ImageProducer; import java.awt.peer.ButtonPeer; import java.awt.peer.CanvasPeer; import java.awt.peer.CheckboxMenuItemPeer; import java.awt.peer.CheckboxPeer; import java.awt.peer.ChoicePeer; import java.awt.peer.DesktopPeer; import java.awt.peer.DialogPeer; import java.awt.peer.FileDialogPeer; import java.awt.peer.FontPeer; import java.awt.peer.FramePeer; import java.awt.peer.LabelPeer; import java.awt.peer.ListPeer; import java.awt.peer.MenuBarPeer; import java.awt.peer.MenuItemPeer; import java.awt.peer.MenuPeer; import java.awt.peer.PanelPeer; import java.awt.peer.PopupMenuPeer; import java.awt.peer.ScrollPanePeer; import java.awt.peer.ScrollbarPeer; import java.awt.peer.TextAreaPeer; import java.awt.peer.TextFieldPeer; import java.awt.peer.WindowPeer; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Properties; /** * @author Alex Ruiz */ public class ToolkitStub extends Toolkit { private Map<AWTEventListener, Long> eventListeners; private EventQueue eventQueue; static ToolkitStub createNew() { return createNew(new EventQueue()); } static ToolkitStub createNew(EventQueue eventQueue) { ToolkitStub stub = spy(new ToolkitStub()); stub.eventQueue(eventQueue); stub.eventListeners = newHashMap(); return stub; } public ToolkitStub() { } public void eventQueue(EventQueue newEventQueue) { eventQueue = newEventQueue; } @Override public void addAWTEventListener(AWTEventListener listener, long eventMask) { eventListeners().put(listener, eventMask); } @Override public void removeAWTEventListener(AWTEventListener listener) { eventListeners().remove(listener); } public <T extends AWTEventListener> List<T> eventListenersUnderEventMask(long eventMask, Class<T> type) { List<T> listeners = new ArrayList<T>(); for (AWTEventListener listener : eventListeners().keySet()) { if (!type.isInstance(listener)) { continue; } long keyEvent = eventListeners().get(listener); if (keyEvent != eventMask) { continue; } listeners.add(type.cast(listener)); } return listeners; } public boolean contains(AWTEventListener listener, long eventMask) { if (!eventListeners.containsKey(listener)) { return false; } long storedMask = eventListeners.get(listener); return storedMask == eventMask; } @Override protected EventQueue getSystemEventQueueImpl() { return eventQueue; } private Map<AWTEventListener, Long> eventListeners() { return eventListeners; } @Override public Insets getScreenInsets(GraphicsConfiguration gc) throws HeadlessException { return new Insets(0, 0, 0, 0); } @Override public void beep() { throw new UnsupportedOperationException(); } @Override public int checkImage(Image image, int width, int height, ImageObserver observer) { throw new UnsupportedOperationException(); } @Override protected ButtonPeer createButton(Button target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected CanvasPeer createCanvas(Canvas target) { throw new UnsupportedOperationException(); } @Override protected CheckboxPeer createCheckbox(Checkbox target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected ChoicePeer createChoice(Choice target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected DesktopPeer createDesktopPeer(Desktop target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected DialogPeer createDialog(Dialog target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException { throw new UnsupportedOperationException(); } @Override protected FileDialogPeer createFileDialog(FileDialog target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected FramePeer createFrame(Frame target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override public Image createImage(String filename) { throw new UnsupportedOperationException(); } @Override public Image createImage(URL url) { throw new UnsupportedOperationException(); } @Override public Image createImage(ImageProducer producer) { throw new UnsupportedOperationException(); } @Override public Image createImage(byte[] imagedata, int imageoffset, int imagelength) { throw new UnsupportedOperationException(); } @Override protected LabelPeer createLabel(Label target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected ListPeer createList(java.awt.List target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected MenuPeer createMenu(Menu target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected MenuBarPeer createMenuBar(MenuBar target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected MenuItemPeer createMenuItem(MenuItem target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected PanelPeer createPanel(Panel target) { throw new UnsupportedOperationException(); } @Override protected PopupMenuPeer createPopupMenu(PopupMenu target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected ScrollPanePeer createScrollPane(ScrollPane target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected ScrollbarPeer createScrollbar(Scrollbar target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected TextAreaPeer createTextArea(TextArea target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected TextFieldPeer createTextField(TextField target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override protected WindowPeer createWindow(Window target) throws HeadlessException { throw new UnsupportedOperationException(); } @Override public ColorModel getColorModel() throws HeadlessException { throw new UnsupportedOperationException(); } @Override @Deprecated public String[] getFontList() { throw new UnsupportedOperationException(); } @Override @Deprecated public FontMetrics getFontMetrics(Font font) { throw new UnsupportedOperationException(); } @Override @Deprecated protected FontPeer getFontPeer(String name, int style) { throw new UnsupportedOperationException(); } @Override public Image getImage(String filename) { throw new UnsupportedOperationException(); } @Override public Image getImage(URL url) { throw new UnsupportedOperationException(); } @Override public PrintJob getPrintJob(Frame frame, String jobtitle, Properties props) { throw new UnsupportedOperationException(); } @Override public int getScreenResolution() throws HeadlessException { throw new UnsupportedOperationException(); } @Override public Dimension getScreenSize() throws HeadlessException { throw new UnsupportedOperationException(); } @Override public Clipboard getSystemClipboard() throws HeadlessException { throw new UnsupportedOperationException(); } @Override public boolean isModalExclusionTypeSupported(ModalExclusionType modalExclusionType) { throw new UnsupportedOperationException(); } @Override public boolean isModalityTypeSupported(ModalityType modalityType) { throw new UnsupportedOperationException(); } @Override public Map<TextAttribute, ?> mapInputMethodHighlight(InputMethodHighlight highlight) throws HeadlessException { throw new UnsupportedOperationException(); } @Override public boolean prepareImage(Image image, int width, int height, ImageObserver observer) { throw new UnsupportedOperationException(); } @Override public void sync() { throw new UnsupportedOperationException(); } }