From 235f8b1cbff8ed13071d5c19c0be492c0b25cb78 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sat, 17 Mar 2012 21:15:49 +0100 Subject: Add 'asset' URLConnection; IOUtil uses URLConnection / incr. effeciency; Android ClassLoaderUtil cleanup; - Add 'asset' URLConnection - Please read API doc 'PiggybackURLConnection' and 'AssetURLConnection' - Solves generic resource handling where platform locations may differ, ie ClassLoader lookup on Android in the 'assets/' subfolder. - New Android 'AssetDexClassLoader' uses 'assets/' folder for findResource(..) - aapt.signed (our APK ant task) - uses 'assets/' folder - adds the 'assetsdir' attribute allowing to copy other assets into the APK - IOUtil uses URLConnection / incr. effeciency - using URLConnection on all getResource(..) since URL is connected anyways for validation and URLConnection can be used by caller right away - String getRelativeOf(URL, String) -> URL getRelativeOf(URL, String) - preserves scheme, authority, etc - simple parentOf handling, more efficient - reusing new 'asset' protocol impl. - Android ClassLoaderUtil cleanup; - Use createClassLoader(..) impl for build-in static jogamp and user APKs, which removes code redundancy Tests: New code path, especially 'assets' are covered by new unit tests, no regressions on Linux. --- .../net/AssetURLConnectionUnregisteredTest.java | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/junit/com/jogamp/common/net/AssetURLConnectionUnregisteredTest.java (limited to 'src/junit/com/jogamp/common/net/AssetURLConnectionUnregisteredTest.java') diff --git a/src/junit/com/jogamp/common/net/AssetURLConnectionUnregisteredTest.java b/src/junit/com/jogamp/common/net/AssetURLConnectionUnregisteredTest.java new file mode 100644 index 0000000..6db8c17 --- /dev/null +++ b/src/junit/com/jogamp/common/net/AssetURLConnectionUnregisteredTest.java @@ -0,0 +1,55 @@ +package com.jogamp.common.net; + +import java.io.IOException; +import java.net.URL; +import java.net.URLConnection; + +import org.junit.Assert; +import org.junit.Test; + +import com.jogamp.common.util.IOUtil; + +public class AssetURLConnectionUnregisteredTest extends AssetURLConnectionBase { + @Test + public void assetUnregisteredURLConnection_RT2() throws IOException { + testAssetConnection(createAssetURLConnection(test_asset_rt2_url, this.getClass().getClassLoader()), test_asset_rt_entry); + } + + @Test + public void assetUnregisteredURLConnection_RT() throws IOException { + testAssetConnection(createAssetURLConnection(test_asset_rt_url, this.getClass().getClassLoader()), test_asset_rt_entry); + } + + @Test + public void assetUnregisteredURLConnection_Test() throws IOException { + testAssetConnection(createAssetURLConnection(test_asset_test1_url, this.getClass().getClassLoader()), test_asset_test1_entry); + } + + @Test + public void assetUnregisteredIOUtilGetResourceAbs_RT() throws IOException { + URLConnection c = IOUtil.getResource(test_asset_rt_entry, this.getClass().getClassLoader()); + testAssetConnection(c, test_asset_rt_entry); + } + + @Test + public void assetUnregisteredIOUtilGetResourceRel0_RT() throws IOException { + final URLConnection urlConn0 = IOUtil.getResource(this.getClass(), test_asset_test2_rel); + testAssetConnection(urlConn0, test_asset_test2_entry); + + final URL url1 = IOUtil.getRelativeOf(urlConn0.getURL(), test_asset_test3_rel); + Assert.assertNotNull(url1); // JARFile URL .. + testAssetConnection(url1.openConnection(), test_asset_test3_entry); + } + + protected static URLConnection createAssetURLConnection(String path, ClassLoader cl) throws IOException { + URL url = AssetURLContext.createURL(path, cl); + URLConnection c = url.openConnection(); + System.err.println("createAssetURL: "+path+" -> url: "+url+" -> conn: "+c+" / connURL "+(null!=c?c.getURL():null)); + return c; + } + + public static void main(String args[]) throws IOException { + String tstname = AssetURLConnectionUnregisteredTest.class.getName(); + org.junit.runner.JUnitCore.main(tstname); + } +} -- cgit v1.2.3