/**
* 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.names;
import static org.junit.Assert.*;
import org.eclipse.recommenders.utils.NamesTest;
import org.junit.Ignore;
import org.junit.Test;
public class VmTypeNameTest {
@Test
public void testGetArrayBaseType() {
final ITypeName actual = NamesTest.LONG_ARRAY_3DIM.getArrayBaseType();
assertEquals(NamesTest.LONG, actual);
}
@Test
public void testGetArrayDimensions_3dLongArray() {
final int actual = NamesTest.LONG_ARRAY_3DIM.getArrayDimensions();
assertEquals(3, actual);
}
@Test
public void testGetArrayDimensions_LongArray() {
final int actual = NamesTest.LONG_ARRAY.getArrayDimensions();
assertEquals(1, actual);
}
@Test
public void testDifferentNameObjectsAfterGC() {
final String key = "Lweak/Value";
final int hashCode1 = VmTypeName.get(key).hashCode();
final int hashCode2 = VmTypeName.get(key).hashCode();
assertTrue(hashCode1 == hashCode2);
System.gc();
final int hashCode3 = VmTypeName.get(key).hashCode();
assertFalse(hashCode1 == hashCode3);
}
@Test
public void testSameNameObjectsAfterGCWithHardReferenceInCode() {
final String key = "Lweak/Value";
final VmTypeName expected = VmTypeName.get(key);
System.gc();
assertEquals(expected, VmTypeName.get(key));
}
@Test
public void testGetArrayDimensions_Long() {
final int actual = NamesTest.LONG.getArrayDimensions();
assertEquals(0, actual);
}
@Test
public void testGetArrayDimensions_String() {
final int actual = NamesTest.STRING.getArrayDimensions();
assertEquals(0, actual);
}
@Test
public void testGetClassName_String() {
final String actual = NamesTest.STRING.getClassName();
assertEquals("String", actual);
}
@Test
public void testGetClassName_MapEntry() {
final String actual = NamesTest.MAP_ENTRY.getClassName();
assertEquals("Map$Entry", actual);
}
@Test
public void testGetClassName_PrimitiveLong() {
final String actual = NamesTest.LONG.getClassName();
assertEquals("J", actual);
}
@Test
public void testGetClassName_DefaultPackage() {
final String className = NamesTest.CLASS_IN_DEFAULT_PACAKGE.getClassName();
assertEquals("Default", className);
}
@Test
public void testGetPackage_Primitive() {
final IPackageName actual = NamesTest.LONG.getPackage();
final IPackageName expected = VmPackageName.get("");
assertEquals(expected, actual);
}
@Test
public void testGetPackage_String() {
final IPackageName actual = NamesTest.STRING.getPackage();
final IPackageName expected = VmPackageName.get("java/lang");
assertEquals(expected, actual);
}
@Test
public void testGetPackage_ClassInDefaultPackage() {
final IPackageName actual = NamesTest.CLASS_IN_DEFAULT_PACAKGE.getPackage();
final IPackageName expected = VmPackageName.get("");
assertEquals(expected, actual);
}
@Test
public void testIsAnonymousType_DefaultPackage() {
final boolean actual = NamesTest.CLASS_IN_DEFAULT_PACAKGE.isAnonymousType();
assertEquals(false, actual);
}
@Test
public void testIsAnonymousType_Primitive() {
final boolean actual = NamesTest.LONG.isAnonymousType();
assertEquals(false, actual);
}
@Test
public void testIsAnonymousType_PrimitiveArray() {
final boolean actual = NamesTest.LONG_ARRAY.isAnonymousType();
assertEquals(false, actual);
}
@Test
public void testIsAnonymousType_Map$Entry() {
final boolean actual = NamesTest.MAP_ENTRY.isAnonymousType();
assertEquals(false, actual);
}
@Test
public void testIsAnonymousType_Anonymous() {
final boolean actual = NamesTest.ANONYMOUS.isAnonymousType();
assertEquals(true, actual);
}
@Test
public void testIsArrayType() {
assertEquals(true, NamesTest.LONG_ARRAY.isArrayType());
assertEquals(false, NamesTest.STRING.isArrayType());
}
@Test
public void testIsDeclaredType() {
assertEquals(true, NamesTest.STRING.isDeclaredType());
assertEquals(false, NamesTest.LONG.isDeclaredType());
assertEquals(false, NamesTest.LONG_ARRAY.isDeclaredType());
}
@Test
public void testIsNestedType() {
assertEquals(true, NamesTest.MAP_ENTRY.isNestedType());
assertEquals(false, NamesTest.STRING.isNestedType());
assertEquals(false, NamesTest.LONG_ARRAY.isNestedType());
}
@Test
public void testIsPrimitiveType() {
assertEquals(false, NamesTest.MAP_ENTRY.isPrimitiveType());
assertEquals(false, NamesTest.STRING.isPrimitiveType());
assertEquals(false, NamesTest.LONG_ARRAY.isPrimitiveType());
assertEquals(true, NamesTest.LONG.isPrimitiveType());
}
@Test
public void testIsVoid() {
assertEquals(false, NamesTest.MAP_ENTRY.isVoid());
assertEquals(false, NamesTest.STRING.isVoid());
assertEquals(false, NamesTest.LONG_ARRAY.isVoid());
assertEquals(false, NamesTest.LONG.isVoid());
assertEquals(true, VmTypeName.VOID.isVoid());
}
@Test
public void testCompareTo() {
assertEquals(0, NamesTest.MAP_ENTRY.compareTo(NamesTest.MAP_ENTRY));
assertTrue(0 < NamesTest.MAP_ENTRY.compareTo(NamesTest.STRING));
}
@Test(expected = IllegalStateException.class)
@Ignore("does not work in OSGI test suite")
public void testNewVmTypeName_InvalidPrimitive() {
new VmTypeName("M");
}
@Test(expected = IllegalArgumentException.class)
@Ignore("does not work in OSGI test suite")
public void testNewVmTypeName_Empty() {
new VmTypeName("");
}
@Test
@Ignore("does not work in OSGI test suite")
public void testNewVmTypeName_Nested() {
final VmTypeName actual = new VmTypeName(NamesTest.MAP_ENTRY.getIdentifier());
// NOTE: object identity is different. Don't use equals on VmTypeNames!
assertEquals(NamesTest.MAP_ENTRY.getIdentifier(), actual.getIdentifier());
}
@Test
public void testParsingPackageInfoClassFile() {
VmTypeName.get("Ltest/package-info");
// it should not throw an exception (anymore)
}
@Test
public void testGetDeclaringType() {
assertEquals(NamesTest.MAP, NamesTest.MAP_ENTRY.getDeclaringType());
}
@Test(expected = IllegalArgumentException.class)
public void testGetDeclaringType_Exception() {
NamesTest.MAP.getDeclaringType();
}
@Test
public void testNameWithSimpleGenerics() {
VmTypeName actual = VmTypeName.get("Ljava/util/List<Ljava/lang/Integer;>");
assertEquals("Ljava/util/List", actual.getIdentifier());
}
@Test
public void testNameWithNestedGenerics() {
VmTypeName actual = VmTypeName.get("Ljava/util/List<Ljava/util/Set<Ljava/lang/Integer;>>");
assertEquals("Ljava/util/List", actual.getIdentifier());
}
@Test
public void testNestedNameWithGenerics() {
VmTypeName actual = VmTypeName.get("Ljava/util/Map$Entry<Ljava/lang/Integer;Ljava/lang/String;>");
assertEquals("Ljava/util/Map$Entry", actual.getIdentifier());
}
@Test(expected = IllegalStateException.class)
public void testGenericTypeArray() {
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=464925
VmTypeName.get("[[TE");
}
}