001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package com.sun.midp.events;
028:
029: import com.sun.midp.i3test.*;
030:
031: import com.sun.midp.main.*;
032: import com.sun.midp.midlet.MIDletSuite;
033:
034: /**
035: * Test that the if an event listener in an application isolate throws a
036: * runtime exception, that the isolate is killed.
037: */
038: public class TestHandleFatalError extends TestCase implements
039: MIDletProxyListListener {
040:
041: /** Timeout period. In milliseconds. */
042: private static final int TIMEOUT_PERIOD = 10000; // 10 sec
043:
044: /** Class name of the test MIDlet. */
045: private static final String TEST_MIDLET = "com.sun.midp.events.FatalMIDlet";
046:
047: /** Holds a reference to the test MIDlet. */
048: private MIDletProxy testMidlet;
049:
050: /** Holds a reference to the MIDlet proxy list. */
051: private MIDletProxyList proxyList;
052:
053: /**
054: * True,
055: * if the test MIDlet was removed from the list of running MIDlets.
056: */
057: private boolean testMidletRemovedFromList;
058:
059: /**
060: * Launch the test MIDlet and it it ends by the end of the time out period
061: * than consider the test passed.
062: */
063: void testMvmHandleFatalError() {
064: boolean assertion;
065:
066: proxyList = MIDletProxyList.getMIDletProxyList();
067:
068: proxyList.addListener(this );
069:
070: if (MIDletSuiteUtils.execute(MIDletSuite.INTERNAL_SUITE_ID,
071: TEST_MIDLET, "no name")) {
072: // This is SVM mode, so cancel the execute and end the test.
073: MIDletSuiteUtils.execute(MIDletSuite.INTERNAL_SUITE_ID,
074: null, null);
075: return;
076: }
077:
078: synchronized (this ) {
079: try {
080: wait(TIMEOUT_PERIOD);
081: } catch (InterruptedException ie) {
082: }
083: }
084:
085: assertion = testMidlet != null;
086: assertTrue(TEST_MIDLET + " not started", assertion);
087: if (!assertion) {
088: return;
089: }
090:
091: if (!testMidletRemovedFromList) {
092: fail(TEST_MIDLET
093: + " not removed from list of running MIDlets");
094: testMidlet.destroyMidlet();
095: return;
096: }
097: }
098:
099: /** Run all tests. */
100: public void runTests() {
101: declare("testMvmHandleFatalError");
102: testMvmHandleFatalError();
103:
104: proxyList.removeListener(this );
105: }
106:
107: /**
108: * Called when a MIDlet is added to the list.
109: *
110: * @param midlet The proxy of the MIDlet being added
111: */
112: public void midletAdded(MIDletProxy midlet) {
113: if (TEST_MIDLET.equals(midlet.getClassName())) {
114: testMidlet = midlet;
115: return;
116: }
117: }
118:
119: /**
120: * Called when the state of a MIDlet in the list is updated.
121: *
122: * @param midlet The proxy of the MIDlet that was updated
123: * @param fieldId code for which field of the proxy was updated
124: */
125: public void midletUpdated(MIDletProxy midlet, int fieldId) {
126: }
127:
128: /**
129: * Called when a MIDlet is removed from the list.
130: *
131: * @param midlet The proxy of the removed MIDlet
132: */
133: public void midletRemoved(MIDletProxy midlet) {
134: if (midlet == testMidlet) {
135: synchronized (this ) {
136: testMidletRemovedFromList = true;
137: notifyAll();
138: }
139: }
140: }
141:
142: /**
143: * Called when error occurred while starting a MIDlet object.
144: *
145: * @param externalAppId ID assigned by the external application manager
146: * @param suiteId Suite ID of the MIDlet
147: * @param className Class name of the MIDlet
148: * @param errorCode start error code
149: * @param errorDetails start error code
150: */
151: public void midletStartError(int externalAppId, int suiteId,
152: String className, int errorCode, String errorDetails) {
153: }
154: }
|