01 /*
02 * Copyright 2007-2012 the original author or authors.
03 *
04 * Licensed under the Apache License, Version 2.0 (the "License");
05 * you may not use this file except in compliance with the License.
06 * You may obtain a copy of the License at
07 *
08 * http://www.apache.org/licenses/LICENSE-2.0
09 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 package griffon.test
18
19 import griffon.core.UIThreadManager
20 import java.lang.reflect.Constructor
21 import java.lang.reflect.InvocationTargetException
22
23 /**
24 * Base classe for Swing relatedt test.
25 *
26 * @author Danno Ferrin
27 * @author Andres Almiray
28 */
29 public class AbstractSwingTestCase extends GroovyTestCase {
30 private static boolean headless
31
32 /**
33 * A boolean indicating if we are running in headless mode.
34 * Check this flag if you believe your test may make use of AWT/Swing
35 * features, then simply return rather than running your test.
36 *
37 * @return true if running in headless mode
38 */
39 public static boolean isHeadless() {
40 return headless
41 }
42
43 /**
44 * Alias for isHeadless().
45 *
46 * @return true if running in headless mode
47 */
48 public static boolean getHeadless() {
49 return isHeadless()
50 }
51
52 static {
53 try {
54 final Class jframe = Class.forName("javax.swing.JFrame")
55 final Constructor constructor = jframe.getConstructor((Class[])[String])
56 constructor.newInstance((String[])["testing"])
57 headless = false
58 } catch (java.awt.HeadlessException e) {
59 headless = true
60 } catch (UnsatisfiedLinkError e) {
61 headless = true
62 } catch (ClassNotFoundException e) {
63 headless = true
64 } catch (NoClassDefFoundError e) {
65 headless = true
66 } catch (IllegalAccessException e) {
67 headless = true
68 } catch (InstantiationException e) {
69 headless = true
70 } catch (NoSuchMethodException e) {
71 headless = true
72 } catch (InvocationTargetException e) {
73 headless = true
74 }
75 }
76
77 /** Executes code synchronously inside the UI thread */
78 def execSync = UIThreadManager.instance.&executeSync
79 /** Executes code asynchronously inside the UI thread */
80 def execAsync = UIThreadManager.instance.&executeAsync
81 /** Executes code outside the UI thread */
82 def execOutside = UIThreadManager.instance.&executeOutside
83 /** True if the current thread is the UI thread */
84 def isUIThread = UIThreadManager.instance.&isUIThread
85 /** Schedules a block of code as a Future */
86 def execFuture = { Object... args ->
87 UIThreadManager.instance.executeFuture(*args)
88 }
89 }
|