29package com.jogamp.common.util;
32import java.io.IOException;
33import java.lang.reflect.Method;
34import java.net.URISyntaxException;
36import java.net.URLClassLoader;
37import java.util.jar.JarFile;
39import org.junit.Assert;
40import org.junit.BeforeClass;
41import org.junit.FixMethodOrder;
43import org.junit.runners.MethodSorters;
45import com.jogamp.common.GlueGenVersion;
46import com.jogamp.common.net.URIDumpUtil;
47import com.jogamp.common.net.Uri;
48import com.jogamp.common.os.AndroidVersion;
49import com.jogamp.common.os.NativeLibrary;
50import com.jogamp.common.os.Platform;
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;
56@FixMethodOrder(MethodSorters.NAME_ASCENDING)
60 static class TestClassLoader
extends URLClassLoader {
61 public TestClassLoader(
final URL[] urls) {
64 public TestClassLoader(
final URL[] urls,
final ClassLoader parent) {
69 static void assertTempFileCachesIndividualInstances(
final boolean shallBeSame,
final TempFileCache fileCache2,
final TempFileCache fileCache3) {
70 Assert.assertTrue(fileCache2.
getTempDir().exists());
71 Assert.assertTrue(fileCache2.
getTempDir().isDirectory());
72 Assert.assertTrue(fileCache3.
getTempDir().exists());
73 Assert.assertTrue(fileCache3.
getTempDir().isDirectory());
79 Assert.assertTrue(
"file caches are not equal", fileCache2.
getTempDir().equals(fileCache3.
getTempDir()));
81 Assert.assertFalse(
"file caches are equal", fileCache2.
getTempDir().equals(fileCache3.
getTempDir()));
85 final ClassLoader cl = fileCache2.getClass().getClassLoader();
86 assertTempFileCachesIndividualInstances(shallBeSame, fileCache2, cl, fileCache3, cl);
89 static void assertTempFileCachesIndividualInstances(
final boolean shallBeSame,
final Object fileCache2,
final ClassLoader cl2,
final Object fileCache3,
final ClassLoader cl3) {
97 Assert.assertEquals(baseDir2, baseDir3);
103 Assert.assertEquals(rootDir2, rootDir3);
111 Assert.assertTrue(
"file caches are not equal", tempDir2.equals(tempDir3));
113 Assert.assertFalse(
"file caches are equal", tempDir2.equals(tempDir3));
125 Assert.assertTrue(fileCache.
isValid(
false));
126 System.err.println(
"tmp dir: "+fileCache.
getTempDir());
131 Assert.assertTrue(fileCache.
getTempDir().exists());
132 Assert.assertTrue(fileCache.
getTempDir().isDirectory());
140 assertTempFileCachesIndividualInstances(
false, fileCache2, fileCache3);
144 public void testJarUtil01a() throws IOException, IllegalArgumentException, URISyntaxException {
147 Assert.assertNotNull(jarFile);
149 File f =
new File(fileCache.
getTempDir(),
"META-INF/MANIFEST.MF");
150 Assert.assertTrue(f.exists());
152 Assert.assertTrue(f.exists());
158 File f =
new File(fileCache.
getTempDir(),
"META-INF/MANIFEST.MF");
159 Assert.assertTrue(f.exists());
161 Assert.assertTrue(f.exists());
178 final ClassLoader cl = getClass().getClassLoader();
182 Assert.assertTrue(f0.exists());
185 Assert.assertTrue(f1.exists());
186 Assert.assertEquals(f0, f1);
189 Assert.assertTrue(f0.exists());
192 Assert.assertTrue(f1.exists());
193 Assert.assertEquals(f0, f1);
200 final String libBaseName =
"gluegen_rt";
201 final ClassLoader cl = getClass().getClassLoader();
204 Assert.assertNotNull(jarUri);
205 System.err.println(
"1 - jarUri:");
209 Assert.assertNotNull(jarFileUri);
210 System.err.println(
"2 - jarFileUri:");
214 Assert.assertNotNull(jarFileDir);
215 System.err.println(
"3 - jarFileDir:");
219 System.err.println(
"4 - nativeJarURI:");
224 Assert.assertNotNull(libFullPath);
226 final File f =
new File(libFullPath);
227 Assert.assertTrue(f.exists());
234 final ClassLoader cl = getClass().getClassLoader();
237 assertTempFileCachesIndividualInstances(
true, fileCache2, fileCache3);
244 System.err.println(
"url: "+urls[0]);
245 final ClassLoader cl2 =
new TestClassLoader(urls,
null);
246 final ClassLoader cl3 =
new TestClassLoader(urls,
null);
264 assertTempFileCachesIndividualInstances(
false, fileCache2, cl2, fileCache3, cl3);
267 public static void main(
final String args[])
throws IOException {
269 org.junit.runner.JUnitCore.
main(tstname);
static void showUri(final Uri uri)
Immutable RFC3986 encoded string.
static Encoded cast(final String encoded)
Casts the given encoded String by creating a new Encoded instance.
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.
final Uri getContainedUri()
If this instance's schemeSpecificPart contains a Uri itself, a sub-Uri, return schemeSpecificPart + #...
final Uri getParent()
Returns this Uri's parent directory Uri.
static final boolean isAvailable
Provides low-level, relatively platform-independent access to shared ("native") libraries.
static final String isValidNativeLibraryName(final String libName, final boolean isLowerCaseAlready)
Comparison of prefix and suffix of the given libName's basename is performed case insensitive
static String getClassFileName(final String clazzBinName)
static final int extract(final File dest, final Map< String, String > nativeLibMap, final JarFile jarFile, final String nativeLibraryPath, final boolean extractNativeLibraries, final boolean extractClassFiles, final boolean extractOtherFiles)
Extract the files of the given jar file.
static Uri getJarUri(final String clazzBinName, final ClassLoader cl)
The Class's "com.jogamp.common.GlueGenVersion" Uri jar:sub_protocol:/some/path/gluegen-rt....
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 JarFile getJarFile(final String clazzBinName, final ClassLoader cl)
static final Method getMethod(final Class<?> clazz, final String methodName, final Class<?> ... argTypes)
static final Object callStaticMethod(final String clazzName, final String methodName, final Class<?>[] argTypes, final Object[] args, final ClassLoader cl)
static final Class<?> getClass(final String clazzName, final boolean initializeClazz, final ClassLoader cl)
Loads and returns the class or null.
static final Object callMethod(final Object instance, final Method method, final Object ... args)
void testTempJarCache04bDiffClassLoader()
void testTempFileCache01FileExist()
void testTempJarCache02AddNativeLibs()
void testTempJarCache00Init()
void testTempJarCache01LoadAllTestManifestAndClass()
static void main(final String args[])
void testTempJarCache04aSameClassLoader()
void testTempFileCache02Instances()
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 File getRootDir()
Root temp directory for this JVM instance.
static File getBaseDir()
Base temp directory used by TempFileCache.
Static Jar file cache handler using an underlying instance of TempFileCache, see getTempFileCache().
static TempFileCache getTempFileCache()
static synchronized final String findResource(final String name)
TODO class access pending needs Classloader.defineClass(..) access, ie.
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 boolean addNativeLibs(final Class<?> certClass, final Uri jarUri, final String nativeLibraryPath)
Adds native libraries, if not yet added.
static synchronized final String findLibrary(final String libName)
If isInitialized(true) is false due to lack of executable support only, this method always returns fa...