testlink.java

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

JAVA
413
字号
/* * * * 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;import java.io.IOException;import java.io.InterruptedIOException;/** * Tests basic operations on the Link class. */public class TestLink extends TestCase {    /**     * Tests creation, isOpen(), and close().     */    void testCreate() {        Isolate i = Isolate.currentIsolate();        Link link = Link.newLink(i, i);        assertTrue("link should be open", link.isOpen());        link.close();        assertFalse("link should be closed", link.isOpen());    }    /**     * Tests nulls.     */    void testNulls() {        Isolate i = Isolate.currentIsolate();        boolean thrown;        thrown = false;        try {            Link link = Link.newLink(null, null);        } catch (NullPointerException npe) {            thrown = true;        }        assertTrue("null,null should throw NPE", thrown);        thrown = false;        try {            Link link = Link.newLink(null, i);        } catch (NullPointerException npe) {            thrown = true;        }        assertTrue("null,i should throw NPE", thrown);        thrown = false;        try {            Link link = Link.newLink(i, null);        } catch (NullPointerException npe) {            thrown = true;        }        assertTrue("i,null should throw NPE", thrown);        thrown = false;        try {            Link link = Link.newLink(i, i);        } catch (NullPointerException npe) {            thrown = true;        }        assertFalse("i,i should not throw NPE", thrown);    }    /**     * Tests for equals() and hashCode().     */    void testEquals() {        Isolate i = Isolate.currentIsolate();        Link link = Link.newLink(i, i);        Link link2 = Link.newLink(i, i);        assertFalse("must not equal null", link.equals(null));        assertTrue("must equal itself", link.equals(link));        assertFalse("must not equal other obj", link.equals("foobar"));        assertFalse("must not equal other link", link.equals(link2));        link.close();        assertEquals("hashCode of closed should be zero", 0, link.hashCode());        link2.close();        assertTrue("two closed links should be equal", link.equals(link2));    }    /**     * Tests receive() on a closed link.     */    void testReceiveClosed() throws IOException {        Isolate i = Isolate.currentIsolate();        Link link = Link.newLink(i, i);        link.close();        boolean thrown = false;        try {            LinkMessage lm = link.receive();        } catch (ClosedLinkException cle) {            thrown = true;        }        assertTrue("exception should be thrown", thrown);    }    /**     * Tests send() on a closed link.     */    void testSendClosed() throws IOException {        Isolate i = Isolate.currentIsolate();        Link link = Link.newLink(i, i);        link.close();        boolean thrown = false;        try {            link.send(LinkMessage.newStringMessage("foo"));        } catch (ClosedLinkException cle) {            thrown = true;        }        assertTrue("exception should be thrown", thrown);    }    /**     * Tests receive() followed by a send().     */    void testReceiveSend() throws IOException {        Isolate i = Isolate.currentIsolate();        Link link = Link.newLink(i, i);        Receiver receiver = new Receiver(link);        assertFalse("receiver should be blocked", receiver.done);        assertNull("receiver should have no exceptions", receiver.exception);        String sendstr = "bar";        link.send(LinkMessage.newStringMessage(sendstr));        receiver.await();        assertTrue("receiver should be done", receiver.done);        assertNull("receiver should have no exceptions", receiver.exception);        assertNotNull("receiver should have received a message", receiver.msg);        String recvstr = receiver.msg.extractString();        assertTrue("strings shouldn't be identical", sendstr != recvstr);        assertEquals("strings should be equal", sendstr, recvstr);    }    /**     * Tests send() followed by a receive().     */    void testSendReceive() throws IOException {        String sendstr = "foo";        Isolate i = Isolate.currentIsolate();        Link link = Link.newLink(i, i);        Sender sender = new Sender(link,            LinkMessage.newStringMessage(sendstr));        assertFalse("sender should be blocked", sender.done);        assertNull("sender should have no exceptions", sender.exception);        LinkMessage lm = link.receive();        sender.await();        assertTrue("sender should be done", sender.done);        assertNull("sender should have no exceptions", sender.exception);        String recvstr = lm.extractString();        assertTrue("strings shouldn't be identical", sendstr != recvstr);        assertEquals("strings should be equal", sendstr, recvstr);    }    /**     * Tests that close() will unblock a thread blocked in receive().     */    void testReceiveClose() throws IOException {        Isolate i = Isolate.currentIsolate();        Link link = Link.newLink(i, i);        Receiver receiver = new Receiver(link);        assertFalse("receiver should be blocked", receiver.done);        assertNull("receiver should have no exceptions", receiver.exception);        link.close();        receiver.await();        assertTrue("receiver should be done", receiver.done);        boolean wasIIOE =            receiver.exception instanceof InterruptedIOException;        assertTrue("receiver should have gotten InterruptedIOException",            wasIIOE);        if (!wasIIOE) {            System.out.println("### receiver got " + receiver.exception);        }    }    /**     * Tests that close() will unblock a thread blocked in send().     */    void testSendClose() throws IOException {        Isolate i = Isolate.currentIsolate();        Link link = Link.newLink(i, i);        Sender sender = new Sender(link,            LinkMessage.newStringMessage("foobar"));        assertFalse("sender should be blocked", sender.done);        assertNull("sender should have no exceptions", sender.exception);        link.close();        sender.await();        assertTrue("sender should be done", sender.done);        boolean wasIIOE =            sender.exception instanceof InterruptedIOException;        assertTrue("sender should have gotten InterruptedIOException",            wasIIOE);        if (!wasIIOE) {            System.out.println("### sender got " + sender.exception);        }    }    /**     * Tests that the native rendezvous point structure is getting cleaned up      * properly by the finalizer.     */    void testCleanup() {        Isolate i = Isolate.currentIsolate();        Link link = Link.newLink(i, i);        int rp = link.hashCode();        assertEquals("refcount must be 1", 1, Utils.getRefCount(link));        Utils.forceGC();        /* ignored */ Utils.getFreedRendezvousPoints();        link = null;        Utils.forceGC();        int[] freed = Utils.getFreedRendezvousPoints();        assertEquals("length must be one", 1, freed.length);        if (freed.length == 1) {            assertEquals("freed rp must match", rp, freed[0]);        }    }    /**     * Tests link creation with isolates in different states.     */    void testIsolateStates() throws IOException, IsolateStartupException {        boolean thrown;        Isolate us = Isolate.currentIsolate();        Isolate them = new Isolate("com.sun.midp.links.Empty", null);        thrown = false;        try {            Link link = Link.newLink(us, them);        } catch (IllegalStateException ise) {            thrown = true;        }        assertTrue("started,new should throw ISE", thrown);        thrown = false;        try {            Link link = Link.newLink(them, us);        } catch (IllegalStateException ise) {            thrown = true;        }        assertTrue("new,started should throw ISE", thrown);        them.start();        thrown = false;        try {            Link link = Link.newLink(us, them);        } catch (IllegalStateException ise) {            thrown = true;        }        assertFalse("started,started should not throw ISE", thrown);        thrown = false;        try {            Link link = Link.newLink(them, us);        } catch (IllegalStateException ise) {            thrown = true;        }        assertFalse("started,started should not throw ISE", thrown);        them.exit(0);        them.waitForExit();        thrown = false;        try {            Link link = Link.newLink(us, them);        } catch (IllegalStateException ise) {            thrown = true;        }        assertTrue("started,terminated should throw ISE", thrown);        thrown = false;        try {            Link link = Link.newLink(them, us);        } catch (IllegalStateException ise) {            thrown = true;        }        assertTrue("terminated,started should throw ISE", thrown);    }    /**     * Tests receiver and sender isolate access for a link.     */    void testAccess() throws IOException, IsolateStartupException {        Isolate i1 = Isolate.currentIsolate();        Isolate i2 = new Isolate("com.sun.midp.links.Empty", null);        i2.start();        Link link1 = Link.newLink(i1, i2);        Link link2 = Link.newLink(i2, i1);        boolean thrown;        thrown = false;        try {            LinkMessage lm = link1.receive();        } catch (IllegalArgumentException iae) {            thrown = true;        }        assertTrue("receive should catch IAE", thrown);        thrown = false;        try {            link2.send(LinkMessage.newStringMessage("hello"));        } catch (IllegalArgumentException iae) {            thrown = true;        }        assertTrue("send should catch IAE", thrown);        i2.exit(0);    }    /**     * Runs all tests.     */    public void runTests() throws IOException, IsolateStartupException {        declare("testCreate");        testCreate();        declare("testNulls");        testNulls();        declare("testEquals");        testEquals();        declare("testReceiveClosed");        testReceiveClosed();        declare("testSendClosed");        testSendClosed();        declare("testReceiveSend");        testReceiveSend();        declare("testSendReceive");        testSendReceive();        declare("testReceiveClose");        testReceiveClose();        declare("testSendClose");        testSendClose();        declare("testCleanup");        testCleanup();        declare("testIsolateStates");        testIsolateStates();        declare("testAccess");        testAccess();    }}

⌨️ 快捷键说明

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