11/*
2- * Copyright (c) 2016, 2019 , Oracle and/or its affiliates. All rights reserved.
2+ * Copyright (c) 2016, 2020 , Oracle and/or its affiliates. All rights reserved.
33 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44 *
55 * This code is free software; you can redistribute it and/or modify it
3434import tests .JImageValidator ;
3535import tests .Result ;
3636
37+ import org .testng .annotations .BeforeTest ;
38+ import org .testng .annotations .Test ;
39+
3740 /*
3841 * @test
42+ * @bug 8252919
3943 * @library ../../lib
4044 * @summary Test --generate-jli-classes plugin
4145 * @modules java.base/jdk.internal.jimage
4549 * jdk.jlink/jdk.tools.jmod
4650 * jdk.jlink/jdk.tools.jimage
4751 * @build tests.*
48- * @run main /othervm GenerateJLIClassesPluginTest
52+ * @run testng /othervm GenerateJLIClassesPluginTest
4953 */
5054public class GenerateJLIClassesPluginTest {
5155
5256 private static Helper helper ;
5357
54- public static void main (String [] args ) throws Exception {
58+ @ BeforeTest
59+ public static void setup () throws Exception {
5560 helper = Helper .newHelper ();
5661 if (helper == null ) {
5762 System .err .println ("Test not run" );
5863 return ;
5964 }
60-
6165 helper .generateDefaultModules ();
66+ }
6267
68+ @ Test
69+ public static void testSpecies () throws IOException {
6370 // Check that --generate-jli-classes=@file works as intended
6471 Path baseFile = Files .createTempFile ("base" , "trace" );
6572 String species = "LLLLLLLLLLLLLLLLLLL" ;
@@ -73,27 +80,27 @@ public static void main(String[] args) throws Exception {
7380 .call ();
7481
7582 Path image = result .assertSuccess ();
76-
83+ validateHolderClasses ( image );
7784 JImageValidator .validate (image .resolve ("lib" ).resolve ("modules" ),
7885 classFilesForSpecies (List .of (species )), // species should be in the image
7986 classFilesForSpecies (List .of (species .substring (1 )))); // but not it's immediate parent
87+ }
8088
89+ @ Test
90+ public static void testInvalidSignatures () throws IOException {
8191 // Check that --generate-jli-classes=@file fails as intended on shapes that can't be generated
82- ensureInvalidSignaturesFail (
92+ String [] args = new String [] {
8393 "[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual L_L (success)\n " ,
8494 "[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeInterface L_L (success)\n " ,
8595 "[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic I_L (success)\n "
86- );
87- }
88-
89- private static void ensureInvalidSignaturesFail (String ... args ) throws IOException {
96+ };
9097 for (String fileString : args ) {
9198 Path failFile = Files .createTempFile ("fail" , "trace" );
9299 fileString = "[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual L_L (success)\n " ;
93100 Files .write (failFile , fileString .getBytes (Charset .defaultCharset ()));
94101 Result result = JImageGenerator .getJLinkTask ()
95102 .modulePath (helper .defaultModulePath ())
96- .output (helper .createNewImageDir ("generate-jli-file " ))
103+ .output (helper .createNewImageDir ("invalid-signature " ))
97104 .option ("--generate-jli-classes=@" + failFile .toString ())
98105 .addMods ("java.base" )
99106 .call ();
@@ -102,6 +109,28 @@ private static void ensureInvalidSignaturesFail(String ... args) throws IOExcept
102109 }
103110 }
104111
112+ @ Test
113+ public static void nonExistentTraceFile () throws IOException {
114+ Result result = JImageGenerator .getJLinkTask ()
115+ .modulePath (helper .defaultModulePath ())
116+ .output (helper .createNewImageDir ("non-existent-tracefile" ))
117+ .option ("--generate-jli-classes=@NON_EXISTENT_FILE" )
118+ .addMods ("java.base" )
119+ .call ();
120+
121+ Path image = result .assertSuccess ();
122+ validateHolderClasses (image );
123+ }
124+
125+ private static void validateHolderClasses (Path image ) throws IOException {
126+ JImageValidator .validate (image .resolve ("lib" ).resolve ("modules" ),
127+ List .of ("/java.base/java/lang/invoke/DirectMethodHandle$Holder.class" ,
128+ "/java.base/java/lang/invoke/DelegatingMethodHandle$Holder.class" ,
129+ "/java.base/java/lang/invoke/LambdaForm$Holder.class" ,
130+ "/java.base/java/lang/invoke/Invokers$Holder.class" ),
131+ List .of ());
132+ }
133+
105134 private static List <String > classFilesForSpecies (Collection <String > species ) {
106135 return species .stream ()
107136 .map (s -> "/java.base/java/lang/invoke/BoundMethodHandle$Species_" + s + ".class" )
0 commit comments