jdk/test/tools/jlink/plugins/OrderResourcesPluginTest.java
changeset 38320 e24c7029e8ba
parent 37893 f1cc7d17e66b
child 39042 52db877f18db
equal deleted inserted replaced
37948:caf97b37ebec 38320:e24c7029e8ba
    34 import java.nio.file.Files;
    34 import java.nio.file.Files;
    35 import java.util.Arrays;
    35 import java.util.Arrays;
    36 import java.util.Collection;
    36 import java.util.Collection;
    37 import java.util.HashMap;
    37 import java.util.HashMap;
    38 import java.util.Map;
    38 import java.util.Map;
    39 import jdk.tools.jlink.internal.PoolImpl;
    39 import java.util.stream.Collectors;
    40 
    40 
       
    41 import jdk.tools.jlink.internal.ModulePoolImpl;
    41 import jdk.tools.jlink.internal.plugins.OrderResourcesPlugin;
    42 import jdk.tools.jlink.internal.plugins.OrderResourcesPlugin;
    42 import jdk.tools.jlink.plugin.Pool;
    43 import jdk.tools.jlink.plugin.ModuleEntry;
    43 import jdk.tools.jlink.plugin.Pool.ModuleData;
    44 import jdk.tools.jlink.plugin.ModulePool;
    44 import jdk.tools.jlink.plugin.TransformerPlugin;
    45 import jdk.tools.jlink.plugin.TransformerPlugin;
    45 
    46 
    46 public class OrderResourcesPluginTest {
    47 public class OrderResourcesPluginTest {
    47 
    48 
    48     public static void main(String[] args) throws Exception {
    49     public static void main(String[] args) throws Exception {
    49         new OrderResourcesPluginTest().test();
    50         new OrderResourcesPluginTest().test();
    50     }
    51     }
    51 
    52 
    52     public void test() throws Exception {
    53     public void test() throws Exception {
    53         ModuleData[] array = {
    54         ModuleEntry[] array = {
    54                 Pool.newResource("/module1/toto1.class", new byte[0]),
    55                 ModuleEntry.create("/module1/toto1.class", new byte[0]),
    55                 Pool.newResource("/module2/toto2.class", new byte[0]),
    56                 ModuleEntry.create("/module2/toto2.class", new byte[0]),
    56                 Pool.newResource("/module3/toto3.class", new byte[0]),
    57                 ModuleEntry.create("/module3/toto3.class", new byte[0]),
    57                 Pool.newResource("/module3/toto3/module-info.class", new byte[0]),
    58                 ModuleEntry.create("/module3/toto3/module-info.class", new byte[0]),
    58                 Pool.newResource("/zazou/toto.class", new byte[0]),
    59                 ModuleEntry.create("/zazou/toto.class", new byte[0]),
    59                 Pool.newResource("/module4/zazou.class", new byte[0]),
    60                 ModuleEntry.create("/module4/zazou.class", new byte[0]),
    60                 Pool.newResource("/module5/toto5.class", new byte[0]),
    61                 ModuleEntry.create("/module5/toto5.class", new byte[0]),
    61                 Pool.newResource("/module6/toto6/module-info.class", new byte[0])
    62                 ModuleEntry.create("/module6/toto6/module-info.class", new byte[0])
    62         };
    63         };
    63 
    64 
    64         ModuleData[] sorted = {
    65         ModuleEntry[] sorted = {
    65                 Pool.newResource("/zazou/toto.class", new byte[0]),
    66                 ModuleEntry.create("/zazou/toto.class", new byte[0]),
    66                 Pool.newResource("/module3/toto3/module-info.class", new byte[0]),
    67                 ModuleEntry.create("/module3/toto3/module-info.class", new byte[0]),
    67                 Pool.newResource("/module6/toto6/module-info.class", new byte[0]),
    68                 ModuleEntry.create("/module6/toto6/module-info.class", new byte[0]),
    68                 Pool.newResource("/module1/toto1.class", new byte[0]),
    69                 ModuleEntry.create("/module1/toto1.class", new byte[0]),
    69                 Pool.newResource("/module2/toto2.class", new byte[0]),
    70                 ModuleEntry.create("/module2/toto2.class", new byte[0]),
    70                 Pool.newResource("/module3/toto3.class", new byte[0]),
    71                 ModuleEntry.create("/module3/toto3.class", new byte[0]),
    71                 Pool.newResource("/module4/zazou.class", new byte[0]),
    72                 ModuleEntry.create("/module4/zazou.class", new byte[0]),
    72                 Pool.newResource("/module5/toto5.class", new byte[0])
    73                 ModuleEntry.create("/module5/toto5.class", new byte[0])
    73         };
    74         };
    74 
    75 
    75         ModuleData[] sorted2 = {
    76         ModuleEntry[] sorted2 = {
    76             Pool.newResource("/module5/toto5.class", new byte[0]),
    77             ModuleEntry.create("/module5/toto5.class", new byte[0]),
    77             Pool.newResource("/module6/toto6/module-info.class", new byte[0]),
    78             ModuleEntry.create("/module6/toto6/module-info.class", new byte[0]),
    78             Pool.newResource("/module4/zazou.class", new byte[0]),
    79             ModuleEntry.create("/module4/zazou.class", new byte[0]),
    79             Pool.newResource("/module3/toto3.class", new byte[0]),
    80             ModuleEntry.create("/module3/toto3.class", new byte[0]),
    80             Pool.newResource("/module3/toto3/module-info.class", new byte[0]),
    81             ModuleEntry.create("/module3/toto3/module-info.class", new byte[0]),
    81             Pool.newResource("/module1/toto1.class", new byte[0]),
    82             ModuleEntry.create("/module1/toto1.class", new byte[0]),
    82             Pool.newResource("/module2/toto2.class", new byte[0]),
    83             ModuleEntry.create("/module2/toto2.class", new byte[0]),
    83             Pool.newResource("/zazou/toto.class", new byte[0])
    84             ModuleEntry.create("/zazou/toto.class", new byte[0])
    84         };
    85         };
    85 
    86 
    86         Pool resources = new PoolImpl();
    87         ModulePool resources = new ModulePoolImpl();
    87         for (ModuleData r : array) {
    88         for (ModuleEntry r : array) {
    88             resources.add(r);
    89             resources.add(r);
    89         }
    90         }
    90 
    91 
    91         {
    92         {
    92             Pool out = new PoolImpl();
    93             ModulePool out = new ModulePoolImpl();
    93             Map<String, String> config = new HashMap<>();
    94             Map<String, String> config = new HashMap<>();
    94             config.put(OrderResourcesPlugin.NAME, "/zazou/*,*/module-info.class");
    95             config.put(OrderResourcesPlugin.NAME, "/zazou/*,*/module-info.class");
    95             TransformerPlugin p = new OrderResourcesPlugin();
    96             TransformerPlugin p = new OrderResourcesPlugin();
    96             p.configure(config);
    97             p.configure(config);
    97             p.visit(resources, out);
    98             p.visit(resources, out);
    98             check(out.getContent(), sorted);
    99             check(out.entries().collect(Collectors.toList()), sorted);
    99         }
   100         }
   100 
   101 
   101         {
   102         {
   102             // Order of resources in the file, then un-ordered resources.
   103             // Order of resources in the file, then un-ordered resources.
   103             File order = new File("resources.order");
   104             File order = new File("resources.order");
   110                 path = path.substring(index + 1, path.length() - ".class".length());
   111                 path = path.substring(index + 1, path.length() - ".class".length());
   111                 builder.append(path).append("\n");
   112                 builder.append(path).append("\n");
   112             }
   113             }
   113             Files.write(order.toPath(), builder.toString().getBytes());
   114             Files.write(order.toPath(), builder.toString().getBytes());
   114 
   115 
   115             Pool out = new PoolImpl();
   116             ModulePool out = new ModulePoolImpl();
   116             Map<String, String> config = new HashMap<>();
   117             Map<String, String> config = new HashMap<>();
   117             config.put(OrderResourcesPlugin.NAME, "@" + order.getAbsolutePath());
   118             config.put(OrderResourcesPlugin.NAME, "@" + order.getAbsolutePath());
   118             TransformerPlugin p = new OrderResourcesPlugin();
   119             TransformerPlugin p = new OrderResourcesPlugin();
   119             p.configure(config);
   120             p.configure(config);
   120             p.visit(resources, out);
   121             p.visit(resources, out);
   121             check(out.getContent(), sorted2);
   122             check(out.entries().collect(Collectors.toList()), sorted2);
   122 
   123 
   123         }
   124         }
   124     }
   125     }
   125 
   126 
   126     private void check(Collection<ModuleData> outResources,
   127     private void check(Collection<ModuleEntry> outResources,
   127             ModuleData[] sorted) {
   128             ModuleEntry[] sorted) {
   128         if (outResources.size() != sorted.length) {
   129         if (outResources.size() != sorted.length) {
   129             throw new AssertionError("Wrong number of resources:\n"
   130             throw new AssertionError("Wrong number of resources:\n"
   130                     + "expected: " + Arrays.toString(sorted) + ",\n"
   131                     + "expected: " + Arrays.toString(sorted) + ",\n"
   131                     + "     got: " + outResources);
   132                     + "     got: " + outResources);
   132         }
   133         }
   133         int i = 0;
   134         int i = 0;
   134         for (ModuleData r : outResources) {
   135         for (ModuleEntry r : outResources) {
   135             System.err.println("Resource: " + r);
   136             System.err.println("Resource: " + r);
   136             if (!sorted[i].getPath().equals(r.getPath())) {
   137             if (!sorted[i].getPath().equals(r.getPath())) {
   137                 throw new AssertionError("Resource not properly sorted, difference at: " + i + "\n"
   138                 throw new AssertionError("Resource not properly sorted, difference at: " + i + "\n"
   138                         + "expected: " + Arrays.toString(sorted) + ",\n"
   139                         + "expected: " + Arrays.toString(sorted) + ",\n"
   139                         + "     got: " + outResources);
   140                         + "     got: " + outResources);