EMMA Coverage Report (generated Mon Nov 29 14:43:38 PST 2010)
[all classes][com.jeantessier.classreader]

COVERAGE SUMMARY FOR SOURCE FILE [TestLocalVariableTypeTableAttribute.java]

nameclass, %method, %block, %line, %
TestLocalVariableTypeTableAttribute.java100% (1/1)100% (11/11)100% (271/271)100% (64/64)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class TestLocalVariableTypeTableAttribute100% (1/1)100% (11/11)100% (271/271)100% (64/64)
<static initializer> 100% (1/1)100% (40/40)100% (3/3)
TestLocalVariableTypeTableAttribute (): void 100% (1/1)100% (3/3)100% (1/1)
findLastLocalVariableTypeTableAttribute (Collection): LocalVariableTypeTable_... 100% (1/1)100% (21/21)100% (5/5)
setUp (): void 100% (1/1)100% (23/23)100% (6/6)
testConstructorHasLocalVariableTypeTableAttribute (): void 100% (1/1)100% (21/21)100% (6/6)
testGenericConstructorHasLocalVariableTypeTableAttribute (): void 100% (1/1)100% (21/21)100% (6/6)
testGenericMethodHasLocalVariableTypeTableAttribute (): void 100% (1/1)100% (21/21)100% (6/6)
testLocalVariableType (): void 100% (1/1)100% (58/58)100% (13/13)
testMethodHasLocalVariableTypeTableAttribute (): void 100% (1/1)100% (21/21)100% (6/6)
testNonGenericMethodDoesNotHaveLocalVariableTypeTableAttribute (): void 100% (1/1)100% (21/21)100% (6/6)
testNonGenericMethodUsingGenericsHasLocalVariableTypeTableAttribute (): void 100% (1/1)100% (21/21)100% (6/6)

1/*
2 *  Copyright (c) 2001-2009, Jean Tessier
3 *  All rights reserved.
4 *
5 *  Redistribution and use in source and binary forms, with or without
6 *  modification, are permitted provided that the following conditions
7 *  are met:
8 *
9 *      * Redistributions of source code must retain the above copyright
10 *        notice, this list of conditions and the following disclaimer.
11 *
12 *      * Redistributions in binary form must reproduce the above copyright
13 *        notice, this list of conditions and the following disclaimer in the
14 *        documentation and/or other materials provided with the distribution.
15 *
16 *      * Neither the name of Jean Tessier nor the names of his contributors
17 *        may be used to endorse or promote products derived from this software
18 *        without specific prior written permission.
19 *
20 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 *  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
24 *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32 
33package com.jeantessier.classreader;
34 
35import java.io.*;
36import java.util.*;
37 
38import junit.framework.*;
39 
40public class TestLocalVariableTypeTableAttribute extends TestCase {
41    public static final String TEST_CLASS = "test";
42    public static final String TEST_GENERIC_CLASS_CLASS = "testgenericclass";
43    public static final String TEST_GENERIC_METHODS_CLASS = "testgenericmethods";
44    public static final String TEST_FILENAME = "classes" + File.separator + TEST_CLASS + ".class";
45    public static final String TEST_GENERIC_CLASS_FILENAME = "classes" + File.separator + TEST_GENERIC_CLASS_CLASS + ".class";
46    public static final String TEST_GENERIC_METHODS_FILENAME = "classes" + File.separator + TEST_GENERIC_METHODS_CLASS + ".class";
47 
48    private ClassfileLoader loader;
49 
50    protected void setUp() throws Exception {
51        super.setUp();
52 
53        loader = new AggregatingClassfileLoader();
54 
55        loader.load(Collections.singleton(TEST_FILENAME));
56        loader.load(Collections.singleton(TEST_GENERIC_CLASS_FILENAME));
57        loader.load(Collections.singleton(TEST_GENERIC_METHODS_FILENAME));
58    }
59 
60    public void testConstructorHasLocalVariableTypeTableAttribute() {
61        Classfile genericClass = loader.getClassfile(TEST_GENERIC_CLASS_CLASS);
62        Method_info method = genericClass.getMethod(TEST_GENERIC_CLASS_CLASS + "(java.lang.Object)");
63        Code_attribute code = method.getCode();
64 
65        LocalVariableTypeTable_attribute localVariableTypeTableAttribute = findLastLocalVariableTypeTableAttribute(code.getAttributes());
66        assertNotNull("LocalVariableTypeTable attribute missing", localVariableTypeTableAttribute);
67    }
68 
69    public void testGenericConstructorHasLocalVariableTypeTableAttribute() {
70        Classfile genericClass = loader.getClassfile(TEST_GENERIC_METHODS_CLASS);
71        Method_info method = genericClass.getMethod(TEST_GENERIC_METHODS_CLASS + "(java.lang.Object)");
72        Code_attribute code = method.getCode();
73 
74        LocalVariableTypeTable_attribute localVariableTypeTableAttribute = findLastLocalVariableTypeTableAttribute(code.getAttributes());
75        assertNotNull("LocalVariableTypeTable attribute missing", localVariableTypeTableAttribute);
76    }
77 
78    public void testNonGenericMethodDoesNotHaveLocalVariableTypeTableAttribute() {
79        Classfile nonGenericClass = loader.getClassfile(TEST_CLASS);
80        Method_info method = nonGenericClass.getMethod("main(java.lang.String[])");
81        Code_attribute code = method.getCode();
82 
83        LocalVariableTypeTable_attribute localVariableTypeTableAttribute = findLastLocalVariableTypeTableAttribute(code.getAttributes());
84        assertNull("LocalVariableTypeTable attribute missing", localVariableTypeTableAttribute);
85    }
86 
87    public void testNonGenericMethodUsingGenericsHasLocalVariableTypeTableAttribute() {
88        Classfile genericClass = loader.getClassfile(TEST_GENERIC_METHODS_CLASS);
89        Method_info method = genericClass.getMethod("testregularmethod(java.lang.Class)");
90        Code_attribute code = method.getCode();
91 
92        LocalVariableTypeTable_attribute localVariableTypeTableAttribute = findLastLocalVariableTypeTableAttribute(code.getAttributes());
93        assertNotNull("LocalVariableTypeTable attribute missing", localVariableTypeTableAttribute);
94    }
95 
96    public void testMethodHasLocalVariableTypeTableAttribute() {
97        Classfile genericClass = loader.getClassfile(TEST_GENERIC_CLASS_CLASS);
98        Method_info method = genericClass.getMethod("testmethod(java.lang.Object)");
99        Code_attribute code = method.getCode();
100 
101        LocalVariableTypeTable_attribute localVariableTypeTableAttribute = findLastLocalVariableTypeTableAttribute(code.getAttributes());
102        assertNotNull("LocalVariableTypeTable attribute missing", localVariableTypeTableAttribute);
103    }
104 
105    public void testGenericMethodHasLocalVariableTypeTableAttribute() {
106        Classfile genericClass = loader.getClassfile(TEST_GENERIC_METHODS_CLASS);
107        Method_info method = genericClass.getMethod("testmethod(java.lang.Object)");
108        Code_attribute code = method.getCode();
109 
110        LocalVariableTypeTable_attribute localVariableTypeTableAttribute = findLastLocalVariableTypeTableAttribute(code.getAttributes());
111        assertNotNull("LocalVariableTypeTable attribute missing", localVariableTypeTableAttribute);
112    }
113 
114    public void testLocalVariableType() {
115        Classfile genericClass = loader.getClassfile(TEST_GENERIC_CLASS_CLASS);
116        Method_info method = genericClass.getMethod(TEST_GENERIC_CLASS_CLASS + "(java.lang.Object)");
117        Code_attribute code = method.getCode();
118 
119        LocalVariableTypeTable_attribute localVariableTypeTableAttribute = findLastLocalVariableTypeTableAttribute(code.getAttributes());
120        assertNotNull("LocalVariableTypeTable attribute missing", localVariableTypeTableAttribute);
121        assertEquals("Nb LocalVariableType", 2, localVariableTypeTableAttribute.getLocalVariableTypes().size());
122 
123        LocalVariableType localVariableType = localVariableTypeTableAttribute.getLocalVariableTypes().iterator().next();
124        assertEquals("start pc", 0, localVariableType.getStartPC());
125        assertEquals("length", 5, localVariableType.getLength());
126        assertEquals("name", "this", localVariableType.getName());
127        assertEquals("signature", "Ltestgenericclass<TT;>;", localVariableType.getSignature());
128        assertEquals("index", 0, localVariableType.getIndex());
129    }
130 
131    private LocalVariableTypeTable_attribute findLastLocalVariableTypeTableAttribute(Collection<? extends Attribute_info> attributes) {
132        LocalVariableTypeTable_attribute result = null;
133 
134        for (Attribute_info attribute : attributes) {
135            if (attribute instanceof LocalVariableTypeTable_attribute) {
136                result = (LocalVariableTypeTable_attribute) attribute;
137            }
138        }
139 
140        return result;
141    }
142}

[all classes][com.jeantessier.classreader]
EMMA 2.0.5312 (C) Vladimir Roubtsov