/******************************************************************************* * Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://robocode.sourceforge.net/license/epl-v10.html * * Contributors: * Pavel Savara * - Initial implementation *******************************************************************************/ package net.sf.robocode.host.jarjar; import org.junit.Test; import org.junit.Assert; import java.net.URL; import java.net.URLConnection; import java.net.URLClassLoader; import java.io.InputStream; import java.io.IOException; import java.io.InputStreamReader; import net.sf.robocode.io.URLJarCollector; import net.sf.robocode.io.JarJar; /** * @author Pavel Savara (original) */ public class JarJarTest { static { JarJarURLConnection.register(); } @Test public void run() throws IOException { String clas = "Hello.class"; String inner = "Inner.jar"; String outer = "file:src/test/resources/Outer.jar"; final String separ = "!/"; URL u = new URL("jar:jarjar:" + outer + JarJar.SEPARATOR + inner + separ + clas); final URLConnection urlConnection = URLJarCollector.openConnection(u); final InputStream inputStream = urlConnection.getInputStream(); InputStreamReader isr = new InputStreamReader(inputStream); char[] c = new char[4]; int len = isr.read(c); Assert.assertEquals(len, 4); Assert.assertEquals('T', c[0]); Assert.assertEquals('e', c[1]); Assert.assertEquals('s', c[2]); Assert.assertEquals('t', c[3]); Assert.assertFalse(isr.ready()); isr.close(); inputStream.close(); } @Test public void runClassLoader() throws IOException, ClassNotFoundException { String clas = "tested.robots.Ahead"; String inner = "Inner.jar"; String outer = "file:src/test/resources/Outer.jar"; final String separ = "!/"; final String root = "jar:jarjar:" + outer + JarJar.SEPARATOR + inner + separ; URL u = new URL(root); ClassLoader ucl = new URLClassLoader(new URL[] { u}); ucl.loadClass(clas); } }