From 11bec637eece3ee2dad120749acefbf311fc0ad0 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Sun, 28 Nov 2010 10:14:53 +0000 Subject: [PATCH] StartMultiGamesTest and class for getting access for Mage.Client GUI components. --- .../client/components/MageComponents.java | 17 +++++ .../java/mage/client/components/MageUI.java | 71 ++++++++++++++++++ .../mage/client/game/StartMultiGamesTest.java | 74 +++++++++++++++++++ 3 files changed, 162 insertions(+) create mode 100644 Mage.Client/src/main/java/mage/client/components/MageComponents.java create mode 100644 Mage.Client/src/main/java/mage/client/components/MageUI.java create mode 100644 Mage.Client/src/test/java/mage/client/game/StartMultiGamesTest.java diff --git a/Mage.Client/src/main/java/mage/client/components/MageComponents.java b/Mage.Client/src/main/java/mage/client/components/MageComponents.java new file mode 100644 index 00000000000..dc5e2277516 --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/components/MageComponents.java @@ -0,0 +1,17 @@ +package mage.client.components; + +public enum MageComponents { + TABLES_MENU_BUTTON("btnGames"), + NEW_GAME_BUTTON("btnNewTable"), + NEW_TABLE_OK_BUTTON("btnOK"), + TABLE_WAITING_START_BUTTON("btnStart"); + + private String name; + MageComponents(String name) { + this.name = name; + } + + public String toString() { + return this.name; + } +} diff --git a/Mage.Client/src/main/java/mage/client/components/MageUI.java b/Mage.Client/src/main/java/mage/client/components/MageUI.java new file mode 100644 index 00000000000..24e057b28eb --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/components/MageUI.java @@ -0,0 +1,71 @@ +package mage.client.components; + +import java.awt.Component; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; + +import javax.swing.JButton; + +public class MageUI { + + private Map ui = new HashMap(); + private Map sync = new HashMap(); + + public JButton getButton(MageComponents name) throws InterruptedException { + //System.out.println("request for " + name); + Object buttonSync; + synchronized (ui) { + if (ui.containsKey(name)) { + //System.out.println("clicking " + name); + return (JButton) ui.get(name); + } else { + buttonSync = new Object(); + sync.put(name, buttonSync); + } + } + + synchronized (buttonSync) { + //System.out.println("waiting " + name + " to be created"); + buttonSync.wait(); + //System.out.println(name + "was created"); + if (!ui.containsKey(name)) { + throw new IllegalStateException("Component wasn't initialized. This should not happen."); + } + return (JButton) ui.get(name); + } + + } + + public void addButton(MageComponents name, JButton button) { + synchronized (ui) { + //System.out.println("added " + name); + ui.put(name, button); + if (sync.containsKey(name)) { + synchronized (sync.get(name)) { + //System.out.println("notifyAll - " + name); + sync.get(name).notifyAll(); + } + } + } + } + + public void doClick(MageComponents name) throws InterruptedException { + doClick(name, 0); + } + + public void doClick(MageComponents name, int waitBeforeClick) throws InterruptedException { + final JButton j = getButton(name); + Thread.sleep(waitBeforeClick); + while (!j.isEnabled()) { + Thread.sleep(10); + } + Thread t = new Thread(new Runnable() { + @Override + public void run() { + j.doClick(); + } + }); + t.start(); + } +} diff --git a/Mage.Client/src/test/java/mage/client/game/StartMultiGamesTest.java b/Mage.Client/src/test/java/mage/client/game/StartMultiGamesTest.java new file mode 100644 index 00000000000..e2456a2b8a2 --- /dev/null +++ b/Mage.Client/src/test/java/mage/client/game/StartMultiGamesTest.java @@ -0,0 +1,74 @@ +package mage.client.game; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.swing.SwingUtilities; + +import mage.client.MageFrame; +import mage.client.components.MageComponents; +import mage.client.components.MageUI; +import mage.util.Logging; + +import org.junit.Test; + +public class StartMultiGamesTest { + + private final static Logger logger = Logging.getLogger(StartMultiGamesTest.class.getName()); + + /** + * Amount of games to be started from this test. + */ + private final static Integer GAME_START_COUNT = 10; + + private MageFrame frame = null; + private Object sync = new Object(); + private MageUI ui; + + @Test + public void test() throws Exception { + for (int i = 0; i < GAME_START_COUNT; i++) { + logger.log(Level.INFO, "Starting game"); + startGame(); + } + } + + private void startGame() throws Exception { + frame = null; + Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { + public void uncaughtException(Thread t, Throwable e) { + logger.log(Level.SEVERE, null, e); + } + }); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + synchronized (sync) { + frame = new MageFrame(); + frame.setVisible(true); + sync.notify(); + } + } + }); + synchronized (sync) { + if (frame == null) { + sync.wait(); + } + ui = MageFrame.getSession().getUI(); + ui.doClick(MageComponents.TABLES_MENU_BUTTON); + ui.doClick(MageComponents.NEW_GAME_BUTTON); + ui.doClick(MageComponents.NEW_TABLE_OK_BUTTON, 500); + ui.doClick(MageComponents.TABLE_WAITING_START_BUTTON); + } + + sleep(3000); + frame.setVisible(false); + } + + private void sleep(int ms) { + try { + Thread.sleep(ms); + } catch (Exception e) { + e.printStackTrace(); + } + } +}