Author: mwringe
Date: 2007-06-14 18:05:20 -0400 (Thu, 14 Jun 2007)
New Revision: 7425
Modified:
trunk/common/src/main/org/jboss/portal/common/jar/JarEntryInfo.java
trunk/common/src/main/org/jboss/portal/common/net/file/FileURLNavigationProvider.java
trunk/common/src/main/org/jboss/portal/common/net/jar/JarURLNavigationProvider.java
trunk/common/src/main/org/jboss/portal/test/common/JarTestCase.java
trunk/common/src/main/org/jboss/portal/test/common/net/URLNavigatorTestCase.java
Log:
- Add and modify tests for URLNavigationTestCase.
- Implement file name based filtering.
- Add option to allow visiting jar root.
Modified: trunk/common/src/main/org/jboss/portal/common/jar/JarEntryInfo.java
===================================================================
--- trunk/common/src/main/org/jboss/portal/common/jar/JarEntryInfo.java 2007-06-14
21:41:59 UTC (rev 7424)
+++ trunk/common/src/main/org/jboss/portal/common/jar/JarEntryInfo.java 2007-06-14
22:05:20 UTC (rev 7425)
@@ -52,9 +52,12 @@
throw new IllegalArgumentException();
}
- //
String entryName = entry.getName();
ArrayList atoms = new ArrayList();
+
+ //add the root element since this is not actually included in the jar as a entry
+ atoms.add("/");
+
int previous = -1;
while (true)
{
Modified:
trunk/common/src/main/org/jboss/portal/common/net/file/FileURLNavigationProvider.java
===================================================================
---
trunk/common/src/main/org/jboss/portal/common/net/file/FileURLNavigationProvider.java 2007-06-14
21:41:59 UTC (rev 7424)
+++
trunk/common/src/main/org/jboss/portal/common/net/file/FileURLNavigationProvider.java 2007-06-14
22:05:20 UTC (rev 7425)
@@ -29,6 +29,7 @@
import java.util.Arrays;
import java.net.URL;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.File;
@@ -53,48 +54,55 @@
private void visit(File file, URLVisitor visitor, URLFilter filter) throws
IllegalArgumentException, IOException
{
- String name = file.getName();
- if (file.isDirectory())
+ if (!file.exists())
{
- if (trace)
+ throw new FileNotFoundException();
+ }
+ else
+ {
+ String name = file.getName();
+ if (file.isDirectory())
{
- log.debug("entering directory" + file.getAbsolutePath());
+ if (trace)
+ {
+ log.debug("entering directory" + file.getAbsolutePath());
+ }
+ URL url = file.toURL();
+ boolean visit = filter == null || filter.acceptDir(url);
+ if (visit)
+ {
+ visitor.startDir(url, name);
+ File[] childrenFiles = file.listFiles();
+ Arrays.sort(childrenFiles);
+ for (int i = 0; i < childrenFiles.length; i++)
+ {
+ File childFile = childrenFiles[i];
+ visit(childFile, visitor, filter);
+ }
+ visitor.endDir(file.toURL(), name);
+ if (trace)
+ {
+ log.debug("leaving directory" + file.getAbsolutePath());
+ }
+ }
}
- URL url = file.toURL();
- boolean visit = filter == null || filter.acceptDir(url);
- if (visit)
+ else
{
- visitor.startDir(url, name);
- File[] childrenFiles = file.listFiles();
- Arrays.sort(childrenFiles);
- for (int i = 0; i < childrenFiles.length; i++)
+ if (trace)
{
- File childFile = childrenFiles[i];
- visit(childFile, visitor, filter);
+ log.debug("visiting file " + file.getAbsolutePath());
}
- visitor.endDir(file.toURL(), name);
- if (trace)
+ URL url = file.toURL();
+ File file2 = new File(url.getFile());
+ if (file.equals(file2) && filter.acceptFile(url))
{
- log.debug("leaving directory" + file.getAbsolutePath());
+ visitor.file(url, name);
}
+ else if (trace)
+ {
+ log.debug("The file does not respect url format");
+ }
}
}
- else
- {
- if (trace)
- {
- log.debug("visiting file " + file.getAbsolutePath());
- }
- URL url = file.toURL();
- File file2 = new File(url.getFile());
- if (file.equals(file2))
- {
- visitor.file(url, name);
- }
- else if (trace)
- {
- log.debug("The file does not respect url format");
- }
- }
}
}
Modified:
trunk/common/src/main/org/jboss/portal/common/net/jar/JarURLNavigationProvider.java
===================================================================
---
trunk/common/src/main/org/jboss/portal/common/net/jar/JarURLNavigationProvider.java 2007-06-14
21:41:59 UTC (rev 7424)
+++
trunk/common/src/main/org/jboss/portal/common/net/jar/JarURLNavigationProvider.java 2007-06-14
22:05:20 UTC (rev 7425)
@@ -65,13 +65,27 @@
JarFile jarFile = conn.getJarFile();
URL jarURL = conn.getJarFileURL();
JarEntry rootEntry = conn.getJarEntry();
-
- //
- if (rootEntry == null)
+
+ // if the URL specifies a directory without a "/" at the end
+ // the entry will be found, except it won't actually exist.
+ // To get around this issue, we need to check if an entry exists
+ // with a "/" at the end.
+ if (rootEntry != null)
{
- throw new NotYetImplemented("The code for exact jar url has not been
implemented");
+ JarEntry testDirEntry = conn.getJarFile().getJarEntry(rootEntry +
"/");
+ if (testDirEntry != null)
+ {
+ rootEntry = testDirEntry;
+ }
}
-
+ else
+ {
+ // if rootEntry == null then the url points to the root of the jar. The problem
+ // is that the root of the jar doesn't actually exist in the jar.
+ // We need to create a fake jar entry to mimic this behavior
+ rootEntry = new JarEntry("/");
+ }
+
// Get the root entry
JarEntryInfo rootEntryInfo = new JarEntryInfo(rootEntry);
@@ -89,8 +103,15 @@
// Only consider descendant of the root or root itself
if (entryInfo.equals(rootEntryInfo) || entryInfo.isDescendantOf(rootEntryInfo))
{
+ List relPath;
// The relative path from the root
- List relPath = entryInfo.getNames().subList(rootEntryInfo.size() - 1,
entryInfo.size());
+ if (rootEntryInfo.size() > 1){
+ relPath = entryInfo.getNames().subList(rootEntryInfo.size() - 1,
entryInfo.size());
+ }
+ else
+ {
+ relPath = entryInfo.getNames();
+ }
// Enter intermediate dirs
while (stack.size() < relPath.size() - 1 && enabled)
@@ -145,7 +166,10 @@
String name = (String)relPath.get(relPath.size() - 1);
stack.push(name, false);
URL url = stack.getURL();
- visitor.file(url, name);
+ if (filter.acceptFile(url))
+ {
+ visitor.file(url, name);
+ }
stack.pop();
}
}
Modified: trunk/common/src/main/org/jboss/portal/test/common/JarTestCase.java
===================================================================
--- trunk/common/src/main/org/jboss/portal/test/common/JarTestCase.java 2007-06-14
21:41:59 UTC (rev 7424)
+++ trunk/common/src/main/org/jboss/portal/test/common/JarTestCase.java 2007-06-14
22:05:20 UTC (rev 7425)
@@ -54,31 +54,31 @@
public void testJarEntryInfo()
{
JarEntryInfo info1 = new JarEntryInfo(new JarEntry("a"));
- assertEquals(Arrays.asList(new String[]{"a"}), info1.getNames());
+ assertEquals(Arrays.asList(new String[]{"/", "a"}),
info1.getNames());
JarEntryInfo info2 = new JarEntryInfo(new JarEntry("a/"));
- assertEquals(Arrays.asList(new String[]{"a"}), info2.getNames());
+ assertEquals(Arrays.asList(new String[]{"/", "a"}),
info2.getNames());
JarEntryInfo info3 = new JarEntryInfo(new JarEntry("/"));
- assertEquals(Arrays.asList(new String[]{}), info3.getNames());
+ assertEquals(Arrays.asList(new String[]{"/"}), info3.getNames());
JarEntryInfo info4 = new JarEntryInfo(new JarEntry("a/b"));
- assertEquals(Arrays.asList(new String[]{"a","b"}),
info4.getNames());
+ assertEquals(Arrays.asList(new String[]{"/",
"a","b"}), info4.getNames());
JarEntryInfo info5 = new JarEntryInfo(new JarEntry("a/b/"));
- assertEquals(Arrays.asList(new String[]{"a","b"}),
info5.getNames());
+ assertEquals(Arrays.asList(new String[]{"/",
"a","b"}), info5.getNames());
JarEntryInfo info6 = new JarEntryInfo(new JarEntry("/a"));
- assertEquals(Arrays.asList(new String[]{"a"}), info6.getNames());
+ assertEquals(Arrays.asList(new String[]{"/", "a"}),
info6.getNames());
JarEntryInfo info7 = new JarEntryInfo(new JarEntry("/a/"));
- assertEquals(Arrays.asList(new String[]{"a"}), info7.getNames());
+ assertEquals(Arrays.asList(new String[]{"/", "a"}),
info7.getNames());
JarEntryInfo info8 = new JarEntryInfo(new JarEntry("/a/b"));
- assertEquals(Arrays.asList(new String[]{"a","b"}),
info8.getNames());
+ assertEquals(Arrays.asList(new String[]{"/",
"a","b"}), info8.getNames());
JarEntryInfo info9 = new JarEntryInfo(new JarEntry("/a/b/"));
- assertEquals(Arrays.asList(new String[]{"a","b"}),
info9.getNames());
+ assertEquals(Arrays.asList(new String[]{"/",
"a","b"}), info9.getNames());
}
public void testEntryComparator() throws IOException
Modified:
trunk/common/src/main/org/jboss/portal/test/common/net/URLNavigatorTestCase.java
===================================================================
---
trunk/common/src/main/org/jboss/portal/test/common/net/URLNavigatorTestCase.java 2007-06-14
21:41:59 UTC (rev 7424)
+++
trunk/common/src/main/org/jboss/portal/test/common/net/URLNavigatorTestCase.java 2007-06-14
22:05:20 UTC (rev 7425)
@@ -25,14 +25,16 @@
import junit.framework.TestCase;
import java.io.File;
+import java.io.FileNotFoundException;
+import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
+import org.jboss.portal.common.net.URLFilter;
+import org.jboss.portal.common.net.URLNavigator;
import org.jboss.portal.common.net.URLVisitor;
-import org.jboss.portal.common.net.URLNavigator;
-import org.jboss.portal.common.net.URLFilter;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -46,224 +48,431 @@
super(name);
}
- private List expectedAtoms1;
- private List expectedAtoms2;
- private List expectedAtoms3;
- private List expectedAtoms4;
- private List expectedAtoms5;
- private List expectedAtoms6;
- private List expectedAtoms7;
+ // the name of the jar that contains the tests
+ private final String TEST_JAR_NAME="test.jar";
- private List expectedURLs1;
- private List expectedURLs2;
- private List expectedURLs3;
- private List expectedURLs4;
- private List expectedURLs5;
- private List expectedURLs6;
- private List expectedURLs7;
-
- private List filterValues1;
- private List filterValues2;
- private List filterValues3;
- private List filterValues4;
- private List filterValues5;
- private List filterValues6;
- private List filterValues7;
-
+
+ ArrayList expectedAtomsC1 = new ArrayList();
+ ArrayList expectedAtomsB1 = new ArrayList();
+ ArrayList expectedAtomsA1 = new ArrayList();
+ ArrayList expectedAtomsB1Dash = new ArrayList();
+ ArrayList expectedAtomsD1txt = new ArrayList();
+ ArrayList expectedAtomsC1txt = new ArrayList();
+ ArrayList expectedAtomsB1txt = new ArrayList();
+ ArrayList expectedAtomsB2txt = new ArrayList();
+ ArrayList expectedAtomsA3txt = new ArrayList();
+
+ ArrayList expectedURLsC1 = new ArrayList();
+ ArrayList expectedURLsB1 = new ArrayList();
+ ArrayList expectedURLsA1 = new ArrayList();
+ ArrayList expectedURLsB1Dash = new ArrayList();
+ ArrayList expectedURLsD1txt = new ArrayList();
+ ArrayList expectedURLsC1txt = new ArrayList();
+ ArrayList expectedURLsB1txt = new ArrayList();
+ ArrayList expectedURLsB2txt = new ArrayList();
+ ArrayList expectedURLsA3txt = new ArrayList();
+
+ Filter noFilter;
+ Filter fullFilter;
+ Filter noDirFilter;
+ Filter noFileFilter;
+
protected void setUp() throws Exception
{
- expectedAtoms1 = new ArrayList();
- expectedAtoms1.add("<b1>");
- expectedAtoms1.add("<c1>");
- expectedAtoms1.add("d1.txt");
- expectedAtoms1.add("</c1>");
- expectedAtoms1.add("c1.txt");
- expectedAtoms1.add("</b1>");
- expectedURLs1 = new ArrayList();
- expectedURLs1.add("/a1/b1/");
- expectedURLs1.add("/a1/b1/c1/");
- expectedURLs1.add("/a1/b1/c1/d1.txt");
- expectedURLs1.add("/a1/b1/c1/");
- expectedURLs1.add("/a1/b1/c1.txt");
- expectedURLs1.add("/a1/b1/");
- filterValues1 = new ArrayList();
- filterValues1.add(Boolean.TRUE);
- filterValues1.add(Boolean.TRUE);
+
+ expectedURLsD1txt = new ArrayList();
+ expectedURLsD1txt.add("/a1/b1/c1/d1.txt");
+
+ expectedURLsC1 = new ArrayList();
+ expectedURLsC1.add("/a1/b1/c1/");
+ expectedURLsC1.addAll(expectedURLsD1txt);
+ expectedURLsC1.add("/a1/b1/c1/");
+
+ expectedURLsC1txt = new ArrayList();
+ expectedURLsC1txt.add("/a1/b1/c1.txt");
+
+ expectedURLsB1 = new ArrayList();
+ expectedURLsB1.add("/a1/b1/");
+ expectedURLsB1.addAll(expectedURLsC1);
+ expectedURLsB1.addAll(expectedURLsC1txt);
+ expectedURLsB1.add("/a1/b1/");
+
+ expectedURLsB1Dash = new ArrayList();
+ expectedURLsB1Dash.add("/a1/b1-/");
+ expectedURLsB1Dash.add("/a1/b1-/");
+
+ expectedURLsB1txt = new ArrayList();
+ expectedURLsB1txt.add("/a1/b1.txt");
+
+ expectedURLsB2txt = new ArrayList();
+ expectedURLsB2txt.add("/a1/b2.txt");
+
+ expectedURLsA1 = new ArrayList();
+ expectedURLsA1.add("/a1/");
+ expectedURLsA1.addAll(expectedURLsB1);
+ expectedURLsA1.addAll(expectedURLsB1Dash);
+ expectedURLsA1.addAll(expectedURLsB1txt);
+ expectedURLsA1.addAll(expectedURLsB2txt);
+ expectedURLsA1.add("/a1/");
+
+ expectedURLsA3txt = new ArrayList();
+ expectedURLsA3txt.add("a3.txt");
+
+ expectedAtomsD1txt = new ArrayList();
+ expectedAtomsD1txt.add("d1.txt");
+
+ expectedAtomsC1 = new ArrayList();
+ expectedAtomsC1.add("<c1>");
+ expectedAtomsC1.addAll(expectedAtomsD1txt);
+ expectedAtomsC1.add("</c1>");
+
+ expectedAtomsC1txt = new ArrayList();
+ expectedAtomsC1txt.add("c1.txt");
+
+ expectedAtomsB1 = new ArrayList();
+ expectedAtomsB1.add("<b1>");
+ expectedAtomsB1.addAll(expectedAtomsC1);
+ expectedAtomsB1.addAll(expectedAtomsC1txt);
+ expectedAtomsB1.add("</b1>");
+
+ expectedAtomsB1Dash = new ArrayList();
+ expectedAtomsB1Dash.add("<b1->");
+ expectedAtomsB1Dash.add("</b1->");
+
+ expectedAtomsB1txt = new ArrayList();
+ expectedAtomsB1txt.add("b1.txt");
+
+ expectedAtomsB2txt = new ArrayList();
+ expectedAtomsB2txt.add("b2.txt");
+
+ expectedAtomsA1 = new ArrayList();
+ expectedAtomsA1.add("<a1>");
+ expectedAtomsA1.addAll(expectedAtomsB1);
+ expectedAtomsA1.addAll(expectedAtomsB1Dash);
+ expectedAtomsA1.addAll(expectedAtomsB1txt);
+ expectedAtomsA1.addAll(expectedAtomsB2txt);
+ expectedAtomsA1.add("</a1>");
+
+ expectedAtomsA3txt = new ArrayList();
+ expectedAtomsA3txt.add("a3.txt");
+
+ noFilter = new Filter(true, true);
+ fullFilter = new Filter(false, false);
+ noDirFilter = new Filter(true, false);
+ noFileFilter = new Filter(false, true);
+ }
- //
- expectedAtoms2 = new ArrayList();
- expectedAtoms2.add("<a1>");
- expectedAtoms2.add("<b1>");
- expectedAtoms2.add("<c1>");
- expectedAtoms2.add("d1.txt");
- expectedAtoms2.add("</c1>");
- expectedAtoms2.add("c1.txt");
- expectedAtoms2.add("</b1>");
- expectedAtoms2.add("<b1->");
- expectedAtoms2.add("</b1->");
- expectedAtoms2.add("b1.txt");
- expectedAtoms2.add("b2.txt");
- expectedAtoms2.add("</a1>");
- expectedURLs2 = new ArrayList();
- expectedURLs2.add("/a1/");
- expectedURLs2.add("/a1/b1/");
- expectedURLs2.add("/a1/b1/c1/");
- expectedURLs2.add("/a1/b1/c1/d1.txt");
- expectedURLs2.add("/a1/b1/c1/");
- expectedURLs2.add("/a1/b1/c1.txt");
- expectedURLs2.add("/a1/b1/");
- expectedURLs2.add("/a1/b1-/");
- expectedURLs2.add("/a1/b1-/");
- expectedURLs2.add("/a1/b1.txt");
- expectedURLs2.add("/a1/b2.txt");
- expectedURLs2.add("/a1/");
- filterValues2 = new ArrayList();
- filterValues2.add(Boolean.TRUE);
- filterValues2.add(Boolean.TRUE);
- filterValues2.add(Boolean.TRUE);
- filterValues2.add(Boolean.TRUE);
+ protected void tearDown() throws Exception
+ {
+ }
- //
- expectedAtoms3 = new ArrayList();
- expectedAtoms3.add("d1.txt");
- expectedURLs3 = new ArrayList();
- expectedURLs3.add("/a1/b1/c1/d1.txt");
- filterValues3 = new ArrayList();
+
+//// Root tests
+
+ public void testRootWithFile() throws Exception
+ {
+ URL fileURL = getFileURL ("test/test-jar/");
+
+ ArrayList expectedAtoms = new ArrayList();
+ expectedAtoms.add("<test-jar>");
+ expectedAtoms.addAll(expectedAtomsA1);
+ expectedAtoms.addAll(expectedAtomsA3txt);
+ expectedAtoms.add("</test-jar>");
+
+ ArrayList expectedURLs = new ArrayList();
+ expectedURLs.add("/test-jar/");
+ expectedURLs.addAll(expectedURLsA1);
+ expectedURLs.addAll(expectedURLsA3txt);
+ //expectedURLs.add("a3.txt");
+ expectedURLs.add("/test-jar/");
+
+ doTest (fileURL, expectedAtoms, expectedURLs, noFilter);
+ doTest (fileURL, expectedAtoms, expectedURLs, null);
+ doTest (fileURL, new ArrayList(), new ArrayList(), fullFilter);
+ doTest (fileURL, removeFiles(expectedAtoms), removeFiles(expectedURLs),
noFileFilter);
+ //since we pass it a directory, we can't enter the directory
+ doTest (fileURL, new ArrayList(), new ArrayList(),noDirFilter);
+
+ }
- //
- expectedAtoms4 = new ArrayList();
- expectedAtoms4.add("<b1>");
- expectedAtoms4.add("c1.txt");
- expectedAtoms4.add("</b1>");
- expectedURLs4 = new ArrayList();
- expectedURLs4.add("/a1/b1/");
- expectedURLs4.add("/a1/b1/c1.txt");
- expectedURLs4.add("/a1/b1/");
- filterValues4 = new ArrayList();
- filterValues4.add(Boolean.TRUE);
- filterValues4.add(Boolean.FALSE);
+ public void testRootWithJar() throws Exception
+ {
+ URL jarURL = getJarURL ("/");
+
+ ArrayList expectedAtoms = new ArrayList();
+ expectedAtoms.add("</>");
+ expectedAtoms.add("<META-INF>");
+ expectedAtoms.add("MANIFEST.MF");
+ expectedAtoms.add("</META-INF>");
+ expectedAtoms.addAll(expectedAtomsA1);
+ expectedAtoms.addAll(expectedAtomsA3txt);
+ expectedAtoms.add("<//>");
+
+ ArrayList expectedURLs = new ArrayList();
+ expectedURLs.add("/");
+ expectedURLs.add("/META-INF/");
+ expectedURLs.add("/META-INF/MANIFEST.MF");
+ expectedURLs.add("/META-INF/");
+ expectedURLs.addAll(expectedURLsA1);
+ expectedURLs.addAll(expectedURLsA3txt);
+ expectedURLs.add("/");
+
+ doTest (jarURL, expectedAtoms, expectedURLs, noFilter);
+ doTest (jarURL, new ArrayList(), new ArrayList(), fullFilter);
+ doTest (jarURL, removeFiles(expectedAtoms), removeFiles(expectedURLs),
noFileFilter);
+ doTest (jarURL, new ArrayList(), new ArrayList(), noDirFilter);
+
+ }
+
+//// Directory Test
+
+ public void testDirectoryWithFile() throws Exception
+ {
+ URL fileURL = getFileURL ("test/test-jar/a1/");
+ doDirectoryTest(fileURL);
+ }
+
+ public void testDirectoryWithJar() throws Exception
+ {
+ URL jarURL = getJarURL("/a1/");
+ doDirectoryTest(jarURL);
+ }
- //
- expectedAtoms5 = new ArrayList();
- expectedURLs5 = new ArrayList();
- filterValues5 = new ArrayList();
- filterValues5.add(Boolean.FALSE);
-
- //
- expectedAtoms6 = new ArrayList();
- expectedAtoms6.add("<a1>");
- expectedAtoms6.add("<b1>");
- expectedAtoms6.add("c1.txt");
- expectedAtoms6.add("</b1>");
- expectedAtoms6.add("<b1->");
- expectedAtoms6.add("</b1->");
- expectedAtoms6.add("b1.txt");
- expectedAtoms6.add("b2.txt");
- expectedAtoms6.add("</a1>");
- expectedURLs6 = new ArrayList();
- expectedURLs6.add("/a1/");
- expectedURLs6.add("/a1/b1/");
- expectedURLs6.add("/a1/b1/c1.txt");
- expectedURLs6.add("/a1/b1/");
- expectedURLs6.add("/a1/b1-/");
- expectedURLs6.add("/a1/b1-/");
- expectedURLs6.add("/a1/b1.txt");
- expectedURLs6.add("/a1/b2.txt");
- expectedURLs6.add("/a1/");
- filterValues6 = new ArrayList();
- filterValues6.add(Boolean.TRUE);
- filterValues6.add(Boolean.TRUE);
- filterValues6.add(Boolean.FALSE);
- filterValues6.add(Boolean.TRUE);
-
- //
- expectedAtoms7 = new ArrayList();
- expectedAtoms7.add("<a1>");
- expectedAtoms7.add("<b1->");
- expectedAtoms7.add("</b1->");
- expectedAtoms7.add("b1.txt");
- expectedAtoms7.add("b2.txt");
- expectedAtoms7.add("</a1>");
- expectedURLs7 = new ArrayList();
- expectedURLs7.add("/a1/");
- expectedURLs7.add("/a1/b1-/");
- expectedURLs7.add("/a1/b1-/");
- expectedURLs7.add("/a1/b1.txt");
- expectedURLs7.add("/a1/b2.txt");
- expectedURLs7.add("/a1/");
- filterValues7 = new ArrayList();
- filterValues7.add(Boolean.TRUE);
- filterValues7.add(Boolean.FALSE);
- filterValues7.add(Boolean.TRUE);
+ private void doDirectoryTest(URL url) throws Exception
+ {
+ doTest (url, expectedAtomsA1, expectedURLsA1, noFilter);
+ doTest (url, expectedAtomsA1, expectedURLsA1, new Filter());
+ doTest (url, new ArrayList(), new ArrayList(), fullFilter);
+ doTest (url, removeFiles(expectedAtomsA1), removeFiles(expectedURLsA1),
noFileFilter);
+ // since we pass it a directory, we can't enter the directory
+ doTest (url, new ArrayList(), new ArrayList(),noDirFilter);
+
+ Filter mixFilter = new Filter();
+ List dirSeq = new ArrayList();
+ dirSeq.add(Boolean.TRUE); //a1
+ dirSeq.add(Boolean.TRUE); //b1
+ dirSeq.add(Boolean.TRUE); //c1
+ dirSeq.add(Boolean.FALSE); //b1-
+
+ List fileSeq = new ArrayList();
+ fileSeq.add(Boolean.TRUE); //d1.txt
+ fileSeq.add(Boolean.FALSE); //c1.txt
+ fileSeq.add(Boolean.FALSE); //b1.txt
+ fileSeq.add(Boolean.FALSE); //b2.txt
+
+ mixFilter.setAcceptDir(dirSeq);
+ mixFilter.setAcceptFile(fileSeq);
+
+ ArrayList expectedMixAtoms = new ArrayList();
+ expectedMixAtoms.add("<a1>");
+ expectedMixAtoms.add("<b1>");
+ expectedMixAtoms.add("<c1>");
+ expectedMixAtoms.add("d1.txt");
+ expectedMixAtoms.add("</c1>");
+ expectedMixAtoms.add("</b1>");
+ expectedMixAtoms.add("</a1>");
+
+ ArrayList expectedMixURLs = new ArrayList();
+ expectedMixURLs.add("/a1/");
+ expectedMixURLs.add("/a1/b1/");
+ expectedMixURLs.add("/a1/b1/c1/");
+ expectedMixURLs.add("/a1/b1/c1/d1.txt");
+ expectedMixURLs.add("/a1/b1/c1/");
+ expectedMixURLs.add("/a1/b1/");
+ expectedMixURLs.add("/a1/");
+
+ doTest (url, expectedMixAtoms, expectedMixURLs, mixFilter);
}
+
+//// SubDirectory Test
- protected void tearDown() throws Exception
+ public void testSubDirectoryWithFile() throws Exception
{
+ URL fileURL = getFileURL ("test/test-jar/a1/b1");
+ doSubDirectoryTest(fileURL);
}
+
+ public void testSubDirectoryWithJar() throws Exception
+ {
+ URL jarURL = getJarURL("/a1/b1/");
+ doSubDirectoryTest(jarURL);
+ }
+
+ private void doSubDirectoryTest(URL url) throws Exception
+ {
+ doTest (url, expectedAtomsB1, expectedURLsB1, noFilter);
+ doTest (url, new ArrayList(), new ArrayList(), fullFilter);
+ doTest (url, new ArrayList(), new ArrayList(), fullFilter);
+ doTest (url, removeFiles(expectedAtomsB1), removeFiles(expectedURLsB1),
noFileFilter);
+ // since we pass it a directory, we can't enter the directory
+ doTest (url, new ArrayList(), new ArrayList(),noDirFilter);
+
+ Filter mixFilter = new Filter();
+ List dirSeq = new ArrayList();
+ dirSeq.add(Boolean.TRUE); //b1
+ dirSeq.add(Boolean.FALSE); //c1
+
+ List fileSeq = new ArrayList();
+ fileSeq.add (Boolean.TRUE); //c1.txt
+
+ mixFilter.setAcceptDir(dirSeq);
+ mixFilter.setAcceptFile(fileSeq);
+
+ ArrayList expectedMixAtoms = new ArrayList();
+ expectedMixAtoms.add("<b1>");
+ expectedMixAtoms.addAll(expectedAtomsC1txt);
+ expectedMixAtoms.add("</b1>");
+
+ ArrayList expectedMixURLs = new ArrayList();
+ expectedMixURLs.add("/a1/b1/");
+ expectedMixURLs.add("/a1/b1/c1.txt");
+ expectedMixURLs.add("/a1/b1/");
+
+ doTest (url, expectedMixAtoms, expectedMixURLs, mixFilter);
+ }
+
+/// SingleFileTest
+
+ public void testSingleFileWithFile() throws Exception
+ {
+ URL fileURL = getFileURL("test/test-jar/a1/b1/c1/d1.txt");
+ doSingleFileTest(fileURL);
+ }
+
+ public void testSingleFileWithJar() throws Exception
+ {
+ URL jarURL = getJarURL("/a1/b1/c1/d1.txt");
+ doSingleFileTest(jarURL);
+ }
- public void testJar() throws Exception
+ private void doSingleFileTest(URL url) throws Exception
{
+ doTest (url, expectedAtomsD1txt, expectedURLsD1txt, noFilter);
+ doTest (url, new ArrayList(), new ArrayList(), fullFilter);
+ doTest (url, removeFiles(expectedAtomsD1txt), removeFiles(expectedAtomsD1txt),
noFileFilter);
+ doTest (url, expectedAtomsD1txt, expectedURLsD1txt, noDirFilter);
+ }
+
+//// Empty Directory Test
+
+ public void testEmptyDirectoryWithFile() throws Exception
+ {
+ URL fileURL = getFileURL("test/test-jar/a1/b1-");
+ doEmptyDirectoryTest(fileURL);
+ }
+
+ public void testEmptyDirectoryWithJar() throws Exception
+ {
+ URL jarURL = getJarURL("/a1/b1-/");
+ doEmptyDirectoryTest(jarURL);
+ }
+
+ private void doEmptyDirectoryTest(URL url) throws Exception
+ {
+ doTest (url, expectedAtomsB1Dash, expectedURLsB1Dash, noFilter);
+ doTest (url, new ArrayList(), new ArrayList(), fullFilter);
+ doTest (url, expectedAtomsB1Dash, expectedURLsB1Dash, noFileFilter);
+ doTest (url, new ArrayList(), new ArrayList(), noDirFilter);
+ }
+
+////
+
+ public void testJarURLs() throws Exception
+ {
+ //Note no / at the end
+ URL jarURL = getJarURL("/a1");
+
+ doTest (jarURL, expectedAtomsA1, expectedURLsA1, noFilter);
+ doTest (jarURL, new ArrayList(), new ArrayList(), fullFilter);
+ doTest (jarURL, removeFiles(expectedAtomsA1), removeFiles(expectedURLsA1),
noFileFilter);
+ // since we pass it a directory, we can't enter the directory
+ doTest (jarURL, new ArrayList(), new ArrayList(),noDirFilter);
+
+ try
+ {
+ jarURL = getJarURL("/foobar/");
+ doTest (jarURL, expectedAtomsA1, expectedURLsA1, noFilter);
+ fail ("An invalid jar url did not cause a FileNotFoundException");
+ }
+ catch (FileNotFoundException fnfe)
+ {
+ //expected result
+ }
+ }
+
+ public void testFileURLs() throws Exception
+ {
+ //Note no / at the end
+ URL fileURL = getFileURL("test/test-jar/a1");
+
+ doTest (fileURL, expectedAtomsA1, expectedURLsA1, noFilter);
+ doTest (fileURL, new ArrayList(), new ArrayList(), fullFilter);
+ doTest (fileURL, removeFiles(expectedAtomsA1), removeFiles(expectedURLsA1),
noFileFilter);
+ // since we pass it a directory, we can't enter the directory
+ doTest (fileURL, new ArrayList(), new ArrayList(),noDirFilter);
+
+ try
+ {
+ fileURL = new URL("file:foobar");
+ doTest (fileURL, expectedAtomsA1, expectedURLsA1, noFilter);
+ fail ("An invalid file url did not cause a FileNotFoundException");
+ }
+ catch (FileNotFoundException fnfe)
+ {
+ //expected result
+ }
+ }
+
+
+/*----------Utility Metods and Classes ---------------*/
+
+ private URL getFileURL (String name) throws MalformedURLException
+ {
+ String resourcePath = System.getProperty("build.resources");
+ File resourcesDir = new File(resourcePath);
+ assertTrue(resourcesDir.exists());
+ assertTrue(resourcesDir.isDirectory());
+
+ File file = new File (resourcesDir, name);
+ assertTrue (file.exists());
+ return file.toURL();
+ }
+
+ private URL getJarURL (String name) throws MalformedURLException
+ {
String libPath = System.getProperty("build.lib");
assertNotNull(libPath);
File libDir = new File(libPath);
assertTrue(libDir.exists());
assertTrue(libDir.isDirectory());
- File jarFile = new File(libDir, "test.jar");
+ File jarFile = new File(libDir, TEST_JAR_NAME);
assertTrue(jarFile.exists());
jarFile.deleteOnExit();
assertFalse(jarFile.isDirectory());
-
- //
- URL jarURL1 = new URL("jar", "", jarFile.toURL() +
"!" + "/a1/b1/");
- doTest(jarURL1, expectedAtoms1, expectedURLs1, filterValues1.iterator());
- doTest(jarURL1, expectedAtoms4, expectedURLs4, filterValues4.iterator());
- doTest(jarURL1, expectedAtoms5, expectedURLs5, filterValues5.iterator());
-
- //
- URL jarURL2 = new URL("jar", "", jarFile.toURL() +
"!" + "/a1/");
- doTest(jarURL2, expectedAtoms2, expectedURLs2, filterValues2.iterator());
- doTest(jarURL2, expectedAtoms6, expectedURLs6, filterValues6.iterator());
- doTest(jarURL2, expectedAtoms7, expectedURLs7, filterValues7.iterator());
-
- //
- URL jarURL3 = new URL("jar", "", jarFile.toURL() +
"!" + "/a1/b1/c1/d1.txt");
- doTest(jarURL3, expectedAtoms3, expectedURLs3, filterValues3.iterator());
+ URL jarURL = new URL("jar", "", jarFile.toURL() + "!"
+ name);
+ return jarURL;
}
+
+ public List removeFiles(ArrayList list){
+ ArrayList newList = (ArrayList)list.clone();
+ ArrayList fileList = new ArrayList();
+
+ Iterator iterator = newList.iterator();
+ while (iterator.hasNext())
+ {
+ String element = (String)(iterator.next());
+ if (element.endsWith(".txt") || element.endsWith(".MF"))
+ {
+ fileList.add(element);
+ }
+ }
- public void testFile() throws Exception
- {
- String resourcePath = System.getProperty("build.resources");
- File resourcesDir = new File(resourcePath);
- assertTrue(resourcesDir.exists());
- assertTrue(resourcesDir.isDirectory());
-
- //
- File f1 = new File(resourcesDir, "test/test-jar/a1/b1/");
- assertTrue(f1.exists());
- assertTrue(f1.isDirectory());
- URL dirURL1 = f1.toURL();
- doTest(dirURL1, expectedAtoms1, expectedURLs1, filterValues1.iterator());
- doTest(dirURL1, expectedAtoms4, expectedURLs4, filterValues4.iterator());
- doTest(dirURL1, expectedAtoms5, expectedURLs5, filterValues5.iterator());
-
- //
- File f2 = new File(resourcesDir, "test/test-jar/a1/");
- assertTrue(f2.exists());
- assertTrue(f2.isDirectory());
- URL dirURL2 = f2.toURL();
- doTest(dirURL2, expectedAtoms2, expectedURLs2, filterValues2.iterator());
- doTest(dirURL2, expectedAtoms6, expectedURLs6, filterValues6.iterator());
- doTest(dirURL2, expectedAtoms7, expectedURLs7, filterValues7.iterator());
-
- //
- File f3 = new File(resourcesDir, "test/test-jar/a1/b1/c1/d1.txt");
- assertTrue(f3.exists());
- assertFalse(f3.isDirectory());
- URL dirURL3 = f3.toURL();
- doTest(dirURL3, expectedAtoms3, expectedURLs3, filterValues3.iterator());
+ newList.removeAll(fileList);
+
+ return newList;
}
-
- private void doTest(URL url, List expectedAtoms, List expectedURLs, final Iterator
filterBehavior) throws Exception
+
+ private void doTest(URL url, List expectedAtoms, List expectedURLs, Filter filter)
throws Exception
{
final List atoms = new ArrayList();
final List urls = new ArrayList();
@@ -284,21 +493,12 @@
atoms.add(name);
urls.add(url);
}
- }, new URLFilter()
- {
- public boolean acceptFile(URL url)
- {
- throw new UnsupportedOperationException();
- }
- public boolean acceptDir(URL url)
- {
- return Boolean.TRUE.equals(filterBehavior.next());
- }
- });
+ }, filter);
//
if (urls.size() != expectedURLs.size())
{
+ assertEquals(expectedURLs, urls);
fail("URLs size does not match " + urls.size() + "!=" +
expectedURLs.size());
}
@@ -315,8 +515,105 @@
fail("URL " + entryURL + " does not end with the suffix "
+ suffix + " at index " + i);
}
}
+
+ if (filter != null)
+ {
+ assertTrue("The Sequence never completed",
filter.SequenceComplete());
+ }
+ }
- //
- assertFalse(filterBehavior.hasNext());
+ /**
+ * Class used to setup URLFilter behavior for tests
+ * @author Matt Wringe
+ */
+ private static class Filter implements URLFilter
+ {
+ private boolean acceptFile;
+ private boolean acceptDir;
+
+ private List acceptFileSequence = null;
+ private Iterator fileIterator = null;
+
+ private List acceptDirSequence = null;
+ private Iterator dirIterator = null;
+
+ /**
+ * Method used to setup URLFilter behavior
+ * @param acceptFile Always accept files
+ * @param acceptDir Always accept files
+ */
+ public Filter (boolean acceptFile, boolean acceptDir)
+ {
+ this.acceptFile = acceptFile;
+ this.acceptDir = acceptDir;
+ }
+
+ /**
+ * Method to setup URLFilter behavior which by default always accepts
+ * files and directories
+ */
+ public Filter()
+ {
+ this.acceptDir = true;
+ this.acceptFile = true;
+ }
+
+ /**
+ * Set the sequence to accept or reject files
+ * @param acceptFileSequence Sequence for accepting files
+ */
+ public void setAcceptFile (List acceptFileSequence)
+ {
+ this.acceptFileSequence = acceptFileSequence;
+ this.fileIterator = acceptFileSequence.iterator();
+ }
+
+ /**
+ * Set the sequence to accept or reject directories
+ * @param acceptDirSequence Sequence for accepting directories
+ */
+ public void setAcceptDir (List acceptDirSequence)
+ {
+ this.acceptDirSequence = acceptDirSequence;
+ this.dirIterator = acceptDirSequence.iterator();
+ }
+
+ /**
+ * Returns true if the sequence is complete or if no sequence has been setup
+ * @return True if the sequence is complete
+ */
+ public boolean SequenceComplete()
+ {
+ if ((dirIterator == null || !dirIterator.hasNext()) && (fileIterator ==
null || !fileIterator.hasNext()))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ public boolean acceptFile(URL url)
+ {
+ if (fileIterator != null)
+ {
+ return ((Boolean)fileIterator.next()).booleanValue();
+ }
+ else
+ {
+ return acceptFile;
+ }
+ }
+
+ public boolean acceptDir(URL url)
+ {
+ if (dirIterator != null)
+ {
+ return ((Boolean)dirIterator.next()).booleanValue();
+ }
+ return acceptDir;
+ }
}
}
+