test/jdk/tools/jlink/plugins/GenerateJLIClassesPluginTest.java
changeset 57939 e8ba7e4f4190
parent 47753 a2008587c13f
--- a/test/jdk/tools/jlink/plugins/GenerateJLIClassesPluginTest.java	Thu Aug 29 08:52:22 2019 -0400
+++ b/test/jdk/tools/jlink/plugins/GenerateJLIClassesPluginTest.java	Thu Aug 29 15:59:00 2019 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -21,6 +21,7 @@
  * questions.
  */
 
+import java.io.IOException;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -61,7 +62,6 @@
 
         helper.generateDefaultModules();
 
-
         // Test that generate-jli is enabled by default
         Result result = JImageGenerator.getJLinkTask()
                 .modulePath(helper.defaultModulePath())
@@ -71,10 +71,9 @@
 
         Path image = result.assertSuccess();
 
-        JImageValidator.validate(
-            image.resolve("lib").resolve("modules"),
-                    classFilesForSpecies(GenerateJLIClassesPlugin.defaultSpecies()),
-                    List.of());
+        JImageValidator.validate(image.resolve("lib").resolve("modules"),
+                classFilesForSpecies(GenerateJLIClassesPlugin.defaultSpecies()),
+                List.of());
 
         // Check that --generate-jli-classes=@file works as intended
         Path baseFile = Files.createTempFile("base", "trace");
@@ -90,10 +89,32 @@
 
         image = result.assertSuccess();
 
-        JImageValidator.validate(
-            image.resolve("lib").resolve("modules"),
-                    classFilesForSpecies(List.of(species)), // species should be in the image
-                    classFilesForSpecies(List.of(species.substring(1)))); // but not it's immediate parent
+        JImageValidator.validate(image.resolve("lib").resolve("modules"),
+                classFilesForSpecies(List.of(species)), // species should be in the image
+                classFilesForSpecies(List.of(species.substring(1)))); // but not it's immediate parent
+
+        // Check that --generate-jli-classes=@file fails as intended on shapes that can't be generated
+        ensureInvalidSignaturesFail(
+                "[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual L_L (success)\n",
+                "[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeInterface L_L (success)\n",
+                "[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic I_L (success)\n"
+        );
+    }
+
+    private static void ensureInvalidSignaturesFail(String ... args) throws IOException {
+        for (String fileString : args) {
+            Path failFile = Files.createTempFile("fail", "trace");
+            fileString = "[LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual L_L (success)\n";
+            Files.write(failFile, fileString.getBytes(Charset.defaultCharset()));
+            Result result = JImageGenerator.getJLinkTask()
+                    .modulePath(helper.defaultModulePath())
+                    .output(helper.createNewImageDir("generate-jli-file"))
+                    .option("--generate-jli-classes=@" + failFile.toString())
+                    .addMods("java.base")
+                    .call();
+
+            result.assertFailure();
+        }
     }
 
     private static List<String> classFilesForSpecies(Collection<String> species) {