1798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath/*
2798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath * Copyright (C) 2016 The Android Open Source Project
3798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath *
4798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath * Licensed under the Apache License, Version 2.0 (the "License");
5798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath * you may not use this file except in compliance with the License.
6798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath * You may obtain a copy of the License at
7798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath *
8798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath *      http://www.apache.org/licenses/LICENSE-2.0
9798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath *
10798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath * Unless required by applicable law or agreed to in writing, software
11798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS,
12798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath * See the License for the specific language governing permissions and
14798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath * limitations under the License
15798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath */
16798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath
17798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamathpackage libcore.java.lang.invoke;
18798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath
19798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamathimport junit.framework.TestCase;
20798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath
21798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamathimport java.lang.invoke.MethodHandleInfo;
22798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamathimport java.lang.invoke.MethodType;
23798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath
24798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamathimport static java.lang.invoke.MethodHandleInfo.*;
25798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath
26798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamathpublic class MethodHandleInfoTest extends TestCase {
27798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath    public void test_toString() {
28798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        final MethodType type = MethodType.methodType(String.class, String.class);
29798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        String string = MethodHandleInfo.toString(REF_invokeVirtual, String.class, "concat",  type);
30798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        assertEquals("invokeVirtual java.lang.String.concat:(String)String", string);
31798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath
32798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        try {
33798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath            MethodHandleInfo.toString(-1, String.class, "concat", type);
34798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath            fail();
35798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        } catch (IllegalArgumentException expected) {
36798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        }
37798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath
38798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        try {
39798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath            MethodHandleInfo.toString(REF_invokeVirtual, String.class, null, type);
40798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath            fail();
41798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        } catch (NullPointerException expected) {
42798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        }
43798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath
44798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        try {
45798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath            MethodHandleInfo.toString(REF_invokeVirtual, null, "concat", type);
46798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath            fail();
47798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        } catch (NullPointerException expected) {
48798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        }
49798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath
50798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        try {
51798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath            MethodHandleInfo.toString(REF_invokeVirtual, String.class, "concat", null);
52798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath            fail();
53798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        } catch (NullPointerException expected) {
54798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        }
55798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath    }
56798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath
57798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath    public void test_referenceKindToString() {
58798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        assertEquals("getField", referenceKindToString(REF_getField));
59798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        assertEquals("getStatic", referenceKindToString(REF_getStatic));
60798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        assertEquals("putField", referenceKindToString(REF_putField));
61798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        assertEquals("putStatic", referenceKindToString(REF_putStatic));
62798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        assertEquals("invokeVirtual", referenceKindToString(REF_invokeVirtual));
63798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        assertEquals("invokeStatic", referenceKindToString(REF_invokeStatic));
64798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        assertEquals("invokeSpecial", referenceKindToString(REF_invokeSpecial));
65798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        assertEquals("newInvokeSpecial", referenceKindToString(REF_newInvokeSpecial));
66798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        assertEquals("invokeInterface", referenceKindToString(REF_invokeInterface));
67798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath
68798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        try {
69798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath            referenceKindToString(-1);
70798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath            fail();
71798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        } catch (IllegalArgumentException expected) {
72798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        }
73798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath
74798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        try {
75798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath            referenceKindToString(256);
76798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath            fail();
77798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        } catch (IllegalArgumentException expected) {
78798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath        }
79798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath    }
80798bce8a6e61a5e02934589159850649d79e9cafNarayan Kamath}
81