/* * Capsule * Copyright (c) 2014-2015, Parallel Universe Software Co. All rights reserved. * * This program and the accompanying materials are licensed under the terms * of the Eclipse Public License v1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ import capsule.test.Pair; import co.paralleluniverse.common.JarClassLoader; import co.paralleluniverse.common.PathClassLoader; import java.io.IOException; import java.nio.file.Path; import java.util.HashMap; import java.util.List; import java.util.Map; /** * This capsule uses a class loader that is compatible with JimFS */ public class TestCapsule extends Capsule { static final boolean USE_JAR_CLASSLOADER = true; private static Map<Pair<String, String>, List<Path>> DEPS; public TestCapsule(Path jarFile) { super(jarFile); } public TestCapsule(Capsule pred) { super(pred); } @Override ClassLoader newClassLoader(ClassLoader parent, List<Path> ps) { if (ps.size() != 1) throw new AssertionError("Paths: " + ps); try { return USE_JAR_CLASSLOADER ? new JarClassLoader(ps.get(0), parent, false) : new PathClassLoader(ps.toArray(new Path[0]), parent); } catch (IOException e) { throw new RuntimeException(e); } } public static void reset() { DEPS = null; } public static void mock(String coords, String type, List<Path> paths) { if (DEPS == null) DEPS = new HashMap<>(); DEPS.put(new Pair<>(coords, type), paths); } @Override protected List<Path> resolve0(Object x) { if (x instanceof Pair) return DEPS.get((Pair) x); return super.resolve0(x); //To change body of generated methods, choose Tools | Templates. } @Override protected Object lookup0(Object o, String type, Map.Entry<String, ?> attrContext, Object context) { if (DEPS == null) return super.lookup0(o, type, attrContext, context); if (o instanceof String) { String x = (String) o; if (x.contains(":")) o = new Pair<>(x, type.isEmpty() ? "jar" : type); } return super.lookup0(o, type, attrContext, context); //To change body of generated methods, choose Tools | Templates. } }