// This product is provided under the terms of EPL (Eclipse Public License)
// version 1.0.
//
// The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php
package org.dtangler.javaengine.classfileparser;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Set;
import org.dtangler.javaengine.classfileparser.ClassFileParser;
import org.dtangler.javaengine.types.JavaClass;
import org.junit.Test;
public class ClassFileParserTest {
@Test
public void testGetClassName() throws IOException {
JavaClass result = parse("SimpleClass.class");
assertEquals(getTestDataPackage() + ".SimpleClass", result
.getFullName());
}
private String getTestDataPackage() {
return "org.dtangler.javaengine.classfileparser.testdata";
}
@Test
public void testGetSourceFileName() throws IOException {
JavaClass result = parse("SimpleClass.class");
assertEquals("SimpleClass.java", result.getSourceFileName());
}
@Test
public void testIsAbstract() {
assertFalse(parse("SimpleClass.class").isAbstract());
assertTrue(parse("SimpleInterface.class").isAbstract());
assertTrue(parse("SimpleAbstractClass.class").isAbstract());
}
@Test
public void testClassWithNoDependencies() {
assertTrue(parse("SimpleClass.class").getDependencies().isEmpty());
}
@Test
public void testExtendedClass() {
Set<String> dependencies = parse("SimpleExtendedClass.class")
.getDependencies().keySet();
assertEquals(1, dependencies.size());
assertTrue(dependencies.contains(getTestDataPackage() + ".SimpleClass"));
}
@Test
public void testSimpleClassWithPrimitiveFields() {
assertTrue(parse("SimpleClassWithPrimitiveFields.class")
.getDependencies().isEmpty());
}
@Test
public void testSimpleFieldDependencies() {
Set<String> dependencies = parse("SimpleFieldDependencies.class")
.getDependencies().keySet();
assertEquals(4, dependencies.size());
assertTrue(dependencies.contains("java.lang.String"));
assertTrue(dependencies.contains("java.util.Set"));
assertTrue(dependencies.contains("java.util.HashSet"));
assertTrue(dependencies.contains(getTestDataPackage() + ".SimpleClass"));
}
@Test
public void testSimpleMethodParameterDependencies() {
Set<String> dependencies = parse(
"SimpleMethodParameterDependencies.class").getDependencies()
.keySet();
assertEquals(2, dependencies.size());
assertTrue(dependencies.contains("java.lang.String"));
assertTrue(dependencies.contains(getTestDataPackage() + ".SimpleClass"));
}
@Test
public void testSimpleMethodReturnValueDependencies() {
Set<String> dependencies = parse(
"SimpleMethodReturnValueDependencies.class").getDependencies()
.keySet();
assertEquals(2, dependencies.size());
assertTrue(dependencies.contains("java.lang.String"));
assertTrue(dependencies.contains(getTestDataPackage() + ".SimpleClass"));
}
@Test
public void testSimpleDependenciesInsideMethods() {
Set<String> dependencies = parse(
"SimpleDependenciesInsideMethods.class").getDependencies()
.keySet();
assertEquals(2, dependencies.size());
assertTrue(dependencies.contains(getTestDataPackage()
+ ".SimpleClassWithStaticMethod"));
assertTrue(dependencies.contains(getTestDataPackage() + ".SimpleClass"));
}
// TODO This does not work yet: @Test
public void testSimpleAnnotationDependency() {
Set<String> dependencies = parse("SimpleAnnotationDependency.class")
.getDependencies().keySet();
assertEquals(1, dependencies.size());
assertTrue(dependencies.contains(getTestDataPackage()
+ ".SimpleAnnotation"));
}
@Test
public void testInnerClassDependency() {
Set<String> dependencies = parse("SimpleClassWithInnerClass.class")
.getDependencies().keySet();
assertEquals(1, dependencies.size());
assertTrue(dependencies.contains(getTestDataPackage()
+ ".SimpleClassWithInnerClass"));
dependencies = parse("SimpleClassWithInnerClass$InnerClass.class")
.getDependencies().keySet();
assertEquals(1, dependencies.size());
assertTrue(dependencies.contains(getTestDataPackage()
+ ".SimpleClassWithInnerClass"));
}
// TODO This does not work yet: @Test
public void testStaticInnerClassDependency() {
Set<String> dependencies = parse(
"SimpleClassWithStaticInnerClass.class").getDependencies()
.keySet();
assertEquals(0, dependencies.size());
dependencies = parse("SimpleClassWithStaticInnerClass$InnerClass.class")
.getDependencies().keySet();
assertEquals(0, dependencies.size());
}
// TODO This does not work yet: @Test
public void testTemplateDependency() {
Set<String> dependencies = parse("SimpleTemplateDependency.class")
.getDependencies().keySet();
assertEquals(1, dependencies.size());
assertTrue(dependencies.contains(getTestDataPackage() + ".SimpleClass"));
}
private JavaClass parse(String path) {
InputStream stream = getClass().getResourceAsStream("testdata/" + path);
try {
return new ClassFileParser().parse(new DataInputStream(stream));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}