testdisplaypreempt.java
来自「This is a resource based on j2me embedde」· Java 代码 · 共 265 行
JAVA
265 行
/* * * * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package javax.microedition.lcdui;import com.sun.midp.i3test.*;import javax.microedition.midlet.*;import com.sun.midp.midlet.MIDletStateHandler;import com.sun.midp.util.DummyMIDlet;import com.sun.midp.util.DummyMIDlet2;import com.sun.midp.lcdui.*;/** * This test is designed to verify values returned by Displayable.isShown. * According to the spec isShown should be true only * Displayable is visible in the foreground and no system screen/menu * is up. */public class TestDisplayPreempt extends TestCase { MIDletStateHandler msHandler; DisplayEventHandlerImpl deHandler; MIDlet midlet[] = new MIDlet[2]; Display display[] = new Display[2]; Display preempt = null; SystemAlert A[][] = new SystemAlert[2][2]; Form F[][] = new Form[2][2]; Command C[][][] = new Command[2][2][3]; boolean isShown(Display d, Displayable s) { return d.isShown(s.displayableLF); } public static void sleep(int time) { try { Thread.sleep(time); } catch (Exception e) {} } public void runTests() { int i,j; for (i=0; i<2; i++ ) { for (j=0; j<2; j++ ) { String suffix = "_" + i + "_" + j; //A[i][j] = new Alert("A" + suffix); F[i][j] = new Form("F" + suffix); C[i][j][0] = new Command("SCREEN" + suffix, Command.SCREEN, 1); C[i][j][1] = new Command("BACK" + suffix, Command.BACK, 1); C[i][j][2] = new Command("ITEM" + suffix, Command.ITEM, 1); F[i][j].addCommand(C[i][j][0]); F[i][j].addCommand(C[i][j][1]); F[i][j].addCommand(C[i][j][2]); } } msHandler = MIDletStateHandler.getMidletStateHandler(); deHandler = Display.displayEventHandlerImpl; // ------------------------------------------------------- test3(); test1(); test2(); // ------------------------------------------------------- } /** * starts DummyMIDlet */ protected void startMIDlet0() { try { // Start a new instance of DummyMIDlet msHandler.startMIDlet("com.sun.midp.util.DummyMIDlet", "DummyMIDlet"); // Wait for async request to be processed while (DummyMIDlet.midlet == null) { try { Thread.sleep(100); } catch (InterruptedException ie) {} } midlet[0] = DummyMIDlet.midlet; display[0] = Display.getDisplay(midlet[0]); display[0].setCurrent(null); } catch (Exception e) { e.printStackTrace(); } } /** * starts DummyMIDlet2 */ protected void startMIDlet1() { try { // Start a new instance of DummyMIDlet msHandler.startMIDlet("com.sun.midp.util.DummyMIDlet2", "DummyMIDlet2"); // Wait for async request to be processed while (DummyMIDlet2.midlet == null) { try { Thread.sleep(100); } catch (InterruptedException ie) {} } midlet[1] = DummyMIDlet2.midlet; display[1] = Display.getDisplay(midlet[1]); display[1].setCurrent(null); } catch (Exception e) { e.printStackTrace(); } } /** * Terminates DummyMIDlet */ protected void endMIDlet0() { midlet[0].notifyDestroyed(); // Since we are calling MIDlet.notifyDestroyed(), MIDlet.destroyApp() // will not be called by System. So make it up here. try { ((DummyMIDlet)midlet[0]).destroyApp(true); } catch (MIDletStateChangeException ignore) {} } /** * Terminates DummyMIDlet2 */ protected void endMIDlet1() { midlet[1].notifyDestroyed(); // Since we are calling MIDlet.notifyDestroyed(), MIDlet.destroyApp() // will not be called by System. So make it up here. try { ((DummyMIDlet2)midlet[1]).destroyApp(true); } catch (MIDletStateChangeException ignore) {} } /** * test checks how SystemAlert preempts headless midlet */ protected void test1() { declare("TestDisplayPreempt 1"); // start midlet w/o screens - no modal dialogs started startMIDlet0(); display[0].setCurrent(null); midlet[0].resumeRequest(); sleep(500); // modal dialog not yet exists - empty screen is in background assertFalse("MIDlet before Alert : Display 0 has foreground", display[0].hasForeground); sleep(500); // create modal dialog - midlet w/o screens exists A[0][1] = new SystemAlert(deHandler, "A_0_1", "Alert with MIDlet", null, AlertType.INFO); A[0][1].run(); A[0][1].setTimeout(1500); // preempt = deHandler.preemptingDisplay.getDisplay(); sleep(500); // modal dialog is active ... - empty screen is hidden // assertTrue("MIDlet with Alert : Preempt Display has foreground", preempt.hasForeground); assertFalse("MIDlet with Alert : Display 0 has foreground", display[0].hasForeground); sleep(1500); // modal dialog has gone ... - empty screen appears in background again // assertFalse("MIDlet after Alert : Preempt Display has foreground", preempt.hasForeground); assertFalse("MIDlet after Alert : Display 0 has foreground", display[0].hasForeground); // destroy midlet display[0].setCurrent(null); sleep(500); endMIDlet0(); } /** * test checks how SystemAlert preempts normal midlet (with screens) */ protected void test2() { declare("TestDisplayPreempt 2"); // start midlet with screens - no modal dialogs started startMIDlet1(); display[1].setCurrent(F[1][0]); midlet[1].resumeRequest(); sleep(500); // modal dialog not yet exists - midlet screen is active assertTrue("MIDlet before Alert : Display 1 has foreground", display[1].hasForeground); assertTrue("MIDlet before Alert : F 1 0 is shown", isShown(display[1], F[1][0])); sleep(500); // create modal dialog - midlet with screens exists A[1][1] = new SystemAlert(deHandler, "A_1_1", "Alert with MIDlet", null, AlertType.INFO); A[1][1].run(); A[1][1].setTimeout(1500); // preempt = deHandler.preemptingDisplay.getDisplay(); sleep(500); // assertTrue("MIDlet with Alert : Preempt Display has foreground", preempt.hasForeground); assertFalse("MIDlet with Alert : Display 0 has foreground", display[1].hasForeground); assertFalse("MIDlet with Alert : F 1 0 is shown", isShown(display[1], F[1][0])); // while modal dialog is active - change current midlet screen display[1].setCurrent(F[1][1]); sleep(500); // modal dialog is active ... - midlet screen is hidden // assertTrue("Alert with MIDlet : Preempt Display has foreground", preempt.hasForeground); assertFalse("Alert with MIDlet : Display 1 has foreground", display[1].hasForeground); assertFalse("Alert with MIDlet : F 1 0 is shown", isShown(display[1], F[1][0])); assertFalse("Alert with MIDlet : F 1 1 is shown", isShown(display[1], F[1][1])); sleep(1500); // modal dialog has gone ... - midlet screen appears again // assertFalse("MIDlet after Alert : Preempt Display has foreground", preempt.hasForeground); assertTrue("MIDlet after Alert : Display 0 has foreground", display[1].hasForeground); assertFalse("MIDlet after Alert : F 1 0 is shown", isShown(display[1], F[1][0])); assertTrue("MIDlet after Alert : F 1 1 is shown", isShown(display[1], F[1][1])); display[0].setCurrent(null); sleep(500); endMIDlet1(); } /** * test checks how systemAlert w/o midlets works */ protected void test3() { declare("TestDisplayPreempt 3"); // create modal dialog (no midlets exist) A[0][0] = new SystemAlert(deHandler, "A_0_0", "Alert w/o MIDlet", null, AlertType.WARNING); A[0][0].run(); A[0][0].setTimeout(1000); // preempt = deHandler.preemptingDisplay.getDisplay(); sleep(500); // dialog is active // assertTrue("Alert w/o MIDlet : Preempt Display has foreground", display[1].hasForeground); sleep(1000); // dialog has gone ! // assertFalse("Alert w/o MIDlet : Preempt Display has foreground", display[1].hasForeground); sleep(500); assertTrue(true); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?