01: /*
02: *
03: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
04: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
05: *
06: * This program is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU General Public License version
08: * 2 only, as published by the Free Software Foundation.
09: *
10: * This program is distributed in the hope that it will be useful, but
11: * WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13: * General Public License version 2 for more details (a copy is
14: * included at /legal/license.txt).
15: *
16: * You should have received a copy of the GNU General Public License
17: * version 2 along with this work; if not, write to the Free Software
18: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19: * 02110-1301 USA
20: *
21: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
22: * Clara, CA 95054 or visit www.sun.com if you need additional
23: * information or have any questions.
24: */
25:
26: package tests.appcontext;
27:
28: /**
29: * <code>TestLet</code> are isolated instances that performs a test in
30: * a seperate <code>AppContext</code>. Extend this class and provide
31: * concrete implementation for <code>doTest()</code> which executes some
32: * test code and returns a result.
33: */
34: public abstract class TestLet implements Runnable {
35: private static int id = -1;
36: Thread thread;
37: Object result;
38:
39: static synchronized int getID() {
40: return ++id;
41: }
42:
43: public TestLet() {
44: this (true);
45: }
46:
47: TestLet(boolean autoStart) {
48: this .thread = new Thread(new ThreadGroup("TestLet " + getID()),
49: this );
50: if (autoStart) {
51: this .start();
52: }
53: }
54:
55: public void start() {
56: this .thread.start();
57: }
58:
59: public void run() {
60: // register this thread as a new app context
61: sun.awt.SunToolkit.createNewAppContext();
62: synchronized (this ) {
63: this .result = null;
64: this .result = this .doTest();
65: this .notifyAll();
66: }
67: }
68:
69: public Object getResult() {
70: synchronized (this ) {
71: while (this .result == null) {
72: try {
73: this .wait();
74: } catch (Exception ex) {
75: }
76: }
77: }
78:
79: return this .result;
80: }
81:
82: protected abstract Object doTest();
83: }
|