test/hotspot/jtreg/vmTestbase/vm/runtime/defmeth/PrivateMethodsTest.java
author dholmes
Sat, 23 Jun 2018 01:32:41 -0400
changeset 50735 2f2af62dfac7
parent 50243 4fac3c99487d
permissions -rw-r--r--
8010319: Implementation of JEP 181: Nest-Based Access Control Reviewed-by: alanb, psandoz, mchung, coleenp, acorn, mcimadamore, forax, jlahoda, sspitsyn, abuckley Contributed-by: alex.buckley@oracle.com, maurizio.mimadamore@oracle.com, mandy.chung@oracle.com, tobias.hartmann@oracle.com, david.holmes@oracle.com, vladimir.x.ivanov@oracle.com, karen.kinnear@oracle.com, vladimir.kozlov@oracle.com, john.r.rose@oracle.com, daniel.smith@oracle.com, serguei.spitsyn@oracle.com, kumardotsrinivasan@gmail.com, boris.ulasevich@bell-sw.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
     1
/*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
     2
 * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
     4
 *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
     7
 * published by the Free Software Foundation.
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
     8
 *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    13
 * accompanied this code).
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    14
 *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    18
 *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    21
 * questions.
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    22
 */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    23
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    24
package vm.runtime.defmeth;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    25
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    26
import nsk.share.test.TestBase;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    27
import vm.runtime.defmeth.shared.DefMethTest;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    28
import vm.runtime.defmeth.shared.annotation.Crash;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    29
import vm.runtime.defmeth.shared.annotation.KnownFailure;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    30
import vm.runtime.defmeth.shared.annotation.NotApplicableFor;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    31
import vm.runtime.defmeth.shared.data.*;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    32
import static vm.runtime.defmeth.shared.data.method.body.CallMethod.Invoke.*;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    33
import static vm.runtime.defmeth.shared.data.method.body.CallMethod.IndexbyteOp.*;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    34
import vm.runtime.defmeth.shared.builder.TestBuilder;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    35
import static vm.runtime.defmeth.shared.ExecutionMode.*;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    36
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    37
/**
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    38
 * Scenarios on private methods in interfaces.
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    39
 */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    40
public class PrivateMethodsTest extends DefMethTest {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    41
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    42
    public static void main(String[] args) {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    43
        TestBase.runTest(new PrivateMethodsTest(), args);
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    44
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    45
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    46
    // invokevirtual & invokeinterface from same/subintf
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    47
    // Spec change July 2013 to not allow invokevirtual or invokeinterface
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    48
    // to even see an interface private method
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    49
    // Throw ICCE if method resolution returns interface private method
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    50
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    51
    // Spec change JDK 11 - invokeinterface can be used for private interface
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    52
    // methods and is now the preferred invocation bytecode - so no ICCE.
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    53
    // Private methods are skipped during selection unless the resolved method
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    54
    // is private.
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    55
    // This change is not dependent on the classfile version.
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    56
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    57
    // Note on reflection testing:
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    58
    //   Reflection is only used for the initial callsite, which is not always
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    59
    //   the method of interest. For example where a default method m() calls
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    60
    //   the private interface method privateM(). It is the latter call we are
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    61
    //   really testing, but it is the call of the default method that occurs
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    62
    //   via reflection.
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    63
    //   In private cases reflection triggers a NoSuchMethodException instead of the
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    64
    //   expected IllegalAccessError. This indicates it is getDeclaredMethod() that is
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    65
    //   failing rather than the actual invoke(). Which in turn suggests the wrong class
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    66
    //   is being used, or that getMethod() is being used instead of getDeclaredMethod().
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    67
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    68
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    69
     * testPrivateInvokeVirtual
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    70
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    71
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
    72
     *           private int privateM() { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    73
     *   default public  int m()        { return (I)this.privateM(); } // invokevirtual
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    74
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    75
     * class C implements I {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    76
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    77
     * TEST: I o = new C(); o.m()I throws VerifyError
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    78
     * TEST: C o = new C(); o.m()I throws VerifyError
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    79
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    80
    @NotApplicableFor(modes = { REDEFINITION }) // Can't redefine a class that gets error during loading
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    81
    public void testPrivateInvokeVirtual() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    82
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    83
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    84
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    85
                .defaultMethod("privateM", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    86
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    87
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    88
                // force an invokevirtual of an IMR to test verification code
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    89
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    90
                    .invoke(VIRTUAL, b.intfByName("I"), null, "privateM", "()I", INTERFACEMETHODREF).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    91
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    92
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    93
        ConcreteClass C = b.clazz("C").implement(I).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    94
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    95
        b.test().callSite(I, C, "m", "()I").throws_(VerifyError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    96
         .test().callSite(C, C, "m", "()I").throws_(VerifyError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    97
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    98
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
    99
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   100
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   101
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   102
     * testPrivateInvokeIntf
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   103
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   104
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   105
     *           private int privateM() { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   106
     *   default public  int m()        { return (I)this.privateM(); } // invokeinterface
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   107
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   108
     * class C implements I {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   109
     *
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   110
     * TEST: I o = new C(); o.m()I returns 1
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   111
     * TEST: C o = new C(); o.m()I returns 1
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   112
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   113
    public void testPrivateInvokeIntf() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   114
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   115
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   116
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   117
                .defaultMethod("privateM", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   118
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   119
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   120
                    .invoke(INTERFACE, b.intfByName("I"), null, "privateM", "()I", CALLSITE).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   121
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   122
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   123
        ConcreteClass C = b.clazz("C").implement(I).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   124
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   125
        b.test().callSite(I, C, "m", "()I").returns(1).done()
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   126
         .test().callSite(C, C, "m", "()I").returns(1).done()
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   127
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   128
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   129
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   130
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   131
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   132
     * testPrivateInvokeStatic
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   133
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   134
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   135
     *           private int privateM() { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   136
     *   default public  int m()        { return I.privateM(); } // invokestatic
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   137
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   138
     * class C implements I {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   139
     *
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   140
     * TEST: I o = new C(); o.m()I throws IncompatibleClassChangeError
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   141
     * TEST: C o = new C(); o.m()I throws IncompatibleClassChangeError
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   142
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   143
    public void testPrivateInvokeStatic() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   144
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   145
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   146
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   147
                .defaultMethod("privateM", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   148
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   149
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   150
                    .invoke(STATIC, b.intfByName("I"), null, "privateM", "()I", CALLSITE).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   151
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   152
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   153
        ConcreteClass C = b.clazz("C").implement(I).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   154
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   155
        b.test().callSite(I, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   156
         .test().callSite(C, C, "m", "()I").throws_(IncompatibleClassChangeError.class).done()
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   157
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   158
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   159
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   160
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   161
    // call from another default method in the same interface
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   162
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   163
     * testPrivateCallSameClass
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   164
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   165
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   166
     *           private privateM()I { return 1; }
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   167
     *   default public int m() { return I.super.privateM(); } // invokespecial
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   168
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   169
     * class C implements I {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   170
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   171
     * TEST: { I o = new C(); o.m()I  == 1; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   172
     * TEST: { C o = new C(); o.m()I  == 1; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   173
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   174
    public void testPrivateCallSameClass() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   175
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   176
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   177
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   178
                .defaultMethod("privateM", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   179
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   180
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   181
                    .invokeSpecial(b.intfByName("I"), "privateM", "()I").build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   182
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   183
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   184
        ConcreteClass C = b.clazz("C").implement(I).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   185
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   186
        b.test().callSite(I, C, "m", "()I").returns(1).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   187
         .test().callSite(C, C, "m", "()I").returns(1).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   188
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   189
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   190
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   191
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   192
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   193
     * testPrivateCallSubIntf
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   194
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   195
     * Attempt to call from subinterface fails
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   196
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   197
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   198
     *   private privateM()I { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   199
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   200
     * J, K, L use invokespecial
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   201
     * interface J extends I {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   202
     *   default public int m() { return I.super.privateM(); }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   203
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   204
     * interface K extends I {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   205
     *   default public int m() { return K.super.privateM(); }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   206
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   207
     * interface L extends J {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   208
     *   default public int m() { return I.super.privateM(); }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   209
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   210
     * class C implements J {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   211
     * class D implements K {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   212
     * class E implements L {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   213
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   214
     * TEST: { J o = new C(); o.m()I throws IAE; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   215
     * TEST: { C o = new C(); o.m()I throws IAE; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   216
     * TEST: { K o = new D(); o.m()I throws NSME; } // does not see
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   217
     * TEST: { D o = new D(); o.m()I throws NSME; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   218
     * TEST: { L o = new E(); o.m()I throws VerifyError; } // VerifyError intfmethodref
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   219
     * TEST: { E o = new E(); o.m()I throws VerifyError; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   220
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   221
    @NotApplicableFor(modes = { REDEFINITION }) // Can't redefine a class that gets error during loading
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   222
    public void testPrivateCallSubIntf() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   223
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   224
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   225
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   226
                .defaultMethod("privateM", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   227
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   228
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   229
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   230
        Interface J = b.intf("J").extend(I)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   231
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   232
                    .invokeSpecial(I, "privateM", "()I").build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   233
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   234
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   235
        Interface K = b.intf("K").extend(J)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   236
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   237
                    .invokeSpecial(b.intfByName("K"), "privateM", "()I").build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   238
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   239
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   240
        // L.privateM -> J -> L (I.privateM call)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   241
        Interface L = b.intf("L").extend(J)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   242
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   243
                    .invokeSpecial(I, "privateM", "()I").build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   244
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   245
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   246
        ConcreteClass C = b.clazz("C").implement(J).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   247
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   248
        ConcreteClass D = b.clazz("D").implement(K).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   249
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   250
        ConcreteClass E = b.clazz("E").implement(L).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   251
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   252
        b.test().callSite(J, C, "m", "()I").throws_(IllegalAccessError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   253
         .test().callSite(C, C, "m", "()I").throws_(IllegalAccessError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   254
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   255
         .test().callSite(K, D, "m", "()I").throws_(NoSuchMethodError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   256
         .test().callSite(D, D, "m", "()I").throws_(NoSuchMethodError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   257
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   258
         .test().callSite(L, E, "m", "()I").throws_(VerifyError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   259
         .test().callSite(E, E, "m", "()I").throws_(VerifyError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   260
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   261
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   262
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   263
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   264
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   265
     * Attempt to call from subclass fails
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   266
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   267
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   268
     *   private privateM()I { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   269
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   270
     * class C implements I {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   271
     *   public int m() { return I.super.privateM(); }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   272
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   273
     * class D extends C {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   274
     *   public int m() { return I.super.privateM(); }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   275
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   276
     * class E extends C {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   277
     *   public int m() { return C.super.privateM(); }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   278
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   279
     *
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   280
     * TEST: { C o = new C(); o.m()I throws IllegalAccessError (or VerifyError) }
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   281
     * TEST: { D o = new D(); o.m()I throws VerifyError }
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   282
     * TEST: { E o = new E(); o.m()I throws NoSuchMethodError (or VerifyError); }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   283
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   284
    @NotApplicableFor(modes = { REDEFINITION }) // Can't redefine a class that gets error during loading
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   285
    public void testPrivateCallImplClass() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   286
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   287
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   288
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   289
                .defaultMethod("privateM", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   290
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   291
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   292
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   293
        ConcreteClass C = b.clazz("C").implement(I)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   294
                .concreteMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   295
                    .invokeSpecial(I, "privateM", "()I").build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   296
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   297
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   298
        ConcreteClass D = b.clazz("D").extend(C)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   299
                .concreteMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   300
                    .invokeSpecial(I, "privateM", "()I").build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   301
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   302
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   303
        ConcreteClass E = b.clazz("E").extend(C)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   304
                .concreteMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   305
                    .invokeSpecial(C, "privateM", "()I").build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   306
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   307
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   308
        Class eeExpectedClass;
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   309
        Class ccExpectedClass;
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   310
        if (factory.getVer() >= 52) {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   311
            eeExpectedClass = NoSuchMethodError.class;
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   312
            ccExpectedClass = IllegalAccessError.class;
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   313
        } else {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   314
            // The test gets a VerifyError in this case due to an
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   315
            // invokespecial IMR bytecode.  This was not allowed
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   316
            // until class file version 52.  (See 8030249.)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   317
            eeExpectedClass = VerifyError.class;
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   318
            ccExpectedClass = VerifyError.class;
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   319
        }
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   320
        b.test().callSite(C, C, "m", "()I").throws_(ccExpectedClass).done()
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   321
         .test().callSite(D, D, "m", "()I").throws_(VerifyError.class).done()
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   322
         .test().callSite(E, E, "m", "()I").throws_(eeExpectedClass).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   323
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   324
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   325
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   326
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   327
    // doesn't participate in default method analysis
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   328
    //   method overriding
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   329
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   330
    /*
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   331
     * testPrivate
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   332
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   333
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   334
     *   private int m() { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   335
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   336
     * class C implements I {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   337
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   338
     * TEST: { I o = new C(); o.m()I throws IllegalAccessError; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   339
     *                 -mode reflect throws NoSuchMethodException
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   340
     * TEST: { C o = new C(); o.m()I throws NoSuchMethodError; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   341
     */
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   342
    public void testPrivate() {
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   343
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   344
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   345
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   346
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   347
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   348
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   349
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   350
        ConcreteClass C = b.clazz("C").implement(I).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   351
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   352
        Class expectedClass;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   353
        if (factory.getExecutionMode().equals("REFLECTION")) {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   354
            expectedClass = NoSuchMethodException.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   355
        } else {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   356
            expectedClass = IllegalAccessError.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   357
        }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   358
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   359
        b.test().callSite(I, C, "m", "()I").throws_(expectedClass).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   360
         .test().callSite(C, C, "m", "()I").throws_(NoSuchMethodError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   361
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   362
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   363
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   364
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   365
    /*
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   366
     * testPrivateVsConcrete
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   367
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   368
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   369
     *   private int m() { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   370
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   371
     * class C implements I {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   372
     *   public int m() { return 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   373
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   374
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   375
     * TEST: { I o = new C(); o.m()I  == IllegalAccessError; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   376
     *                 -mode reflect throws NoSuchMethodException
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   377
     * TEST: { C o = new C(); o.m()I  == 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   378
     */
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   379
    public void testPrivateVsConcrete() {
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   380
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   381
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   382
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   383
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   384
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   385
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   386
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   387
        ConcreteClass C = b.clazz("C").implement(I)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   388
                .concreteMethod("m", "()I").returns(2).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   389
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   390
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   391
        Class expectedClass;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   392
        if (factory.getExecutionMode().equals("REFLECTION")) {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   393
            expectedClass = NoSuchMethodException.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   394
        } else {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   395
            expectedClass = IllegalAccessError.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   396
        }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   397
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   398
        b.test().callSite(I, C, "m", "()I").throws_(expectedClass).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   399
         .test().callSite(C, C, "m", "()I").returns(2).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   400
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   401
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   402
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   403
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   404
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   405
     * testPublicOverridePrivate
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   406
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   407
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   408
     *   private int m() { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   409
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   410
     * interface J extends I {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   411
     *   default public int m() { return 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   412
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   413
     * class C implements J {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   414
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   415
     * TEST: { I o = new C(); o.m()I throws IllegalAccessError; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   416
     *                 -mode reflect throws NoSuchMethodException
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   417
     * TEST: { J o = new C(); o.m()I  == 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   418
     * TEST: { C o = new C(); o.m()I  == 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   419
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   420
    public void testPublicOverridePrivate() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   421
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   422
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   423
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   424
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   425
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   426
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   427
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   428
        Interface J = b.intf("J").extend(I)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   429
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   430
                    .returns(2).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   431
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   432
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   433
        ConcreteClass C = b.clazz("C").implement(J).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   434
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   435
        Class expectedClass;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   436
        if (factory.getExecutionMode().equals("REFLECTION")) {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   437
            expectedClass = NoSuchMethodException.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   438
        } else {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   439
            expectedClass = IllegalAccessError.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   440
        }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   441
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   442
        b.test().callSite(I, C, "m", "()I").throws_(expectedClass).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   443
         .test().callSite(J, C, "m", "()I").returns(2).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   444
         .test().callSite(C, C, "m", "()I").returns(2).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   445
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   446
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   447
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   448
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   449
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   450
     * testPrivateOverrideDefault
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   451
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   452
     * interface I {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   453
     *   default public int m() { return 1; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   454
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   455
     * interface J extends I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   456
     *   private int m() { return 2; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   457
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   458
     * class C implements J {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   459
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   460
     * TEST: { I o = new C(); o.m()I  == 1; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   461
     * TEST: { J o = new C(); o.m()I  == IllegalAccessError; } II J.m priv
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   462
     * TEST: { C o = new C(); o.m()I  == 1; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   463
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   464
    public void testPrivateOverrideDefault() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   465
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   466
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   467
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   468
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   469
                    .returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   470
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   471
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   472
        Interface J = b.intf("J").extend(I)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   473
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   474
                    .private_().returns(2).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   475
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   476
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   477
        ConcreteClass C = b.clazz("C").implement(J).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   478
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   479
        b.test().callSite(I, C, "m", "()I").returns(1).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   480
         .test().privateCallSite(J, C, "m", "()I").throws_(IllegalAccessError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   481
         .test().callSite(C, C, "m", "()I").returns(1).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   482
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   483
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   484
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   485
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   486
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   487
     * testPrivateReabstract
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   488
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   489
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   490
     *   private int m() { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   491
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   492
     * interface J extends I {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   493
     *   abstract public int m();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   494
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   495
     * class C implements J {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   496
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   497
     * TEST: { I o = new C(); o.m()I throws IllegalAccessError; } II I.m
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   498
     *                 -mode reflect throws NoSuchMethodException
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   499
     * TEST: { J o = new C(); o.m()I throws java/lang/AbstractMethodError; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   500
     * TEST: { C o = new C(); o.m()I throws java/lang/AbstractMethodError; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   501
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   502
    public void testPrivateReabstract() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   503
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   504
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   505
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   506
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   507
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   508
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   509
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   510
        Interface J = b.intf("J").extend(I)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   511
                .abstractMethod("m", "()I").build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   512
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   513
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   514
        ConcreteClass C = b.clazz("C").implement(J).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   515
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   516
        Class expectedClass;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   517
        if (factory.getExecutionMode().equals("REFLECTION")) {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   518
            expectedClass = NoSuchMethodException.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   519
        } else {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   520
            expectedClass = IllegalAccessError.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   521
        }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   522
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   523
        b.test().callSite(I, C, "m", "()I").throws_(expectedClass).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   524
         .test().callSite(J, C, "m", "()I").throws_(AbstractMethodError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   525
         .test().callSite(C, C, "m", "()I").throws_(AbstractMethodError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   526
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   527
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   528
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   529
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   530
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   531
     * testPrivateOverrideAbstract
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   532
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   533
     * interface I {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   534
     *   abstract public int m();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   535
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   536
     * interface J extends I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   537
     *   private int m() { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   538
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   539
     * class C implements J {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   540
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   541
     * TEST: { I o = new C(); o.m()I throws AbstractMethodError }
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   542
     * TEST: { J o = new C(); o.m()I throws IllegalAccessError }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   543
     * TEST: { C o = new C(); o.m()I throws AbstractMethodError }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   544
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   545
    public void testPrivateOverrideAbstract() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   546
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   547
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   548
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   549
                .abstractMethod("m", "()I").build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   550
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   551
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   552
        Interface J = b.intf("J").extend(I)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   553
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   554
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   555
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   556
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   557
        ConcreteClass C = b.clazz("C").implement(J).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   558
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   559
        b.test().callSite(I, C, "m", "()I").throws_(AbstractMethodError.class).done()
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   560
         .test().privateCallSite(J, C, "m", "()I").throws_(IllegalAccessError.class).done()
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   561
         .test().callSite(C, C, "m", "()I").throws_(AbstractMethodError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   562
         .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   563
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   564
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   565
    /*
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   566
     * testPrivateInherited
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   567
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   568
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   569
     *   private int m() { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   570
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   571
     * class B implements I {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   572
     * class C extends B {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   573
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   574
     * TEST: { I o = new C(); o.m()I throws IllegalAccessError } II I.m
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   575
     *                 -mode reflect throws NoSuchMethodException
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   576
     * TEST: { B o = new C(); o.m()I throws NoSuchMethodError }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   577
     * TEST: { C o = new C(); o.m()I throws NoSuchMethodError }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   578
     */
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   579
    public void testPrivateInherited() {
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   580
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   581
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   582
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   583
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   584
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   585
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   586
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   587
        ConcreteClass B = b.clazz("B").implement(I).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   588
        ConcreteClass C = b.clazz("C").extend(B).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   589
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   590
        Class expectedClass;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   591
        if (factory.getExecutionMode().equals("REFLECTION")) {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   592
            expectedClass = NoSuchMethodException.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   593
        } else {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   594
            expectedClass = IllegalAccessError.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   595
        }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   596
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   597
        b.test().callSite(I, C, "m","()I").throws_(expectedClass).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   598
         .test().callSite(B, C, "m","()I").throws_(NoSuchMethodError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   599
         .test().callSite(C, C, "m","()I").throws_(NoSuchMethodError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   600
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   601
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   602
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   603
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   604
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   605
    /*
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   606
     * testPrivateVsConcreteInherited
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   607
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   608
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   609
     *    private int m() { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   610
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   611
     * class B {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   612
     *   public int m() { return 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   613
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   614
     * class C extends B implements I {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   615
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   616
     * TEST: { I o = new C(); o.m()I  == throws IllegalAccessError; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   617
     *                     -mode reflect throws NoSuchMethodException
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   618
     * TEST: { B o = new C(); o.m()I  == 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   619
     * TEST: { C o = new C(); o.m()I  == 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   620
     */
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   621
    public void testPrivateVsConcreteInherited() {
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   622
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   623
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   624
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   625
                .defaultMethod("m", "()I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   626
                    .private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   627
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   628
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   629
        ConcreteClass B = b.clazz("B")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   630
                .concreteMethod("m", "()I").returns(2).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   631
                .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   632
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   633
        ConcreteClass C = b.clazz("C").extend(B).implement(I).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   634
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   635
        Class expectedClass;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   636
        if (factory.getExecutionMode().equals("REFLECTION")) {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   637
            expectedClass = NoSuchMethodException.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   638
        } else {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   639
            expectedClass = IllegalAccessError.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   640
        }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   641
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   642
        b.test().callSite(I, C, "m","()I").throws_(expectedClass).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   643
         .test().callSite(B, C, "m","()I").returns(2).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   644
         .test().callSite(C, C, "m","()I").returns(2).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   645
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   646
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   647
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   648
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   649
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   650
     * testPrivateConflict
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   651
     *
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   652
     * Conflicting methods
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   653
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   654
     * interface I {
50735
2f2af62dfac7 8010319: Implementation of JEP 181: Nest-Based Access Control
dholmes
parents: 50243
diff changeset
   655
     *   private int m() { return 1; }
50243
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   656
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   657
     * interface J {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   658
     *   default public int m() { return 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   659
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   660
     * class C implements I, J {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   661
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   662
     * TEST: { I o = new C(); o.m()I throws IllegalAccessError; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   663
     *                 -mode reflect throws NoSuchMethodException
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   664
     * TEST: { J o = new C(); o.m()I  == 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   665
     * TEST: { C o = new C(); o.m()I  == 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   666
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   667
    public void testPrivateConflict() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   668
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   669
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   670
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   671
                .defaultMethod("m", "()I").private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   672
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   673
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   674
        Interface J = b.intf("J")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   675
                .defaultMethod("m", "()I").returns(2).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   676
            .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   677
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   678
        ConcreteClass C = b.clazz("C").implement(I,J).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   679
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   680
        Class expectedClass;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   681
        if (factory.getExecutionMode().equals("REFLECTION")) {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   682
            expectedClass = NoSuchMethodException.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   683
        } else {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   684
            expectedClass = IllegalAccessError.class;
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   685
        }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   686
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   687
        b.test().callSite(I, C, "m", "()I").throws_(expectedClass).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   688
         .test().callSite(J, C, "m", "()I").returns(2).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   689
         .test().callSite(C, C, "m", "()I").returns(2).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   690
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   691
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   692
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   693
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   694
     * testPrivateSuperClassMethodNoDefaultMethod
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   695
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   696
     * interface I {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   697
     *  public int m();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   698
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   699
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   700
     * public class A {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   701
     *  private int m() { return 1; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   702
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   703
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   704
     * public class B extends A implements I {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   705
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   706
     * public class C extends B {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   707
     *  public int m() { return 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   708
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   709
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   710
     * TEST: { B b = new C(); b.m()I throws IllegalAccessError; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   711
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   712
    public void testPrivateSuperClassMethodNoDefaultMethod() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   713
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   714
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   715
        ConcreteClass A = b.clazz("A")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   716
                .concreteMethod("m", "()I").private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   717
                .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   718
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   719
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   720
                .abstractMethod("m", "()I").public_().build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   721
                .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   722
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   723
        ConcreteClass B = b.clazz("B").extend(A).implement(I).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   724
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   725
        ConcreteClass C = b.clazz("C").extend(B)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   726
                .concreteMethod("m", "()I").public_().returns(2).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   727
                .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   728
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   729
        b.test().privateCallSite(B, C, "m", "()I").throws_(IllegalAccessError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   730
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   731
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   732
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   733
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   734
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   735
     * testPrivateSuperClassMethodDefaultMethod
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   736
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   737
     * interface I {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   738
     *  public default int m() { return 3; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   739
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   740
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   741
     * public class A {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   742
     *  private int m() { return 1; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   743
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   744
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   745
     * public class B extends A implements I {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   746
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   747
     * public class C extends B {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   748
     *  public int m() { return 2; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   749
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   750
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   751
     * TEST: { B b = new C(); b.m()I throws IllegalAccessError; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   752
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   753
    public void testPrivateSuperClassMethodDefaultMethod() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   754
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   755
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   756
        ConcreteClass A = b.clazz("A")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   757
                .concreteMethod("m", "()I").private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   758
                .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   759
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   760
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   761
                .defaultMethod("m", "()I").public_().returns(3).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   762
                .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   763
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   764
        ConcreteClass B = b.clazz("B").extend(A).implement(I).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   765
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   766
        ConcreteClass C = b.clazz("C").extend(B)
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   767
                .concreteMethod("m", "()I").public_().returns(2).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   768
                .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   769
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   770
        b.test().privateCallSite(B, C, "m", "()I").throws_(IllegalAccessError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   771
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   772
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   773
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   774
    /*
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   775
     * testPrivateSuperClassMethodDefaultMethodNoOverride
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   776
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   777
     * interface I {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   778
     *  public default int m() { return 3; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   779
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   780
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   781
     * public class A {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   782
     *  private int m() { return 1; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   783
     * }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   784
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   785
     * public class B extends A implements I {}
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   786
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   787
     * public class C extends B { }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   788
     *
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   789
     * TEST: { B b = new C(); b.m()I throws IllegalAccessError; }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   790
     */
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   791
    public void testPrivateSuperClassMethodDefaultMethodNoOverride() {
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   792
        TestBuilder b = factory.getBuilder();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   793
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   794
        ConcreteClass A = b.clazz("A")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   795
                .concreteMethod("m", "()I").private_().returns(1).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   796
                .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   797
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   798
        Interface I = b.intf("I")
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   799
                .defaultMethod("m", "()I").public_().returns(3).build()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   800
                .build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   801
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   802
        ConcreteClass B = b.clazz("B").extend(A).implement(I).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   803
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   804
        ConcreteClass C = b.clazz("C").extend(B).build();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   805
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   806
        b.test().privateCallSite(B, C, "m", "()I").throws_(IllegalAccessError.class).done()
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   807
        .run();
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   808
    }
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   809
4fac3c99487d 8199255: [TESTBUG] Open source VM testbase default methods tests
mseledtsov
parents:
diff changeset
   810
}