/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package libcore.reflect;

import junit.framework.TestCase;

public final class InternalNamesTest extends TestCase {
    private final ClassLoader loader = InternalNames.class.getClassLoader();

    public void testGetClassNull() {
        try {
            InternalNames.getClass(loader, null);
            fail();
        } catch (NullPointerException expected) {
        }
    }

    public void testGetInternalNameNull() {
        try {
            InternalNames.getInternalName(null);
            fail();
        } catch (NullPointerException expected) {
        }
    }

    public void testInternalNameToPrimitive() {
        assertEquals(byte.class, InternalNames.getClass(loader, "B"));
        assertEquals(char.class, InternalNames.getClass(loader, "C"));
        assertEquals(double.class, InternalNames.getClass(loader, "D"));
        assertEquals(float.class, InternalNames.getClass(loader, "F"));
        assertEquals(int.class, InternalNames.getClass(loader, "I"));
        assertEquals(long.class, InternalNames.getClass(loader, "J"));
        assertEquals(short.class, InternalNames.getClass(loader, "S"));
        assertEquals(boolean.class, InternalNames.getClass(loader, "Z"));
        assertEquals(void.class, InternalNames.getClass(loader, "V"));
    }

    public void testPrimitiveToInternalName() {
        assertEquals("B", InternalNames.getInternalName(byte.class));
        assertEquals("C", InternalNames.getInternalName(char.class));
        assertEquals("D", InternalNames.getInternalName(double.class));
        assertEquals("F", InternalNames.getInternalName(float.class));
        assertEquals("I", InternalNames.getInternalName(int.class));
        assertEquals("J", InternalNames.getInternalName(long.class));
        assertEquals("S", InternalNames.getInternalName(short.class));
        assertEquals("Z", InternalNames.getInternalName(boolean.class));
        assertEquals("V", InternalNames.getInternalName(void.class));
    }

    public void testInternalNameToClass() {
        assertEquals(String.class, InternalNames.getClass(loader, "Ljava/lang/String;"));
    }

    public void testClassToInternalName() {
        assertEquals("Ljava/lang/String;", InternalNames.getInternalName(String.class));
    }

    public void testInternalNameToPrimitiveArray() {
        assertEquals(int[].class, InternalNames.getClass(loader, "[I"));
        assertEquals(int[][][][].class, InternalNames.getClass(loader, "[[[[I"));
    }

    public void testInternalNameToObjectArray() {
        assertEquals(String[].class, InternalNames.getClass(loader, "[Ljava/lang/String;"));
        assertEquals(String[][][][].class,
                InternalNames.getClass(loader, "[[[[Ljava/lang/String;"));
    }
}
