29package com.jogamp.common.util;
31import java.io.IOException;
32import java.net.MalformedURLException;
33import java.net.URISyntaxException;
35import java.net.URLClassLoader;
36import java.net.URLConnection;
37import java.net.JarURLConnection;
38import java.net.URLStreamHandler;
39import java.util.Enumeration;
40import java.util.jar.JarEntry;
41import java.util.jar.JarFile;
43import org.junit.Assert;
44import org.junit.BeforeClass;
47import com.jogamp.common.GlueGenVersion;
48import com.jogamp.common.net.URIDumpUtil;
49import com.jogamp.common.net.Uri;
50import com.jogamp.common.os.AndroidVersion;
51import com.jogamp.common.util.cache.TempCacheReg;
52import com.jogamp.common.util.cache.TempFileCache;
53import com.jogamp.common.util.cache.TempJarCache;
54import com.jogamp.junit.util.SingletonJunitCase;
56import org.junit.FixMethodOrder;
57import org.junit.runners.MethodSorters;
59@FixMethodOrder(MethodSorters.NAME_ASCENDING)
64 public static void init() {
67 setTestSupported(
false);
76 Assert.assertTrue(fileCache.
isValid(
false));
77 System.err.println(
"tmp dir: "+fileCache.
getTempDir());
80 static class TestClassLoader
extends URLClassLoader {
81 public TestClassLoader(
final URL[] urls) {
84 public TestClassLoader(
final URL[] urls,
final ClassLoader parent) {
89 void validateJarFile(
final JarFile jarFile)
throws IllegalArgumentException, IOException {
90 Assert.assertNotNull(jarFile);
91 Assert.assertTrue(
"jarFile has zero entries: "+jarFile, jarFile.size()>0);
92 final Enumeration<JarEntry> entries = jarFile.entries();
93 System.err.println(
"Entries of "+jarFile.getName()+
": ");
95 while(entries.hasMoreElements()) {
96 System.err.println(i+
": "+entries.nextElement().getName());
101 void validateJarFileURL(
final Uri jarFileURI)
throws IllegalArgumentException, IOException, URISyntaxException {
102 Assert.assertNotNull(jarFileURI);
103 final URL jarFileURL = jarFileURI.toURL();
104 final URLConnection aURLc = jarFileURL.openConnection();
105 Assert.assertTrue(
"jarFileURI/URL has zero content: "+jarFileURL, aURLc.getContentLength()>0);
106 System.err.println(
"URLConnection: "+aURLc);
107 Assert.assertTrue(
"Not a JarURLConnection: "+aURLc, (aURLc instanceof JarURLConnection) );
108 final JarURLConnection jURLc = (JarURLConnection) aURLc;
109 final JarFile jarFile = jURLc.getJarFile();
110 validateJarFile(jarFile);
113 void validateJarUtil(
final String expJarName,
final String clazzBinName,
final ClassLoader cl)
throws IllegalArgumentException, IOException, URISyntaxException {
114 final Uri.Encoded expJarNameE = Uri.Encoded.cast(expJarName);
115 final Uri.Encoded jarName= JarUtil.getJarBasename(clazzBinName, cl);
116 Assert.assertNotNull(jarName);
117 Assert.assertEquals(expJarNameE, jarName);
119 final Uri jarUri = JarUtil.getJarUri(clazzBinName, cl);
120 Assert.assertNotNull(jarUri);
121 System.err.println(
"1 - jarUri:");
122 URIDumpUtil.showUri(jarUri);
124 final Uri jarSubUri = jarUri.getContainedUri();
125 Assert.assertNotNull(jarSubUri);
126 System.err.println(
"2 - jarSubUri:");
127 URIDumpUtil.showUri(jarSubUri);
129 final URL jarSubURL= jarSubUri.toURL();
130 final URLConnection urlConn = jarSubURL.openConnection();
131 Assert.assertTrue(
"jarSubURL has zero content: "+jarSubURL, urlConn.getContentLength()>0);
132 System.err.println(
"URLConnection of jarSubURL: "+urlConn);
134 final Uri jarFileURL = JarUtil.getJarFileUri(clazzBinName, cl);
135 validateJarFileURL(jarFileURL);
137 final JarFile jarFile = JarUtil.getJarFile(clazzBinName, cl);
138 validateJarFile(jarFile);
142 public void testJarUtilFlat01() throws IOException, IllegalArgumentException, URISyntaxException {
143 System.err.println(
"XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
144 validateJarUtil(
"TestJarsInJar.jar",
"ClassInJar0", this.getClass().getClassLoader());
145 System.err.println(
"XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
149 public void testJarUtilJarInJar01() throws IOException, ClassNotFoundException, IllegalArgumentException, URISyntaxException {
150 System.err.println(
"XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
156 final ClassLoader rootCL = this.getClass().getClassLoader();
163 final ClassLoader cl =
new URLClassLoader(
new URL[] { ClassInJar1_jarFileURL }, rootCL);
164 Assert.assertNotNull(cl);
165 validateJarUtil(
"ClassInJar1.jar",
"ClassInJar1", cl);
166 System.err.println(
"XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
170 public void testJarUtilJarInJar02() throws IOException, ClassNotFoundException, IllegalArgumentException, URISyntaxException {
171 System.err.println(
"XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
177 final ClassLoader rootCL = this.getClass().getClassLoader();
184 final ClassLoader cl =
new URLClassLoader(
new URL[] { ClassInJar2_jarFileURL }, rootCL);
185 Assert.assertNotNull(cl);
186 validateJarUtil(
"ClassInJar2.jar",
"ClassInJar2", cl);
187 System.err.println(
"XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
198 public void testJarUtilJarInJar03() throws IOException, ClassNotFoundException, IllegalArgumentException, URISyntaxException {
199 System.err.println(
"XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
209 class CustomClassLoader
extends ClassLoader {
210 CustomClassLoader() {
211 super(
TestJarUtil.this.getClass().getClassLoader());
215 public URL getResource(
final String name) {
216 final URL url = super.getResource(name);
219 URL urlReturn =
null;
222 urlReturn =
new URL(
"bundleresource",
"4.fwk1990213994", 1, url.getFile(),
223 new URLStreamHandler() {
225 protected URLConnection openConnection(
final URL u)
throws IOException {
229 }
catch(
final MalformedURLException e) {
231 Assert.assertTrue(
false);
241 public URL resolve(
final URL url ) {
242 if( url.getProtocol().equals(
"bundleresource") ) {
245 }
catch(
final MalformedURLException e) {
254 final ClassLoader rootCL =
new CustomClassLoader();
261 final ClassLoader cl =
new URLClassLoader(
new URL[] { ClassInJar2_jarFileURL }, rootCL);
262 Assert.assertNotNull(cl);
263 validateJarUtil(
"ClassInJar2.jar",
"ClassInJar2", cl);
264 System.err.println(
"XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
267 public static void main(
final String args[])
throws IOException {
268 final String tstname =
TestJarUtil.class.getName();
269 org.junit.runner.JUnitCore.
main(tstname);
This class implements an immutable Uri as defined by RFC 2396.
final java.net.URL toURL()
Returns a new URL instance using the encoded input string, new URL(uri.input), i.e.
static final String JAR_SCHEME
{@value}
static final boolean isAvailable
static Uri getJarFileUri(final String clazzBinName, final ClassLoader cl)
The Class's "com.jogamp.common.GlueGenVersion" Uri jar:sub_protocol:/some/path/gluegen-rt....
static void setResolver(final Resolver r)
Setting a custom Resolver instance.
void testJarUtilJarInJar02()
static void main(final String args[])
void testJarUtilJarInJar03()
Tests JarUtil's ability to resolve non-JAR URLs with a custom resolver.
void testJarUtilJarInJar01()
static boolean isTempFileCacheUsed()
static boolean isTempJarCacheUsed(final boolean forExecutables)
File getTempDir()
Temporary directory for individual files (eg.
boolean isValid(final boolean forExecutables)
static boolean initSingleton()
Documented way to kick off static initialization.
Static Jar file cache handler using an underlying instance of TempFileCache, see getTempFileCache().
static synchronized final void addAll(final Class<?> certClass, final Uri jarUri)
Adds all types, native libraries, class files and other files (resources) if not yet added.
static boolean isInitialized(final boolean forExecutables)
static boolean initSingleton()
Documented way to kick off static initialization.
static synchronized final Uri getResourceUri(final String name)
Similar to ClassLoader#getResource(String).
Interface allowing users to provide an URL resolver that will convert custom classloader URLs like Ec...