--- old/test/hotspot/jtreg/runtime/LoaderConstraints/itableLdrConstraint/Test.java 2018-04-12 12:05:20.513478000 +0200 +++ new/test/hotspot/jtreg/runtime/LoaderConstraints/itableLdrConstraint/Test.java 2018-04-12 12:05:20.036438000 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,32 +44,6 @@ "parent: \"platform\" jdk.internal.loader.ClassLoaders$PlatformClassLoader) " + "of the selected method's type, test.J have different Class objects for the type test.Foo used in the signature"; - // Test that the error message is correct when a loader constraint error is - // detected during itable creation. - // - // In this test, during itable creation for class C, method "m()LFoo;" for - // C's super interface I has a different class Foo than the selected method's - // type super interface J. The selected method is not an overpass method nor - // otherwise excluded from loader constraint checking. So, a LinkageError - // exception should be thrown because the loader constraint check will fail. - public static void test1() throws Exception { - Class c = test.Foo.class; // forces standard class loader to load Foo - ClassLoader l = new PreemptingClassLoader("test.Task", "test.Foo", "test.C", "test.I"); - Runnable r = (Runnable) l.loadClass("test.Task").newInstance(); - try { - r.run(); - throw new RuntimeException("Expected LinkageError exception not thrown"); - } catch (LinkageError e) { - String errorMsg = e.getMessage(); - if (!errorMsg.equals(expectedErrorMessage1)) { - System.out.println("Expected: " + expectedErrorMessage1 + "\n" + - "but got: " + errorMsg); - throw new RuntimeException("Wrong LinkageError exception thrown: " + errorMsg); - } - System.out.println("Passed with message: " + errorMsg); - } - } - static String expectedErrorMessage2 = "loader constraint violation in interface itable initialization for class test.C: " + "when selecting method test.I.m()Ltest/Foo; the class loader \"ItableLdrCnstrnt_Test_Loader\" " + @@ -79,19 +53,26 @@ "parent: \"platform\" jdk.internal.loader.ClassLoaders$PlatformClassLoader) " + "of the selected method's type, test.J have different Class objects for the type test.Foo used in the signature"; - // Same as test1, but ClassLoader has a name. - public static void test2() throws Exception { + // Test that the error message is correct when a loader constraint error is + // detected during itable creation. + // + // In this test, during itable creation for class C, method "m()LFoo;" for + // C's super interface I has a different class Foo than the selected method's + // type super interface J. The selected method is not an overpass method nor + // otherwise excluded from loader constraint checking. So, a LinkageError + // exception should be thrown because the loader constraint check will fail. + public static void test(String loaderName, String expectedErrorMessage) throws Exception { Class c = test.Foo.class; // Forces standard class loader to load Foo. - String[] classNames = {"test.Task", "test.Foo", "test.C", "test.I"}; - ClassLoader l = new PreemptingClassLoader("ItableLdrCnstrnt_Test_Loader", classNames); + String[] classNames = {"test.Task", "test.Foo", "test.C", "test.I"}; + ClassLoader l = new PreemptingClassLoader(loaderName, classNames); Runnable r = (Runnable) l.loadClass("test.Task").newInstance(); try { r.run(); throw new RuntimeException("Expected LinkageError exception not thrown"); } catch (LinkageError e) { String errorMsg = e.getMessage(); - if (!errorMsg.equals(expectedErrorMessage2)) { - System.out.println("Expected: " + expectedErrorMessage2 + "\n" + + if (!errorMsg.equals(expectedErrorMessage)) { + System.out.println("Expected: " + expectedErrorMessage + "\n" + "but got: " + errorMsg); throw new RuntimeException("Wrong LinkageError exception thrown: " + errorMsg); } @@ -100,8 +81,7 @@ } public static void main(String... args) throws Exception { - test1(); - test2(); + test(null, expectedErrorMessage1); + test("ItableLdrCnstrnt_Test_Loader", expectedErrorMessage2); } - }