/**
* Copyright (c) 2010 Darmstadt University of Technology.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marcel Bruch - initial API and implementation.
*/
package org.eclipse.recommenders.utils;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.eclipse.recommenders.utils.names.IFieldName;
import org.eclipse.recommenders.utils.names.IMethodName;
import org.eclipse.recommenders.utils.names.IPackageName;
import org.eclipse.recommenders.utils.names.ITypeName;
import org.eclipse.recommenders.utils.names.Names;
import org.eclipse.recommenders.utils.names.Names.PrimitiveType;
import org.eclipse.recommenders.utils.names.VmFieldName;
import org.eclipse.recommenders.utils.names.VmMethodName;
import org.eclipse.recommenders.utils.names.VmPackageName;
import org.eclipse.recommenders.utils.names.VmTypeName;
import org.junit.Test;
import com.google.common.collect.Lists;
public class NamesTest {
public static final ITypeName STRING = VmTypeName.get("Ljava/lang/String");
public static final IPackageName JAVA_UTIL = VmPackageName.get("java/util");
public static final IPackageName JAVA_LANG = VmPackageName.get("java/lang");
public static final IPackageName JAVA_UTIL_CONCURRENT = VmPackageName.get("java/util/concurrent");
public static final ITypeName LONG = VmTypeName.get("J");
public static final ITypeName LONG_ARRAY = VmTypeName.get("[J");
public static final ITypeName LONG_ARRAY_3DIM = VmTypeName.get("[[[J");
public static final ITypeName MAP = VmTypeName.get("Ljava/utils/Map");
public static final ITypeName MAP_ENTRY = VmTypeName.get("Ljava/utils/Map$Entry");
public static final ITypeName CLASS_IN_DEFAULT_PACAKGE = VmTypeName.get("LDefault");
public static final IMethodName STRING_HASHCODE = VmMethodName.get("Ljava/lang/String.hashCode()I");
public static final IMethodName STRING_NEW = VmMethodName.get("Ljava/lang/String.<init>()V");
public static final IMethodName STRING_WAIT = VmMethodName.get("Ljava/lang/String.wait(I)V");
public static final IMethodName STRING_VIRTUAL = VmMethodName
.get("Ljava/lang/String.virtual(I[[Ljava/lang/String;Ljava/lang/Object;)V");
public static final ITypeName ANONYMOUS = VmTypeName.get("Ljava/awt/SomeClass$17");
public static final IFieldName EVENT_FIELD = VmFieldName.get("Ljava/lang/Event.field;Ljava/lang/String");
@Test
public void testSrc2vmType_Primitives() {
for (final PrimitiveType primitive : PrimitiveType.values()) {
final String src = primitive.src();
final String expected = primitive.vm() + "";
final String actual = Names.src2vmType(src);
assertEquals(expected, actual);
}
}
@Test
public void testSrc2vmType_PrimitiveArrays() {
for (final PrimitiveType primitive : PrimitiveType.values()) {
if (primitive != PrimitiveType.VOID) {
final String src = primitive.src() + "[]";
final String expected = "[" + primitive.vm() + "";
final String actual = Names.src2vmType(src);
assertEquals(expected, actual);
}
}
}
@Test
public void testVm2srcSimpleMethod() {
assertEquals("wait(int)", Names.vm2srcSimpleMethod(STRING_WAIT));
assertEquals("hashCode()", Names.vm2srcSimpleMethod(STRING_HASHCODE));
assertEquals("new String()", Names.vm2srcSimpleMethod(STRING_NEW));
}
@Test
public void testVm2srcPackage() {
assertEquals("java.lang", Names.vm2srcPackage(JAVA_LANG));
assertEquals("java.util.concurrent", Names.vm2srcPackage(JAVA_UTIL_CONCURRENT));
}
@Test
public void testSrc2vmType_SomeReferenceTypes() {
assertEquals("Ljava/lang/String", Names.src2vmType("java.lang.String"));
assertEquals("LString", Names.src2vmType("String"));
}
@Test
public void testVm2srcQualifiedType_WithArrays() {
assertEquals("long[][][]", Names.vm2srcQualifiedType(LONG_ARRAY_3DIM));
}
@Test
public void testVm2srcQualifiedType_WithPrimitives() {
assertEquals("int", Names.vm2srcQualifiedType(VmTypeName.INT));
assertEquals("double", Names.vm2srcQualifiedType(VmTypeName.DOUBLE));
assertEquals("long", Names.vm2srcQualifiedType(VmTypeName.LONG));
assertEquals("float", Names.vm2srcQualifiedType(VmTypeName.FLOAT));
assertEquals("char", Names.vm2srcQualifiedType(VmTypeName.CHAR));
assertEquals("void", Names.vm2srcQualifiedType(VmTypeName.VOID));
assertEquals("boolean", Names.vm2srcQualifiedType(VmTypeName.BOOLEAN));
assertEquals("byte", Names.vm2srcQualifiedType(VmTypeName.BYTE));
assertEquals("null", Names.vm2srcQualifiedType(VmTypeName.NULL));
assertEquals("short", Names.vm2srcQualifiedType(VmTypeName.SHORT));
}
@Test
public void testVm2srcQualifiedType_WithReferenceTypes() {
assertEquals("java.lang.Object", Names.vm2srcQualifiedType(VmTypeName.OBJECT));
}
@Test
public void testVm2SrcSimpleNameFromName() {
final String expected = "String";
final String actual = Names.vm2srcSimpleTypeName(STRING);
assertEquals(expected, actual);
}
@Test
public void testVm2SrcSimpleNameFromNameString_WithPrimitive() {
assertEquals("int", Names.vm2srcSimpleTypeName("I"));
assertEquals("double", Names.vm2srcSimpleTypeName("D"));
assertEquals("long", Names.vm2srcSimpleTypeName("J"));
assertEquals("float", Names.vm2srcSimpleTypeName("F"));
assertEquals("char", Names.vm2srcSimpleTypeName("C"));
assertEquals("void", Names.vm2srcSimpleTypeName("V"));
assertEquals("boolean", Names.vm2srcSimpleTypeName("Z"));
assertEquals("byte", Names.vm2srcSimpleTypeName("B"));
assertEquals("short", Names.vm2srcSimpleTypeName("S"));
}
@Test
public void testVm2SrcSimpleNameFromNameWithPrimitive() {
final String expected = "long";
final String actual = Names.vm2srcSimpleTypeName(LONG);
assertEquals(expected, actual);
}
@Test
public void testVm2SrcSimpleNameFromNameWithPrimitive2DimensionalArray() {
final String expected = "long[][][]";
final String actual = Names.vm2srcSimpleTypeName(LONG_ARRAY_3DIM);
assertEquals(expected, actual);
}
@Test
public void testVm2SrcSimpleNameFromNameWithPrimitiveArray() {
final String expected = "long[]";
final String actual = Names.vm2srcSimpleTypeName(LONG_ARRAY);
assertEquals(expected, actual);
}
@Test
public void testVm2SrcTypeNameFromString() {
final String expected = "java.lang.String";
final String value = STRING.getIdentifier();
final String actual = Names.vm2srcTypeName(value);
assertEquals(expected, actual);
}
@Test
public void testParseMethodSignature1() {
final String value = STRING_VIRTUAL.getIdentifier();
final String[] actual = Names.parseMethodSignature1(value);
assertEquals(5, actual.length);
assertEquals("Ljava/lang/String.virtual", actual[0]);
assertEquals("int", actual[1]);
assertEquals("java.lang.String[][]", actual[2]);
assertEquals("java.lang.Object", actual[3]);
assertEquals("void", actual[actual.length - 1]);
}
@Test
public void testParseMethodSignature2() {
final String value = STRING_WAIT.getIdentifier();
final String[] actual = Names.parseMethodSignature2(value);
assertEquals(2, actual.length);
assertEquals("Ljava/lang/String", actual[0]);
assertEquals("wait(I)V", actual[1]);
}
@Test
public void testParseMethodSignature3() {
final String value = STRING_WAIT.getIdentifier();
final String[] actual = Names.parseMethodSignature3(value);
assertEquals(3, actual.length);
assertEquals("Ljava/lang/String", actual[0]);
assertEquals("wait", actual[1]);
assertEquals("(I)V", actual[2]);
}
@Test
public void testSrc2vmMethod() {
final String expected = STRING_WAIT.getIdentifier();
final String actual = Names.src2vmMethod("Ljava/lang/String.wait", new String[] { "int" }, "void");
assertEquals(expected, actual);
}
@Test
public void testSrc2vmType() {
// "int[][][]" not supported
final String[] srcTypes = new String[] { "int", "void", "java.lang.String" };
final List<String> expecteds = Lists.newArrayList("I", "V", "Ljava/lang/String");
final List<String> actuals = Names.src2vmType(srcTypes);
assertEquals(expecteds, actuals);
}
@Test
public void testVm2srcQualifiedMethod() {
final String expected = "java.lang.String.virtual(int, String[][], Object)";
final String actual = Names.vm2srcQualifiedMethod(STRING_VIRTUAL);
assertEquals(expected, actual);
}
@Test
public void testJava2vmType() {
final String expected = "Ljava/lang/String";
final String actual = Names.java2vmType(String.class).getIdentifier();
assertEquals(expected, actual);
}
}