/******************************************************************************* * Copyright (c) 2004 IBM Corporation and others. * 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: * Matthew Webster - initial implementation * Helen Hawkins - Converted to new interface (bug 148190) *******************************************************************************/ package org.aspectj.ajde.core.tests; import java.io.File; import java.io.IOException; import java.util.HashSet; import java.util.Set; import java.util.jar.JarFile; import java.util.jar.Manifest; import org.aspectj.ajde.core.AjdeCoreTestCase; import org.aspectj.ajde.core.TestCompilerConfiguration; import org.aspectj.ajde.core.TestMessageHandler; public class DuplicateManifestTest extends AjdeCoreTestCase { public static final String injarName = "injar.jar"; public static final String aspectjarName = "aspectjar.jar"; public static final String outjarName = "outjar.jar"; private TestMessageHandler handler; private TestCompilerConfiguration compilerConfig; protected void setUp() throws Exception { super.setUp(); initialiseProject("DuplicateManifestTest"); handler = (TestMessageHandler) getCompiler().getMessageHandler(); compilerConfig = (TestCompilerConfiguration) getCompiler() .getCompilerConfiguration(); } protected void tearDown() throws Exception { super.tearDown(); handler = null; compilerConfig = null; } public void testWeave() { Set injars = new HashSet<>(); injars.add(openFile(injarName)); compilerConfig.setInpath(injars); Set aspectpath = new HashSet<>(); aspectpath.add(openFile(aspectjarName)); compilerConfig.setAspectPath(aspectpath); File outjar = openFile(outjarName); compilerConfig.setOutjar(outjar.getAbsolutePath()); doBuild(true); assertTrue("Expected no compiler errors or warnings but found " + handler.getMessages(), handler.getMessages().isEmpty()); compareManifests(openFile(injarName), openFile(outjarName)); } private void compareManifests(File inFile, File outFile) { try { JarFile inJar = new JarFile(inFile); Manifest inManifest = inJar.getManifest(); inJar.close(); JarFile outJar = new JarFile(outFile); Manifest outManifest = outJar.getManifest(); outJar.close(); assertTrue("The manifests in '" + inFile.getCanonicalPath() + "' and '" + outFile.getCanonicalPath() + "' sould be the same", inManifest.equals(outManifest)); } catch (IOException ex) { fail(ex.toString()); } } }