From 235f8b1cbff8ed13071d5c19c0be492c0b25cb78 Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
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/AssetURLConnectionRegisteredTest.java      | 76 ++++++++++++++++++++++
 1 file changed, 76 insertions(+)
 create mode 100644 src/junit/com/jogamp/common/net/AssetURLConnectionRegisteredTest.java

(limited to 'src/junit/com/jogamp/common/net/AssetURLConnectionRegisteredTest.java')

diff --git a/src/junit/com/jogamp/common/net/AssetURLConnectionRegisteredTest.java b/src/junit/com/jogamp/common/net/AssetURLConnectionRegisteredTest.java
new file mode 100644
index 0000000..7b8d1a4
--- /dev/null
+++ b/src/junit/com/jogamp/common/net/AssetURLConnectionRegisteredTest.java
@@ -0,0 +1,76 @@
+package com.jogamp.common.net;
+
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.jogamp.common.util.IOUtil;
+
+public class AssetURLConnectionRegisteredTest extends AssetURLConnectionBase {
+    
+    @BeforeClass
+    public static void assetRegistration() throws Exception {
+        try {
+            System.err.println("******* Asset URL Stream Handler Registration: PRE");
+            Assert.assertTrue("GenericURLStreamHandlerFactory.register() failed", AssetURLContext.registerHandler(AssetURLConnectionRegisteredTest.class.getClassLoader()));
+            Assert.assertNotNull(AssetURLContext.getRegisteredHandler());
+            System.err.println("******* Asset URL Stream Handler Registration: POST");
+        } catch (Exception e) {
+            setTestSupported(false);
+            throw e;
+        }        
+    }
+    
+    @Test
+    public void assetRegisteredURLConnection_RT() throws IOException {
+        testAssetConnection(createAssetURLConnection(test_asset_rt_url), test_asset_rt_entry);
+    }
+    
+    @Test
+    public void assetRegisteredURLConnection_Test() throws IOException {
+        testAssetConnection(createAssetURLConnection(test_asset_test1_url), test_asset_test1_entry);
+    }
+    
+    @Test
+    public void assetRegisteredIOUtilGetResourceRel1_RT() throws IOException {
+        final URLConnection urlConn0 = IOUtil.getResource(test_asset_test2a_url, this.getClass().getClassLoader());
+        Assert.assertNotNull(urlConn0);
+        Assert.assertEquals(test_asset_test2a_url, urlConn0.getURL().toExternalForm());
+        testAssetConnection(urlConn0, test_asset_test2_entry);
+        
+        final URL url1 = IOUtil.getRelativeOf(urlConn0.getURL(), test_asset_test3_rel);
+        Assert.assertNotNull(url1);
+        Assert.assertEquals(test_asset_test3a_url, url1.toExternalForm());
+        testAssetConnection(url1.openConnection(), test_asset_test3_entry);
+    }
+        
+    @Test
+    public void assetRegisteredIOUtilGetResourceRel2_RT() throws IOException {
+        final URLConnection urlConn0 = IOUtil.getResource(test_asset_test2b_url, this.getClass().getClassLoader());
+        Assert.assertNotNull(urlConn0);
+        Assert.assertEquals(test_asset_test2b_url, urlConn0.getURL().toExternalForm());
+        testAssetConnection(urlConn0, test_asset_test2_entry);
+        
+        final URL url1 = IOUtil.getRelativeOf(urlConn0.getURL(), test_asset_test3_rel);
+        Assert.assertNotNull(url1);
+        Assert.assertEquals(test_asset_test3b_url, url1.toExternalForm());
+        testAssetConnection(url1.openConnection(), test_asset_test3_entry);
+    }
+    
+    URLConnection createAssetURLConnection(String path) throws IOException {
+        URL url = AssetURLContext.createURL(path);
+        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 = AssetURLConnectionRegisteredTest.class.getName();
+        org.junit.runner.JUnitCore.main(tstname);
+    }    
+}
-- 
cgit v1.2.3