KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > nextapp > echo2 > webcontainer > test > IdTableTest


1 /*
2  * This file is part of the Echo Web Application Framework (hereinafter "Echo").
3  * Copyright (C) 2002-2005 NextApp, Inc.
4  *
5  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6  *
7  * The contents of this file are subject to the Mozilla Public License Version
8  * 1.1 (the "License"); you may not use this file except in compliance with
9  * the License. You may obtain a copy of the License at
10  * http://www.mozilla.org/MPL/
11  *
12  * Software distributed under the License is distributed on an "AS IS" basis,
13  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14  * for the specific language governing rights and limitations under the
15  * License.
16  *
17  * Alternatively, the contents of this file may be used under the terms of
18  * either the GNU General Public License Version 2 or later (the "GPL"), or
19  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
20  * in which case the provisions of the GPL or the LGPL are applicable instead
21  * of those above. If you wish to allow use of your version of this file only
22  * under the terms of either the GPL or the LGPL, and not to allow others to
23  * use your version of this file under the terms of the MPL, indicate your
24  * decision by deleting the provisions above and replace them with the notice
25  * and other provisions required by the GPL or the LGPL. If you do not delete
26  * the provisions above, a recipient may use your version of this file under
27  * the terms of any one of the MPL, the GPL or the LGPL.
28  */

29
30 package nextapp.echo2.webcontainer.test;
31
32 import java.io.ByteArrayInputStream JavaDoc;
33 import java.io.ByteArrayOutputStream JavaDoc;
34 import java.io.ObjectInputStream JavaDoc;
35 import java.io.ObjectOutputStream JavaDoc;
36 import java.io.Serializable JavaDoc;
37
38 import nextapp.echo2.app.ApplicationInstance;
39 import nextapp.echo2.app.RenderIdSupport;
40 import nextapp.echo2.webcontainer.util.IdTable;
41 import junit.framework.TestCase;
42
43 /**
44  *
45  */

46 public class IdTableTest extends TestCase {
47
48     private static class TestObject
49     implements RenderIdSupport, Serializable JavaDoc {
50         
51         public String JavaDoc id = ApplicationInstance.generateSystemId();
52         
53         /**
54          * @see nextapp.echo2.app.RenderIdSupport#getRenderId()
55          */

56         public String JavaDoc getRenderId() {
57             return id;
58         }
59     }
60     
61     /**
62      * Tests to ensure references are released. This test relies on
63      * <code>System.gc()</code> actually causing weak references to
64      * be collected. It is not technically safe to rely on this,
65      * thus this test may randomly fail.
66      */

67     public void testReferenceRelease() {
68         IdTable idManager = new IdTable();
69         TestObject testObject = new TestObject();
70         String JavaDoc id = testObject.getRenderId();
71         idManager.register(testObject);
72         assertNotNull(idManager.getObject(id));
73         
74         testObject = null;
75         for (int i = 0; i < 10; ++i) {
76             System.gc();
77         }
78         
79         assertNull(idManager.getObject(id));
80     }
81     
82     /**
83      * Tests serialization of an <code>IdTable</code>.
84      */

85     public void testSerialization()
86     throws Exception JavaDoc {
87         IdTable idTable = new IdTable();
88         TestObject testObject = new TestObject();
89         String JavaDoc id = testObject.getRenderId();
90         idTable.register(testObject);
91         
92         ByteArrayOutputStream JavaDoc byteOut = new ByteArrayOutputStream JavaDoc();
93         ObjectOutputStream JavaDoc objectOut = new ObjectOutputStream JavaDoc(byteOut);
94         objectOut.writeObject(idTable);
95         objectOut.close();
96         
97         byte[] data = byteOut.toByteArray();
98         
99         ByteArrayInputStream JavaDoc byteIn = new ByteArrayInputStream JavaDoc(data);
100         ObjectInputStream JavaDoc objectIn = new ObjectInputStream JavaDoc(byteIn);
101         IdTable newIdTable = (IdTable) objectIn.readObject();
102         TestObject newTestObject = (TestObject) newIdTable.getObject(id);
103         assertEquals(id, newTestObject.getRenderId());
104         objectIn.close();
105         
106         testObject = null;
107         for (int i = 0; i < 10; ++i) {
108             System.gc();
109         }
110         
111         assertNull(idTable.getObject(id));
112         assertNotNull(newIdTable.getObject(id));
113         
114         newTestObject = null;
115         for (int i = 0; i < 10; ++i) {
116             System.gc();
117         }
118
119         assertNull(newIdTable.getObject(id));
120     }
121 }
122
Popular Tags