|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- /********************************************************************
- * Copyright (c) 2003 Contributors. All rights reserved.
- * This program and the accompanying materials are made available
- * under the terms of the Eclipse Public License v 2.0
- * which accompanies this distribution and is available at
- * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
- *
- * Contributors:
- * Mik Kersten initial implementation
- * Helen Hawkins Converted to new interface (bug 148190)
- *******************************************************************/
- package org.aspectj.ajde.core.tests;
-
- import java.io.File;
- import java.io.FileFilter;
- import java.io.IOException;
- import java.util.Arrays;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Set;
- import java.util.jar.JarInputStream;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipInputStream;
-
- import org.aspectj.ajde.core.AjdeCoreTestCase;
- import org.aspectj.ajde.core.TestCompilerConfiguration;
- import org.aspectj.ajde.core.TestMessageHandler;
- import org.aspectj.util.FileUtil;
-
- public class ResourceCopyTest extends AjdeCoreTestCase {
-
- public static final String PROJECT_DIR = "bug-36071a";
- public static final String srcDir = PROJECT_DIR + "/src";
- public static final String binDir = "bin";
-
- public static final String injar1Name = "input1.jar";
- public static final String injar2Name = "input2.jar";
- public static final String outjarName = "/bin/output.jar";
-
- private TestMessageHandler handler;
- private TestCompilerConfiguration compilerConfig;
-
- private String[] config1 = new String[] { "src" + File.separator + "Main.java",
- "src" + File.separator + "testsrc" + File.separator + "TestProperties.java" };
-
- private String[] config2 = new String[] { "src" + File.separator + "aspects" + File.separator + "Logging.java" };
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- initialiseProject(PROJECT_DIR);
- handler = (TestMessageHandler) getCompiler().getMessageHandler();
- compilerConfig = (TestCompilerConfiguration) getCompiler().getCompilerConfiguration();
- }
-
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- handler = null;
- compilerConfig = null;
- }
-
- public void testSrcToBin() {
- assertTrue("Expected there to be no compiler messages but found " + handler.getMessages(), handler.getMessages().isEmpty());
- compilerConfig.setProjectSourceFiles(getSourceFileList(config1));
- doBuild(true);
- compareDirs("src", "bin");
- }
-
- public void testInjarsToOutjar() {
- Set<File> injars = new HashSet<>();
- File injar1 = openFile(injar1Name);
- injars.add(injar1);
- compilerConfig.setInpath(injars);
- File outjar = openFile(outjarName);
- compilerConfig.setOutjar(outjar.getAbsolutePath());
- compilerConfig.setProjectSourceFiles(getSourceFileList(config2));
- doBuild(true);
- assertTrue("Expected no compiler errors or warnings but found " + handler.getMessages(), handler.getMessages().isEmpty());
- compareJars(injar1, "src", outjar);
- }
-
- public void testDuplicateResources() {
- Set<File> injars = new HashSet<>();
- File injar1 = openFile(injar1Name);
- File injar2 = openFile(injar2Name);
- injars.add(injar1);
- injars.add(injar2);
- compilerConfig.setInpath(injars);
- File outjar = openFile(outjarName);
- compilerConfig.setOutjar(outjar.getAbsolutePath());
- compilerConfig.setProjectSourceFiles(getSourceFileList(config2));
- doBuild(true);
- assertFalse("Expected compiler errors or warnings but didn't find any", handler.getMessages().isEmpty());
-
- List<TestMessageHandler.TestMessage> msgs = handler.getMessages();
- String exp = "duplicate resource: ";
- String found = msgs.get(0).getContainedMessage().getMessage();
- assertTrue("Expected message to start with 'duplicate resource:' but found" + " message " + found, found.startsWith(exp));
- compareJars(injar1, "src", outjar);
- }
-
- public void testSrcToOutjar() {
- File outjar = openFile(outjarName);
- compilerConfig.setOutjar(outjar.getAbsolutePath());
- compilerConfig.setProjectSourceFiles(getSourceFileList(config1));
- doBuild(true);
- assertTrue("Expected no compiler errors or warnings but found " + handler.getMessages(), handler.getMessages().isEmpty());
- compareSourceToOutjar("src", outjar);
- }
-
- public void testInjarsToBin() {
- Set<File> injars = new HashSet<>();
- File injar1 = openFile(injar1Name);
- injars.add(injar1);
- compilerConfig.setInpath(injars);
- compilerConfig.setProjectSourceFiles(getSourceFileList(config2));
- doBuild(true);
- assertTrue("Expected no compiler errors or warnings but found " + handler.getMessages(), handler.getMessages().isEmpty());
- compareInjarsToBin(injar1, "src", "bin");
- }
-
- // BAH! keeps whinging about CVS extraneous resources
- // public void testInjarsToOddBin () {
- // Set injars = new HashSet();
- // File injar1 = openFile(injar1Name);
- // injars.add(injar1);
- // ideManager.getProjectProperties().setOutputPath("crazy.jar");
- // ideManager.getProjectProperties().setInJars(injars);
- // assertTrue("Build failed",doSynchronousBuild("config2.lst"));
- // assertTrue("Build warnings",ideManager.getCompilationSourceLineTasks().isEmpty());
- // compareInjarsToBin(injar1,"src","crazy.jar");
- // }
-
- public void testInjarsToOutjarOddNames() {
- Set<File> injars = new HashSet<>();
- File injar1 = openFile("input1");
- File outjar = openFile(outjarName + ".fozout");
- injars.add(injar1);
- compilerConfig.setInpath(injars);
- compilerConfig.setOutjar(outjar.getAbsolutePath());
- compilerConfig.setProjectSourceFiles(getSourceFileList(config2));
- doBuild(true);
- assertTrue("Expected no compiler errors or warnings but found " + handler.getMessages(), handler.getMessages().isEmpty());
- compareJars(injar1, "src", outjar);
- }
-
- /*
- * Ensure bin contains all non-Java resouces from source and injars
- */
- public void compareDirs(String indirName, String outdirName) {
- File binBase = openFile(outdirName);
- File[] toResources = FileUtil.listFiles(binBase, aspectjResourceFileFilter);
-
- HashSet<String> resources = new HashSet<>();
- listSourceResources(indirName, resources);
-
- for (File toResource : toResources) {
- String fileName = FileUtil.normalizedPath(toResource, binBase);
- boolean b = resources.remove(fileName);
- assertTrue("Extraneous resources: " + fileName, b);
- }
-
- assertTrue("Missing resources: " + resources.toString(), resources.isEmpty());
- }
-
- private void listSourceResources(String indirName, Set<String> resources) {
- File srcBase = openFile(indirName);
- File[] fromResources = FileUtil.listFiles(srcBase, aspectjResourceFileFilter);
- for (File fromResource : fromResources) {
- String name = FileUtil.normalizedPath(fromResource, srcBase);
- if (!name.startsWith("CVS/") && (!name.contains("/CVS/")) && !name.endsWith("/CVS")) {
- resources.add(name);
- }
- }
- }
-
- public static final FileFilter aspectjResourceFileFilter = new FileFilter() {
- @Override
- public boolean accept(File pathname) {
- String name = pathname.getName().toLowerCase();
- boolean isCVSRelated = name.contains("/cvs/");
- return (!isCVSRelated && !name.endsWith(".class") && !name.endsWith(".java") && !name.endsWith(".aj"));
- }
- };
-
- /*
- * Ensure -outjar contains all non-Java resouces from injars
- */
- public void compareJars(File injarFile, String indirName, File outjarFile) {
-
- HashSet<String> resources = new HashSet<>();
-
- try {
- assertTrue(
- "outjar older than injar: outjarLastMod=" + outjarFile.lastModified() + " injarLastMod="
- + injarFile.lastModified(), (outjarFile.lastModified() >= injarFile.lastModified()));
- byte[] inManifest = listJarResources(injarFile, resources, true);
- listSourceResources(indirName, resources);
-
- ZipInputStream outjar = new ZipInputStream(new java.io.FileInputStream(outjarFile));
- ZipEntry entry;
- while (null != (entry = outjar.getNextEntry())) {
- String fileName = entry.getName();
- if (!fileName.endsWith(".class")) {
-
- /* Ensure we copied right JAR manifest */
- if (fileName.equalsIgnoreCase("meta-inf/Manifest.mf")) {
- byte[] outManifest = FileUtil.readAsByteArray(outjar);
- assertTrue("Wrong manifest has been copied", Arrays.equals(inManifest, outManifest));
- }
-
- boolean b = resources.remove(fileName);
- assertTrue(fileName, b);
- }
- outjar.closeEntry();
- }
- outjar.close();
- resources.remove("META-INF/");
- assertTrue(resources.toString(), resources.isEmpty());
- } catch (IOException ex) {
- fail(ex.toString());
- }
- }
-
- /*
- * Ensure -outjar conatins all non-Java resouces from source and injars
- */
- public void compareSourceToOutjar(String indirName, File outjarFile) {
- HashSet<String> resources = new HashSet<>();
- listSourceResources(indirName, resources);
-
- try {
-
- ZipInputStream outjar = new JarInputStream(new java.io.FileInputStream(outjarFile));
- ZipEntry entry;
- while (null != (entry = outjar.getNextEntry())) {
- String fileName = entry.getName();
- if (!fileName.endsWith(".class")) {
- boolean b = resources.remove(fileName);
- assertTrue(fileName, b);
- }
- outjar.closeEntry();
- }
- outjar.close();
-
- assertTrue("Missing resources: " + resources.toString(), resources.isEmpty());
- } catch (IOException ex) {
- fail(ex.toString());
- }
- }
-
- /*
- * Ensure bin contains all non-Java resouces from source and injars
- */
- public void compareInjarsToBin(File injarFile, String indirName, String outdirName) {
-
- HashSet<String> resources = new HashSet<>();
-
- try {
- byte[] inManifest = listJarResources(injarFile, resources, false);
- listSourceResources(indirName, resources);
-
- File binBase = openFile(outdirName);
- File[] toResources = FileUtil.listFiles(binBase, aspectjResourceFileFilter);
- for (File toResource : toResources) {
- String fileName = FileUtil.normalizedPath(toResource, binBase);
-
- /* Ensure we copied the right JAR manifest */
- if (fileName.equalsIgnoreCase("meta-inf/Manifest.mf")) {
- byte[] outManifest = FileUtil.readAsByteArray(toResource);
- assertTrue("Wrong manifest has been copied", Arrays.equals(inManifest, outManifest));
- }
- boolean b = resources.remove(fileName);
- assertTrue("Extraneous resources: " + fileName, b);
- }
-
- assertTrue("Missing resources: " + resources.toString(), resources.isEmpty());
- } catch (IOException ex) {
- fail(ex.toString());
- }
- }
-
- /**
- * Look in the specified jar file for resources (anything not .class) and add it the resources Set.
- *
- * @param injarFile jar file to open up
- * @param resources the set where resources should be accumulated
- * @param wantDirectories should any directories found in the jar be included
- * @return the byte data for any discovered manifest
- */
- private byte[] listJarResources(File injarFile, Set<String> resources, boolean wantDirectories) {
- byte[] manifest = null;
-
- try {
- ZipInputStream injar = new ZipInputStream(new java.io.FileInputStream(injarFile));
- ZipEntry entry;
- while (null != (entry = injar.getNextEntry())) {
- String fileName = entry.getName();
- if (entry.isDirectory()) {
- if (wantDirectories) {
- resources.add(fileName);
- }
- } else if (!fileName.endsWith(".class")) {
-
- /* JAR manifests shouldn't be copied */
- if (fileName.equalsIgnoreCase("meta-inf/Manifest.mf")) {
- manifest = FileUtil.readAsByteArray(injar);
- }
- resources.add(fileName);
- }
- injar.closeEntry();
- }
- injar.close();
- } catch (IOException ex) {
- fail(ex.toString());
- }
-
- return manifest;
- }
- }
|