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 + -
显示快捷键?