001: /*
002: * @(#)ClassRecordIOUTest.java
003: *
004: * Copyright (C) 2003 Matt Albrecht
005: * groboclown@users.sourceforge.net
006: * http://groboutils.sourceforge.net
007: *
008: * Permission is hereby granted, free of charge, to any person obtaining a
009: * copy of this software and associated documentation files (the "Software"),
010: * to deal in the Software without restriction, including without limitation
011: * the rights to use, copy, modify, merge, publish, distribute, sublicense,
012: * and/or sell copies of the Software, and to permit persons to whom the
013: * Software is furnished to do so, subject to the following conditions:
014: *
015: * The above copyright notice and this permission notice shall be included in
016: * all copies or substantial portions of the Software.
017: *
018: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
019: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
020: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
021: * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
022: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
023: * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
024: * DEALINGS IN THE SOFTWARE.
025: */
026:
027: package net.sourceforge.groboutils.codecoverage.v2.datastore;
028:
029: import java.io.StringReader;
030: import java.io.StringWriter;
031:
032: import junit.framework.Test;
033: import junit.framework.TestCase;
034: import junit.framework.TestSuite;
035: import net.sourceforge.groboutils.autodoc.v1.AutoDoc;
036: import net.sourceforge.groboutils.codecoverage.v2.CCCreatorUtil;
037: import net.sourceforge.groboutils.codecoverage.v2.compiler.ModifiedMethod;
038:
039: /**
040: * Tests the ClassRecordIO class.
041: *
042: * @author Matt Albrecht <a href="mailto:groboclown@users.sourceforge.net">groboclown@users.sourceforge.net</a>
043: * @version $Date: 2004/04/15 05:48:28 $
044: * @since January 22, 2003
045: */
046: public class ClassRecordIOUTest extends TestCase {
047: //-------------------------------------------------------------------------
048: // Standard JUnit Class-specific declarations
049:
050: private static final Class THIS_CLASS = ClassRecordIOUTest.class;
051: private static final AutoDoc DOC = new AutoDoc(THIS_CLASS);
052:
053: public ClassRecordIOUTest(String name) {
054: super (name);
055: }
056:
057: //-------------------------------------------------------------------------
058: // Tests
059:
060: public void testWriteClass1() throws Exception {
061: StringWriter sw = new StringWriter();
062: ModifiedMethod mm = createModifiedMethod(THIS_CLASS, 0);
063: ClassRecord cr = createClassRecord(THIS_CLASS, mm);
064: ClassRecordIO crio = new ClassRecordIO();
065:
066: crio.writeClass(cr, sw);
067: String out = sw.toString();
068:
069: assertTrue("Did not write any data.", out.length() > 0);
070: assertEquals("Did not write the correct data.", THIS_CLASS
071: .getName().length()
072: + ":"
073: + THIS_CLASS.getName()
074: + ","
075: + cr.getClassCRC()
076: + ","
077: + cr.getSourceFileName().length()
078: + ":"
079: + cr.getSourceFileName()
080: + ",1[("
081: + mm.getMethodName().length()
082: + ":"
083: + mm.getMethodName() + ")]", out);
084: }
085:
086: public void testWriteClass2() throws Exception {
087: ClassRecord cr = new ClassRecord("a.MyClass", 100,
088: "MyClass.java", new String[0],
089: createAnalysisModuleSet());
090: StringWriter sw = new StringWriter();
091: ClassRecordIO crio = new ClassRecordIO();
092:
093: crio.writeClass(cr, sw);
094: String out = sw.toString();
095:
096: assertEquals("Did not write the correct data.",
097: "9:a.MyClass,100,12:MyClass.java,0[]", out);
098: }
099:
100: public void testReadClass1() throws Exception {
101: StringReader sr = new StringReader(
102: "9:a.MyClass,100,12:MyClass.java,2[(4:a()V)(6:b([S)V)]");
103: ClassRecordIO crio = new ClassRecordIO();
104:
105: ClassRecord cr = crio.readClass(createAnalysisModuleSet(), sr);
106: assertNotNull("Returned null class record.", cr);
107: assertEquals("Did not return correct class name.", "a.MyClass",
108: cr.getClassName());
109: assertEquals("Did not return correct class check-sum.", 100L,
110: cr.getClassCRC());
111: assertEquals("Did not return correct source file name.",
112: "MyClass.java", cr.getSourceFileName());
113: String methods[] = cr.getMethods();
114: assertEquals("Did not find correct number of methods.", 2,
115: methods.length);
116: assertEquals("First method isn't correct signature.", "a()V",
117: methods[0]);
118: assertEquals("Second method isn't correct signature.",
119: "b([S)V", methods[1]);
120: }
121:
122: public void testReadClass2() throws Exception {
123: StringReader sr = new StringReader(
124: "9:b.MyClass,100,13:MyClass2.java,0[]");
125: ClassRecordIO crio = new ClassRecordIO();
126:
127: ClassRecord cr = crio.readClass(createAnalysisModuleSet(), sr);
128: assertNotNull("Returned null class record.", cr);
129: assertEquals("Did not return correct class name.", "b.MyClass",
130: cr.getClassName());
131: assertEquals("Did not return correct class check-sum.", 100L,
132: cr.getClassCRC());
133: assertEquals("Did not return correct source file name.",
134: "MyClass2.java", cr.getSourceFileName());
135: assertEquals("Created methods out of nothing.", 0, cr
136: .getMethods().length);
137: }
138:
139: public void testReadWriteClass1() throws Exception {
140: StringWriter sw = new StringWriter();
141: ModifiedMethod mm = createModifiedMethod(THIS_CLASS, 0);
142: ClassRecord crIn = createClassRecord(THIS_CLASS, mm);
143: ClassRecordIO crio = new ClassRecordIO();
144:
145: crio.writeClass(crIn, sw);
146:
147: String out = sw.toString();
148: StringReader sr = new StringReader(out);
149: ClassRecord crOut = crio.readClass(createAnalysisModuleSet(),
150: sr);
151:
152: assertNotNull("Returned null class record.", crOut);
153: assertEquals("Did not return correct class name.", crIn
154: .getClassName(), crOut.getClassName());
155: assertEquals("Did not return correct class check-sum.", crIn
156: .getClassCRC(), crOut.getClassCRC());
157: assertEquals("Did not return correct method count.", crIn
158: .getMethodCount(), crOut.getMethodCount());
159: for (int i = 0; i < crIn.getMethodCount(); ++i) {
160: assertEquals("Did not return same method for index " + i
161: + ".", crIn.getMethodAt((short) i), crOut
162: .getMethodAt((short) i));
163: }
164: }
165:
166: //-------------------------------------------------------------------------
167: // Helpers
168:
169: protected ModifiedMethod createModifiedMethod(Class c, int index)
170: throws Exception {
171: return CCCreatorUtil.createModifiedMethod(c, 0);
172: }
173:
174: protected AnalysisModuleSet createAnalysisModuleSet() {
175: return CCCreatorUtil.createAnalysisModuleSet(3);
176: }
177:
178: protected ClassRecord createClassRecord(Class c, ModifiedMethod mm)
179: throws Exception {
180: return CCCreatorUtil.createClassRecord(c, mm,
181: createAnalysisModuleSet());
182: }
183:
184: //-------------------------------------------------------------------------
185: // Standard JUnit declarations
186:
187: public static Test suite() {
188: TestSuite suite = new TestSuite(THIS_CLASS);
189:
190: return suite;
191: }
192:
193: public static void main(String[] args) {
194: String[] name = { THIS_CLASS.getName() };
195:
196: // junit.textui.TestRunner.main( name );
197: // junit.swingui.TestRunner.main( name );
198:
199: junit.textui.TestRunner.main(name);
200: }
201:
202: /**
203: *
204: * @exception Exception thrown under any exceptional condition.
205: */
206: protected void setUp() throws Exception {
207: super .setUp();
208:
209: // set ourself up
210: }
211:
212: /**
213: *
214: * @exception Exception thrown under any exceptional condition.
215: */
216: protected void tearDown() throws Exception {
217: // tear ourself down
218:
219: super.tearDown();
220: }
221: }
|