]> source.dussan.org Git - aspectj.git/commitdiff
path utilities
authorwisberg <wisberg>
Thu, 12 May 2005 11:51:05 +0000 (11:51 +0000)
committerwisberg <wisberg>
Thu, 12 May 2005 11:51:05 +0000 (11:51 +0000)
testing-util/src/org/aspectj/testing/util/TestUtil.java

index 56af178376a1946acb3f394dd1afe7a7ae6d2ef8..6bf3350cf51e8e98b30050e4336c4e13ddeb292e 100644 (file)
@@ -26,12 +26,19 @@ import java.io.StringWriter;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.Properties;
 import java.util.Set;
 
 import jdiff.text.FileLine;
@@ -58,12 +65,170 @@ import org.aspectj.util.Reflection;
  */
 
 public final class TestUtil {
+    private static final String ASPECTJRT_KEY = "aspectjrt";
+    private static final String TESTING_CLIENT_KEY = "testing-client";
+    public static final URL BAD_URL;
+    private static final File LIB_DIR;
+    private static final Properties LIB_RPATHS;
+    private static final Map LIB_ENTRIES;
+    static {
+        {
+            URL url = null;
+            try {
+                url = new URL("http://eclipse.org/BADURL");
+            } catch (MalformedURLException e) {
+                // ignore - hopefully never
+            }
+            BAD_URL = url;
+        }
+        {
+            File file = new File("lib");
+            if (!isLibDir(file)) {
+                File cur = new File(".").getAbsoluteFile();
+                File parent = cur.getParentFile();
+                while (null != parent) {
+                    file = new File(parent, "lib");
+                    if (isLibDir(file)) {
+                        break;
+                    }
+                    parent = parent.getParentFile();
+                }
+                if (null == parent) {
+                    file = new File("NOT IN ASPECTJ TREE");
+                }
+            }
+            LIB_DIR = file;
+        }
+
+        LIB_RPATHS = new Properties();
+        LIB_RPATHS.setProperty(ASPECTJRT_KEY, "tests/aspectjrt.jar");
+        LIB_RPATHS.setProperty(TESTING_CLIENT_KEY, "tests/testing-client.jar");
+        // TODO support others loaded dynamically
+        
+        Map map = new HashMap();
+        for (Iterator iter = LIB_RPATHS.keySet().iterator(); iter.hasNext();) {
+            String key = (String) iter.next();
+            String path = LIB_RPATHS.getProperty(key);
+            File file = null;
+            URL url = null;
+            try {
+                file = libFile(path);
+                url = libURL(path);
+            } catch (IllegalArgumentException e) {
+                file = new File(path + " not found");
+                url = BAD_URL;
+            } finally {
+                map.put(key + ".file", file);
+                map.put(key + ".url", url);
+            }            
+        }
+        // TODO support changing entries, etc.
+        LIB_ENTRIES = Collections.unmodifiableMap(map);
+    }
+    private static boolean isLibDir(File lib) {
+        return new File(lib, "test" + File.separator + "aspectjrt.jar").exists();
+    }
 
     private TestUtil() {
         super();
     }
 
+    public static URL fileToURL(File file) {
+        try {
+            return file.toURI().toURL();
+        } catch (MalformedURLException e) {
+            return null;
+        }
+    }
 
+    public static String filesToPath(File[] entries) {
+        return toPath(entries);
+    }
+    public static String urlsToPath(URL[] entries) {
+        return toPath(entries);
+    }
+    /**
+     * untyped interface for mixed entries
+     */
+    public static String filesOrurlsToPath(Object[] entries) {
+        return toPath(entries);
+    }
+    
+    /**
+     * This relies on these being File (where toString() == getPath())
+     * or URL (where toString() == toExternalForm()).
+     * @param entries the Object[] of File or URL elements
+     * @return the String with entries dlimited by the File.pathSeparator
+     */
+    private static String toPath(Object[] entries) {
+        if ((null == entries) || (0 == entries.length)) {
+            return "";
+        }
+        StringBuffer path = new StringBuffer();
+        boolean started = false;
+        for (int i = 0; i < entries.length; i++) {
+            if (null != entries[i]) {
+                if (started) {
+                    path.append(File.pathSeparator);
+                } else {
+                    started = true;
+                }
+                path.append(entries[i].toString());
+            }
+        }
+        return path.toString();
+    }
+    
+
+    public static File aspectjrtJarFile() {
+        return (File) LIB_ENTRIES.get(ASPECTJRT_KEY + ".file");
+    }
+    
+    public static URL aspectjrtJarURL() {
+        return (URL) LIB_ENTRIES.get(ASPECTJRT_KEY + ".url");
+    }
+    public static File testingClientJarFile() {
+        return (File) LIB_ENTRIES.get(TESTING_CLIENT_KEY + ".file");
+    }
+    
+    public static URL testingClientJarURL() {
+        return (URL) LIB_ENTRIES.get(TESTING_CLIENT_KEY + ".url");
+    }
+    
+    /**
+     * 
+     * @param rpath the String relative path from the library directory 
+     *  to a resource that must exist (may be a directory),
+     *  using forward slashes as a file separator
+     * @return the File path 
+     * @throws IllegalArgumentException if no such directory or file
+     */
+    public static File libFile(String rpath) {
+        if ((null == rpath) || (0 == rpath.length())) {
+            throw new IllegalArgumentException("no input");
+        }
+        rpath = rpath.replace('/', File.separatorChar);
+        File result = new File(LIB_DIR, rpath);
+        if (result.exists()) {
+            return result;
+        }
+        throw new IllegalArgumentException("not in " + LIB_DIR + ": " + rpath);
+    }
+    
+    /**
+     * Like libPath, only it returns a URL.
+     * @return URL or null if it does not exist
+     * @throws IllegalArgumentException if no such directory or file
+     */
+    public static URL libURL(String rpath) {
+        File file = libFile(rpath);
+        try {
+            return file.toURI().toURL();
+        } catch (MalformedURLException e) {
+            throw new IllegalArgumentException("bad URL from: " + file);
+        }        
+    }
+    
     // ---- arrays
 
     public static void assertArrayEquals(String msg, Object[] expected,