testlinkportal.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 320 行

JAVA
320
字号
/* * * * 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 com.sun.midp.links;import com.sun.cldc.isolate.Isolate;import com.sun.cldc.isolate.IsolateStartupException;import com.sun.midp.i3test.TestCase;/** * Tests for the LinkPortal class. */public class TestLinkPortal extends TestCase {    class Getter extends Thread {        boolean done = false;        Object result = null;        Getter() {            this.start();            Utils.sleep(50);        }        Object await() {            try {                synchronized (this) {                    while (!done) {                        wait();                    }                }            } catch (InterruptedException ignore) { }            return result;        }        public void run() {            try {                result = LinkPortal.getLinks();            } catch (Throwable t) {                result = t;            }            synchronized (this) {                done = true;                notifyAll();            }        }    }    /**     * Tests passing null for arguments.     */    void testNulls() {        boolean thrown;        Isolate is = Isolate.currentIsolate();        Link[] la = new Link[3];        la[0] = Link.newLink(is, is);        la[1] = Link.newLink(is, is);        la[2] = Link.newLink(is, is);        thrown = false;        try {            LinkPortal.setLinks(null, la);        } catch (NullPointerException npe) {            thrown = true;        }        assertTrue("null isolate should throw NPE", thrown);        thrown = false;        try {            LinkPortal.setLinks(is, null);        } catch (NullPointerException npe) {            thrown = true;        }        assertFalse("null link array shouldn't throw NPE", thrown);        la[1] = null;        thrown = false;        try {            LinkPortal.setLinks(is, la);        } catch (NullPointerException npe) {            thrown = true;        }        assertTrue("link array with nulls should throw NPE", thrown);    }    /**     * Tests zero-length setting and getting operations.     */    void testZero() {        Link[] la;        Isolate is = Isolate.currentIsolate();        LinkPortal.setLinks(is, new Link[0]);        la = LinkPortal.getLinks();        assertNotNull("shouldn't be null", la);        assertEquals("length zero", 0, la.length);    }    /**     * Tests setting a closed link.     */    void testClosed() {        boolean thrown;        Link[] la;        Isolate is = Isolate.currentIsolate();        la = new Link[3];        la[0] = Link.newLink(is, is);        la[1] = Link.newLink(is, is);        la[2] = Link.newLink(is, is);        la[1].close();        thrown = false;        try {            LinkPortal.setLinks(is, la);        } catch (IllegalArgumentException iae) {            thrown = true;        }        assertTrue("closed link should throw IAE", thrown);    }    /**     * Tests blocking getLinks(), followed by setLinks().     */    void testBlockedGet() {        Isolate is = Isolate.currentIsolate();        LinkPortal.setLinks(is, new Link[] { Link.newLink(is, is) });        LinkPortal.setLinks(is, null);        Getter get1 = new Getter();        assertFalse("get1 should be blocked", get1.done);        LinkPortal.setLinks(is, new Link[] { Link.newLink(is, is) });        Object result = get1.await();        assertTrue("get1 should return Link[]", result instanceof Link[]);        Link[] gotten = (Link[])result;        assertEquals("length 1", 1, gotten.length);        Getter get2 = new Getter();        assertFalse("get2 should be blocked", get2.done);        LinkPortal.setLinks(is, new Link[0]);        result = get2.await();        assertTrue("get2 should return Link[]", result instanceof Link[]);        gotten = (Link[])result;        assertEquals("length 0", 0, gotten.length);    }    /**     * Tests setting and getting of actual data.     */    void testActual() {        Link[] la1;        Link[] la2;        Isolate is = Isolate.currentIsolate();        la1 = new Link[3];        la1[0] = Link.newLink(is, is);        la1[1] = Link.newLink(is, is);        la1[2] = Link.newLink(is, is);        LinkPortal.setLinks(is, la1);        la2 = LinkPortal.getLinks();        assertEquals("lengths should be equal", la1.length, la2.length);        for (int i = 0; i < la1.length; i++) {            assertNotSame("link not same", la1[i], la2[i]);            assertTrue("links equal", la1[i].equals(la2[i]));            assertEquals("refcount 2", 2, Utils.getRefCount(la2[i]));        }        for (int i = 0; i < la1.length; i++) {            Utils.forceGC();            Utils.getFreedRendezvousPoints();            int hash = la1[i].hashCode();            la1[i] = la2[i] = null;            Utils.forceGC();            int[] ia = Utils.getFreedRendezvousPoints();            assertEquals("one freed", 1, ia.length);            assertEquals("freed one matches", hash, ia[0]);        }    }    /**     * Tests replacement of a link array and proper cleanup.     */    void testReplace() {        Isolate is = Isolate.currentIsolate();        Link[] la = new Link[3];        la[0] = Link.newLink(is, is);        la[1] = Link.newLink(is, is);        la[2] = Link.newLink(is, is);        LinkPortal.setLinks(is, la);        assertEquals("refcount 2", 2, Utils.getRefCount(la[0]));        assertEquals("refcount 2", 2, Utils.getRefCount(la[1]));        assertEquals("refcount 2", 2, Utils.getRefCount(la[2]));        LinkPortal.setLinks(is, new Link[0]);        assertEquals("refcount 1", 1, Utils.getRefCount(la[0]));        assertEquals("refcount 1", 1, Utils.getRefCount(la[1]));        assertEquals("refcount 1", 1, Utils.getRefCount(la[2]));        for (int i = 0; i < la.length; i++) {            Utils.forceGC();            Utils.getFreedRendezvousPoints();            int hash = la[i].hashCode();            la[i] = null;            Utils.forceGC();            int[] ia = Utils.getFreedRendezvousPoints();            assertEquals("one freed", 1, ia.length);            assertEquals("freed one matches", hash, ia[0]);        }        // clean up        LinkPortal.setLinks(is, null);    }    /**     * Tests whether setLinks does proper checking on the isolate's state.     */    void testIsolateState() throws IsolateStartupException {        Isolate us = Isolate.currentIsolate();        Isolate them = new Isolate("com.sun.midp.links.Empty", null);        Link[] la = new Link[1];        boolean thrown;        la[0] = Link.newLink(us, us);        thrown = false;        try {            LinkPortal.setLinks(them, la);        } catch (IllegalStateException ise) {            thrown = true;        }        assertTrue("not started: setLinks should throw ISE", thrown);        them.start();        thrown = false;        try {            LinkPortal.setLinks(them, la);        } catch (IllegalStateException ise) {            thrown = true;        } finally {            LinkPortal.setLinks(them, null);  // clean up        }                    assertFalse("started: setLinks shouldn't throw ISE", thrown);        them.exit(0);        them.waitForExit();        thrown = false;        try {            LinkPortal.setLinks(them, la);        } catch (IllegalStateException ise) {            thrown = true;        }        assertTrue("exited: setLinks should throw ISE", thrown);    }    /**     * Runs all tests.     */    public void runTests() throws IsolateStartupException {        declare("testNulls");        testNulls();        declare("testZero");        testZero();        declare("testClosed");        testClosed();        declare("testBlockedGet");        testBlockedGet();        declare("testActual");        testActual();        declare("testReplace");        testReplace();        declare("testIsolateState");        testIsolateState();    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?