package org.codehaus.mojo.aspectj; /** * The MIT License * * Copyright 2005-2006 The Codehaus. * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is furnished to do * so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ import java.io.File; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import junit.framework.TestCase; import org.apache.maven.model.Model; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; /** * Tests class {@link org.codehaus.mojo.aspectj.AbstractAjcCompiler} * * @author <a href="mailto:tel@objectnet.no">Thor Age Eldby</a> */ public class AbstractAjcCompilerTest extends TestCase { /** Compiler mojo instance */ private AjcTestCompileMojo ajcCompMojo; /** * @inheritDoc */ protected void setUp() throws Exception { super.setUp(); ajcCompMojo = new AjcTestCompileMojo(); MavenProject project = new MavenProject( new Model() ); ajcCompMojo.project = project; project.setDependencyArtifacts( new HashSet() ); } /** * Verifies that if not stated no -inpath argument should be found in the ajc arguments * {@link AbstractAjcCompiler#execute()} * * @throws Exception */ public void testGetAjcArguments_noWeaveArtifacts() throws Exception { ajcCompMojo.assembleArguments(); List args = ajcCompMojo.ajcOptions; assertFalse( args.contains( "-inpath" ) ); } /** * Tests that the compiler fails as it should if told to weave an artifact not listed in the project dependencies. * * @throws Exception */ public void testGetAjcArguments_weaveArtifactsNotProjectDependecy() throws Exception { Module module1 = new Module(); String mod1Group = "dill.group"; module1.setGroupId( mod1Group ); String mod1Artifact = "dall.artifact"; module1.setArtifactId( mod1Artifact ); try { ajcCompMojo.weaveDependencies = new Module[1]; ajcCompMojo.weaveDependencies[0] = module1; ajcCompMojo.assembleArguments(); fail( "Should fail quite miserably" ); } catch ( MojoExecutionException e ) { // good thing } } /** * Tests if modules told to weave that are found in the project dependencies actually are found in the .inpath ajc * argument,. * * @throws Exception */ public void testGetAjcArguments_weaveArtifacts() throws Exception { ajcCompMojo.weaveDependencies = new Module[2]; Module module1 = new Module(); String mod1Group = "dill.group"; module1.setGroupId( mod1Group ); String mod1Artifact = "dall.artifact"; module1.setArtifactId( mod1Artifact ); ajcCompMojo.weaveDependencies[0] = module1; Module module2 = new Module(); String mod2Group = "foooup"; module2.setGroupId( mod2Group ); String mod2Artifact = "bartifact"; module2.setArtifactId( mod2Artifact ); ajcCompMojo.weaveDependencies[1] = module2; // Modify project to include depencies Set artifacts = new HashSet(); artifacts.add( new MockArtifact( mod1Group, mod1Artifact ) ); artifacts.add( new MockArtifact( mod2Group, mod2Artifact ) ); ajcCompMojo.project.setArtifacts( artifacts ); ajcCompMojo.assembleArguments(); List args = ajcCompMojo.ajcOptions; assertTrue( args.contains( "-inpath" ) ); Iterator it = args.iterator(); while ( !it.next().equals( "-inpath" ) ) { // don't do nothing } String weavePath = (String) it.next(); assertTrue( weavePath.indexOf( File.pathSeparator ) != -1 ); assertTrue( weavePath.indexOf( mod1Artifact ) != -1 ); assertTrue( weavePath.indexOf( mod2Artifact ) != -1 ); } /** * Tests if modules told to weave that are found in the project dependencies actually are found in the .inpath ajc * argument, considering classifiers. * * @throws Exception */ public void testGetAjcArguments_weaveArtifactsWithClassifier() throws Exception { ajcCompMojo.weaveDependencies = new Module[1]; Module module1 = new Module(); String mod1Group = "dill.group"; module1.setGroupId( mod1Group ); String mod1Artifact = "dall.artifact"; module1.setArtifactId( mod1Artifact ); String mod1classifier = "dev"; module1.setClassifier( mod1classifier ); ajcCompMojo.weaveDependencies[0] = module1; String mod2classifier = "stable"; // Modify project to include dependencies Set artifacts = new HashSet(); artifacts.add( new MockArtifact( mod1Group, mod1Artifact, mod1classifier, "jar" ) ); artifacts.add( new MockArtifact( mod1Group, mod1Artifact, mod2classifier, "jar" ) ); ajcCompMojo.project.setArtifacts( artifacts ); ajcCompMojo.assembleArguments(); List args = ajcCompMojo.ajcOptions; assertTrue( args.contains( "-inpath" ) ); Iterator it = args.iterator(); while ( !it.next().equals( "-inpath" ) ) { // don't do nothing } String weavePath = (String) it.next(); assertTrue( weavePath.indexOf( mod1Artifact ) != -1 ); assertTrue( weavePath.indexOf( mod1classifier ) != -1 ); assertFalse( weavePath.indexOf( mod2classifier ) != -1 ); } /** * Tests if modules told to weave that are found in the project dependencies actually are found in the .inpath ajc * argument, considering type. * * @throws Exception */ public void testGetAjcArguments_weaveArtifactsWithType() throws Exception { ajcCompMojo.weaveDependencies = new Module[1]; Module module1 = new Module(); String mod1Group = "dill.group"; module1.setGroupId( mod1Group ); String mod1Artifact = "dall.artifact"; module1.setArtifactId( mod1Artifact ); String mod1type = "foo"; module1.setType( mod1type ); ajcCompMojo.weaveDependencies[0] = module1; String mod2type = "bar"; // Modify project to include dependencies Set artifacts = new LinkedHashSet(); artifacts.add( new MockArtifact( mod1Group, mod1Artifact, null, mod1type ) ); artifacts.add( new MockArtifact( mod1Group, mod1Artifact, null, mod2type ) ); ajcCompMojo.project.setArtifacts( artifacts ); ajcCompMojo.assembleArguments(); List args = ajcCompMojo.ajcOptions; assertTrue( args.contains( "-inpath" ) ); Iterator it = args.iterator(); while ( !it.next().equals( "-inpath" ) ) { // don't do nothing } String weavePath = (String) it.next(); assertTrue( weavePath.indexOf( mod1Artifact ) != -1 ); assertTrue( weavePath.indexOf( "." + mod1type ) != -1 ); assertFalse( weavePath.indexOf( mod2type ) != -1 ); } /** * Verifies that if not stated no -aspectpath argument should be found in the ajc arguments * {@link AbstractAjcCompiler#execute()} * * @throws Exception */ public void testGetAjcArguments_noLibraryArtifacts() throws Exception { ajcCompMojo.assembleArguments(); List args = ajcCompMojo.ajcOptions; assertFalse( args.contains( "-aspectpath" ) ); } /** * Tests that the compiler fails as it should if told to weave an library artifact not listed in the project * dependencies. * * @throws Exception */ public void testGetAjcArguments_libraryArtifactsNotProjectDependecy() { Module module1 = new Module(); String mod1Group = "dill.group"; module1.setGroupId( mod1Group ); String mod1Artifact = "dall.artifact"; module1.setArtifactId( mod1Artifact ); try { ajcCompMojo.aspectLibraries = new Module[1]; ajcCompMojo.aspectLibraries[0] = module1; ajcCompMojo.assembleArguments(); fail( "Should fail quite miserably" ); } catch ( MojoExecutionException e ) { // good thing } } /** * Tests if modules told to weave that are found in the project dependencies actually are found in the .inpath ajc * argument,. * * @throws Exception */ public void testGetAjc_libraryArtifacts() throws Exception { ajcCompMojo.aspectLibraries = new Module[2]; Module module1 = new Module(); String mod1Group = "dill.group"; module1.setGroupId( mod1Group ); String mod1Artifact = "dall.artifact"; module1.setArtifactId( mod1Artifact ); ajcCompMojo.aspectLibraries[0] = module1; Module module2 = new Module(); String mod2Group = "foooup"; module2.setGroupId( mod2Group ); String mod2Artifact = "bartifact"; module2.setArtifactId( mod2Artifact ); ajcCompMojo.aspectLibraries[1] = module2; // Modify project to include depencies Set artifacts = new HashSet(); artifacts.add( new MockArtifact( mod1Group, mod1Artifact ) ); artifacts.add( new MockArtifact( mod2Group, mod2Artifact ) ); ajcCompMojo.project.setArtifacts( artifacts ); ajcCompMojo.assembleArguments(); List args = ajcCompMojo.ajcOptions; assertTrue( args.contains( "-aspectpath" ) ); Iterator it = args.iterator(); while ( !it.next().equals( "-aspectpath" ) ) { // don't do nothing } String weavePath = (String) it.next(); assertTrue( weavePath.indexOf( File.pathSeparator ) != -1 ); assertTrue( weavePath.indexOf( mod1Artifact ) != -1 ); assertTrue( weavePath.indexOf( mod2Artifact ) != -1 ); } }