KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > uka > ipd > coverage > junit > CoverageTestResult


1 /*
2  * Created on 26.08.2004
3  *
4  * written by Matthias Kempka
5  */

6 package de.uka.ipd.coverage.junit;
7
8 import java.util.HashMap JavaDoc;
9 import java.util.Map JavaDoc;
10 import java.util.StringTokenizer JavaDoc;
11
12 import junit.framework.TestResult;
13
14 import org.apache.bcel.Repository;
15
16 import de.uka.ipd.coverage.recording.RegisteredMethod;
17 import de.uka.ipd.coverage.recording.RegisteredMethodBuilder;
18 import de.uka.ipd.coverage.utils.Logger;
19
20 /**
21  * Created on 26.08.2004
22  *
23  * This class is the central registry for the loaded types.
24  * It inherits from TestResult and is a used within Coverage TestRunners
25  * as Collecting Parameter. Although all added functionality is static
26  * it is right to put it here, because the paths that are recorded in it
27  * are the extended test results of interest.
28  * @author Matthias Kempka
29  */

30 public class CoverageTestResult extends TestResult {
31   
32     // contains RegisteredMethod objects
33
private static Map JavaDoc registeredMethodMap = new HashMap JavaDoc();
34     
35     /**
36      * creates RegisteredMethod objects for all methods and constructors
37      * in the given class and registers them.
38      * @param className
39      */

40     private static void registerClass(String JavaDoc className) {
41         RegisteredMethodBuilder builder = new RegisteredMethodBuilder();
42         builder.createRegisteredMethods(Repository.lookupClass(className));
43         RegisteredMethod[] rMethods = builder.getRegisteredMethods();
44         Logger.getInstance().debug("Registriere " + rMethods.length + " Methoden der Klasse " + className); //$NON-NLS-1$ //$NON-NLS-2$
45
for (int i = 0; i < rMethods.length; i++ ) {
46             String JavaDoc id = rMethods[i].getHashKey();
47             Logger.getInstance().debug("Methode registriert " + id); //$NON-NLS-1$
48
registeredMethodMap.put(id, rMethods[i]);
49         }
50         
51         Logger.getInstance().debug(" Es sind " + getRegisteredMethods().length + " Methoden registriert"); //$NON-NLS-1$ //$NON-NLS-2$
52
}
53     
54     /**
55      * This method is a callback from the inserted operations to get an
56      * appropriate registeredMethod object for further callbacks during this
57      * method.
58      * @param id class and method declaration separated by colons, like
59      * "de.uka.ipd.coverage.CentralRegistry:public RegisteredMethod getRegisteredMethod(String id)".
60      * this is the format RegisteredMethod.getHashKey() returns.
61      * @return returns null if no matching Method is registered
62      */

63     public static RegisteredMethod getRegisteredMethod(String JavaDoc id) {
64         Map JavaDoc rMethodMap = registeredMethodMap;
65         
66         // if the method is not registered yet, register it
67
if (!rMethodMap.containsKey(id)) {
68             StringTokenizer JavaDoc tokenizer = new StringTokenizer JavaDoc(id, ":"); //$NON-NLS-1$
69
String JavaDoc className = tokenizer.nextToken();
70             registerClass(className);
71         }
72         RegisteredMethod method = (RegisteredMethod) rMethodMap.get(id);
73         return method;
74     }
75     
76     public static RegisteredMethod[] getRegisteredMethods() {
77         return (RegisteredMethod[]) registeredMethodMap.values().
78                 toArray(new RegisteredMethod[registeredMethodMap.size()]);
79     }
80
81     /**
82      * @param rm
83      */

84     public static void setRegisteredMethods(RegisteredMethod[] rm) {
85         registeredMethodMap.clear();
86         for (int i = 0; i < rm.length; i++) {
87             registeredMethodMap.put(rm[i].getHashKey(), rm[i]);
88         }
89     }
90 }
91
Popular Tags