diff -r f939432eb32a -r 4da8463b3d33 jdk/test/tools/jlink/asmplugin/PackageMappingTest.java --- a/jdk/test/tools/jlink/asmplugin/PackageMappingTest.java Fri Jul 08 17:36:34 2016 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,197 +0,0 @@ -/* - * Copyright (c) 2015, 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 - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * Asm plugin testing. - * @test - * @summary Test plugins - * @author Andrei Eremeev - * @modules jdk.jlink/jdk.tools.jlink.internal - * jdk.jlink/jdk.tools.jlink.internal.plugins.asm - * @run main PackageMappingTest - */ -import java.io.IOException; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Collectors; - -import jdk.tools.jlink.internal.plugins.asm.AsmGlobalPool; -import jdk.tools.jlink.internal.plugins.asm.AsmModulePool; -import jdk.tools.jlink.internal.plugins.asm.AsmPool.ResourceFile; -import jdk.tools.jlink.internal.plugins.asm.AsmPool.WritableResourcePool; -import jdk.tools.jlink.plugin.PluginException; -import jdk.tools.jlink.plugin.ModuleEntry; -import jdk.tools.jlink.plugin.ModulePool; - -public class PackageMappingTest extends AsmPluginTestBase { - - private final List newFiles = Arrays.asList( - "/java.base/a1/bbb/c", - "/" + TEST_MODULE + "/a2/bbb/d" - ); - - public static void main(String[] args) throws Exception { - if (!isImageBuild()) { - System.err.println("Test not run. Not image build."); - return; - } - new PackageMappingTest().test(); - } - - public void test() throws Exception { - TestPlugin[] plugins = new TestPlugin[]{ - new PackageMappingPlugin(newFiles, false), - new PackageMappingPlugin(newFiles, true) - }; - for (TestPlugin p : plugins) { - ModulePool pool = p.visit(getPool()); - p.test(getPool(), pool); - } - } - - public class PackageMappingPlugin extends TestPlugin { - - private final Map> newFiles; - private final boolean testGlobal; - - private String getModuleName(String res) { - return res.substring(1, res.indexOf("/", 1)); - } - - private PackageMappingPlugin(List files, boolean testGlobal) { - this.newFiles = new HashMap<>(); - this.testGlobal = testGlobal; - for (String file : files) { - String moduleName = getModuleName(file); - String path = file.substring(1 + moduleName.length() + 1); - newFiles.computeIfAbsent(moduleName, $ -> new ArrayList<>()).add( - new ResourceFile(path, new byte[0])); - } - } - - @Override - public void visit() { - testMapToUnknownModule(); - testMapPackageTwice(); - testPackageMapping(); - } - - @Override - public void test(ModulePool inResources, ModulePool outResources) { - Set in = getPools().getGlobalPool().getResourceFiles().stream() - .map(ModuleEntry::getPath) - .collect(Collectors.toSet()); - Set out = extractResources(outResources).stream() - .map(ModuleEntry::getPath) - .collect(Collectors.toSet()); - in.addAll(PackageMappingTest.this.newFiles); - if (!Objects.equals(in, out)) { - throw new AssertionError("Expected: " + in + ", got: " + outResources); - } - } - - private void testPackageMapping() { - AsmGlobalPool globalPool = getPools().getGlobalPool(); - try { - Map> mappedPackages = new HashMap<>(); - Function> produceSet = $ -> new HashSet<>(); - for (Map.Entry> entry : newFiles.entrySet()) { - String moduleName = entry.getKey(); - Set module = mappedPackages.computeIfAbsent(moduleName, produceSet); - AsmModulePool modulePool = getPools().getModulePool(moduleName); - for (ResourceFile r : entry.getValue()) { - String name = r.getPath(); - String packageName = name.substring(0, name.lastIndexOf('/')); - if (module.add(packageName)) { - globalPool.addPackageModuleMapping(packageName, moduleName); - } - WritableResourcePool transformedResourceFiles = testGlobal - ? globalPool.getTransformedResourceFiles() - : modulePool.getTransformedResourceFiles(); - transformedResourceFiles.addResourceFile(r); - } - try { - modulePool.getTransformedResourceFiles().addResourceFile( - new ResourceFile("a3/bbb", new byte[0])); - throw new AssertionError("Exception expected"); - } catch (Exception ex) { - // expected - } - } - try { - globalPool.getTransformedResourceFiles().addResourceFile( - new ResourceFile("a3/bbb", new byte[0])); - throw new AssertionError("Exception expected"); - } catch (Exception ex) { - // expected - } - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - private void testMapPackageTwice() { - try { - AsmGlobalPool globalPool = getPools().getGlobalPool(); - globalPool.addPackageModuleMapping("a/p1", TEST_MODULE); - globalPool.addPackageModuleMapping("a/p1", TEST_MODULE); - throw new AssertionError("Exception expected after mapping a package twice to the same module"); - } catch (Exception e) { - if (e instanceof PluginException) { - // expected - String message = e.getMessage(); - if (!(TEST_MODULE + " module already contains package a.p1").equals(message)) { - throw new AssertionError(e); - } - } else { - throw new AssertionError(e); - } - } - } - - private void testMapToUnknownModule() { - AsmModulePool unknownModule = getPools().getModulePool("UNKNOWN"); - if (unknownModule != null) { - throw new AssertionError("getModulePool returned not null value: " + unknownModule.getModuleName()); - } - try { - AsmGlobalPool globalPool = getPools().getGlobalPool(); - globalPool.addPackageModuleMapping("a/b", "UNKNOWN"); - throw new AssertionError("Exception expected after mapping a package to unknown module"); - } catch (Exception e) { - String message = e.getMessage(); - if (message == null || !message.startsWith("Unknown module UNKNOWN")) { - throw new AssertionError(e); - } - } - } - } -}