Index: testsrc/org/aspectj/tools/ajc/AjcTestCase.java =================================================================== RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java,v retrieving revision 1.29 diff -u -r1.29 AjcTestCase.java --- testsrc/org/aspectj/tools/ajc/AjcTestCase.java 21 Dec 2005 11:47:41 -0000 1.29 +++ testsrc/org/aspectj/tools/ajc/AjcTestCase.java 3 May 2006 15:46:00 -0000 @@ -558,7 +558,8 @@ lastRunResult = null; StringBuffer cp = new StringBuffer(); if (classpath != null) { - cp.append(classpath); + // allow replacing this special variable, rather than copying all files to allow tests of jars that don't end in .jar + cp.append(substituteSandbox(classpath)); cp.append(File.pathSeparator); } cp.append(ajc.getSandboxDirectory().getAbsolutePath()); @@ -622,6 +623,10 @@ } return lastRunResult; } + + private String substituteSandbox(String classpath) { + return classpath.replace("$sandbox", ajc.getSandboxDirectory().getAbsolutePath()); + } /** * Any central pre-processing of args. @@ -639,6 +644,7 @@ args[i] = adaptToPlatform(args[i]); if ("-classpath".equals(args[i])) { cpIndex = i; + args[i+1] = substituteSandbox(args[i+1]); String next = args[i+1]; hasruntime = ((null != next) && (-1 != next.indexOf("aspectjrt.jar"))); Index: src/org/aspectj/ajdt/ajc/BuildArgParser.java =================================================================== RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java,v retrieving revision 1.51 diff -u -r1.51 BuildArgParser.java --- src/org/aspectj/ajdt/ajc/BuildArgParser.java 9 Mar 2006 17:25:44 -0000 1.51 +++ src/org/aspectj/ajdt/ajc/BuildArgParser.java 3 May 2006 15:45:59 -0000 @@ -397,14 +397,14 @@ while (st.hasMoreTokens()) { String filename = st.nextToken(); File file = makeFile(filename); - if (file.exists() && FileUtil.hasZipSuffix(filename)) { + if (FileUtil.isZipFile(file)) { inPath.add(file); } else { if (file.isDirectory()) { inPath.add(file); } else - showError("bad inpath component: " + filename); + showWarning("skipping missing, empty or corrupt inpath entry: " + filename); } } buildConfig.setInPath(inPath); @@ -420,7 +420,7 @@ while (st.hasMoreTokens()) { String filename = st.nextToken(); File jarFile = makeFile(filename); - if (jarFile.exists() && FileUtil.hasZipSuffix(filename)) { + if (FileUtil.isZipFile(jarFile)) { buildConfig.getInJars().add(jarFile); } else { File dirFile = makeFile(filename); @@ -428,7 +428,7 @@ buildConfig.getInJars().add(dirFile); } else - showError("bad injar: " + filename); + showWarning("skipping missing, empty or corrupt injar: " + filename); } } @@ -442,10 +442,10 @@ while (st.hasMoreTokens()) { String filename = st.nextToken(); File jarFile = makeFile(filename); - if (jarFile.exists() && (FileUtil.hasZipSuffix(filename) || jarFile.isDirectory())) { + if (FileUtil.isZipFile(jarFile) || jarFile.isDirectory()) { buildConfig.getAspectpath().add(jarFile); } else { - showError("bad aspectpath: " + filename); + showWarning("skipping missing, empty or corrupt aspectpath entry: " + filename); } } @@ -476,7 +476,7 @@ if (args.size() > nextArgIndex) { // buildConfig.getAjOptions().put(AjCompilerOptions.OPTION_OutJAR, CompilerOptions.GENERATE); File jarFile = makeFile(((ConfigParser.Arg)args.get(nextArgIndex)).getValue()); - if (FileUtil.hasZipSuffix(jarFile)) { + if (!jarFile.isDirectory()) { try { if (!jarFile.exists()) { jarFile.createNewFile(); Index: testsrc/org/aspectj/ajdt/ajc/BuildArgParserTestCase.java =================================================================== RCS file: /home/technology/org.aspectj/modules/org.aspectj.ajdt.core/testsrc/org/aspectj/ajdt/ajc/BuildArgParserTestCase.java,v retrieving revision 1.21 diff -u -r1.21 BuildArgParserTestCase.java --- testsrc/org/aspectj/ajdt/ajc/BuildArgParserTestCase.java 7 Nov 2005 10:53:23 -0000 1.21 +++ testsrc/org/aspectj/ajdt/ajc/BuildArgParserTestCase.java 3 May 2006 15:45:59 -0000 @@ -115,6 +115,7 @@ String FILE_PATH = "@" + TEST_DIR + "configWithClasspathExtdirsBootCPArgs.lst"; AjBuildConfig config = genBuildConfig(new String[] { FILE_PATH }, messageWriter); List classpath = config.getFullClasspath(); + // note that empty or corrupt jars are NOT included in the classpath // should have three entries, resolved relative to location of .lst file assertEquals("Three entries in classpath",3,classpath.size()); Iterator cpIter = classpath.iterator(); @@ -507,6 +508,71 @@ assertEquals("Wrong outxml","custom/aop.xml",config.getOutxmlName()); assertTrue("Following option currupted",config.getShowWeavingInformation()); } + + public void testNonstandardInjars() { + AjBuildConfig config = setupNonstandardPath("-injars"); + assertEquals("bad path: " + config.getInJars(), 3, config.getInJars().size()); + } + + public void testNonstandardInpath() { + AjBuildConfig config = setupNonstandardPath("-inpath"); + assertEquals("bad path: " + config.getInpath(), 3, config.getInpath().size()); + } + + public void testNonstandardAspectpath() { + AjBuildConfig config = setupNonstandardPath("-aspectpath"); + assertEquals("bad path: " + config.getAspectpath(), 3, config.getAspectpath().size()); + } + + public void testNonstandardClasspath() throws IOException { + AjBuildConfig config = setupNonstandardPath("-classpath"); + checkPathSubset(config.getClasspath()); + } + + public void testNonstandardBootpath() throws IOException { + AjBuildConfig config = setupNonstandardPath("-bootclasspath"); + checkPathSubset(config.getBootclasspath()); + } + + private void checkPathSubset(List path) throws IOException { + String files[] = { "aspectjJar.file", "jarChild", "parent.zip" }; + for (int i = 0; i < files.length; i++) { + File file = new File(NONSTANDARD_JAR_DIR+files[i]); + assertTrue("bad path: " + path, path.contains(file.getCanonicalPath())); + } + } + + public void testNonstandardOutjar() { + final String OUT_JAR = NONSTANDARD_JAR_DIR + File.pathSeparator + "outputFile"; + + AjBuildConfig config = genBuildConfig(new String[] { + "-outjar", OUT_JAR }, + messageWriter); + + File newJar = new File(OUT_JAR); + assertEquals( + getCanonicalPath(newJar),config.getOutputJar().getAbsolutePath()); + + newJar.delete(); + } + + public void testNonstandardOutputDirectorySetting() throws InvalidInputException { + String filePath = AjdtAjcTests.TESTDATA_PATH + File.separator + "ajc.jar" + File.separator; + File testDir = new File(filePath); + AjBuildConfig config = genBuildConfig(new String[] { "-d", filePath }, messageWriter); + + assertEquals(testDir.getAbsolutePath(), config.getOutputDir().getAbsolutePath()); + } + + private static final String NONSTANDARD_JAR_DIR = AjdtAjcTests.TESTDATA_PATH + "/OutjarTest/folder.jar/"; + + private AjBuildConfig setupNonstandardPath(String pathType) { + String NONSTANDARD_PATH_ENTRY = NONSTANDARD_JAR_DIR+"aspectjJar.file" + File.pathSeparator + NONSTANDARD_JAR_DIR+"aspectJar.file" + File.pathSeparator + NONSTANDARD_JAR_DIR+"jarChild" + File.pathSeparator + NONSTANDARD_JAR_DIR+"parent.zip"; + + return genBuildConfig(new String[] { + pathType, NONSTANDARD_PATH_ENTRY }, + messageWriter); + } protected void setUp() throws Exception { super.setUp();