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