You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@creadur.apache.org by po...@apache.org on 2014/08/11 23:40:26 UTC

svn commit: r1617370 - in /creadur/rat/trunk: ./ apache-rat-plugin/ apache-rat-plugin/src/main/java/org/apache/rat/mp/ apache-rat-plugin/src/test/java/org/apache/rat/mp/

Author: pottlinger
Date: Mon Aug 11 21:40:26 2014
New Revision: 1617370

URL: http://svn.apache.org/r1617370
Log:
Refactoring mojo tests.

-Replaced the way the MavenProject injected to a non-deprecated way (to get rid of the warning during the build).
-Updated mavenInvokerPluginVersion and extracted it as a pom-property.
-Extracted some RAT mojo integration test methods into a separate RatTestHelpers in order to find integration tests more easily after RAT-168 and the NPE when trying to forge 0.11.


Added:
    creadur/rat/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatTestHelpers.java
Modified:
    creadur/rat/trunk/apache-rat-plugin/pom.xml
    creadur/rat/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
    creadur/rat/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
    creadur/rat/trunk/pom.xml

Modified: creadur/rat/trunk/apache-rat-plugin/pom.xml
URL: http://svn.apache.org/viewvc/creadur/rat/trunk/apache-rat-plugin/pom.xml?rev=1617370&r1=1617369&r2=1617370&view=diff
==============================================================================
--- creadur/rat/trunk/apache-rat-plugin/pom.xml (original)
+++ creadur/rat/trunk/apache-rat-plugin/pom.xml Mon Aug 11 21:40:26 2014
@@ -91,6 +91,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-invoker-plugin</artifactId>
+        <version>${mavenInvokerPluginVersion}</version>
         <configuration>
           <projectsDirectory>src/test/invoker</projectsDirectory>
           <cloneProjectsTo>${project.build.directory}/invoker</cloneProjectsTo>

Modified: creadur/rat/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
URL: http://svn.apache.org/viewvc/creadur/rat/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java?rev=1617370&r1=1617369&r2=1617370&view=diff
==============================================================================
--- creadur/rat/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java (original)
+++ creadur/rat/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java Mon Aug 11 21:40:26 2014
@@ -198,9 +198,9 @@ public abstract class AbstractRatMojo ex
 	private boolean excludeSubProjects;
 
 	/**
-        * Holds the maven-internal project to allow resolution of artifact properties during mojo runs. 
-        */
-	@Component
+    * Holds the maven-internal project to allow resolution of artifact properties during mojo runs. 
+    */
+	@Parameter(property = "project", required = true, readonly = true)
 	private MavenProject project;
 
 	/**

Modified: creadur/rat/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
URL: http://svn.apache.org/viewvc/creadur/rat/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java?rev=1617370&r1=1617369&r2=1617370&view=diff
==============================================================================
--- creadur/rat/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java (original)
+++ creadur/rat/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java Mon Aug 11 21:40:26 2014
@@ -17,386 +17,187 @@ package org.apache.rat.mp;
  * limitations under the License.
  */
 
+import static org.apache.rat.mp.RatTestHelpers.ensureRatReportIsCorrect;
+import static org.apache.rat.mp.RatTestHelpers.getSourceDirectory;
+import static org.apache.rat.mp.RatTestHelpers.newArtifactFactory;
+import static org.apache.rat.mp.RatTestHelpers.newArtifactRepository;
+import static org.apache.rat.mp.RatTestHelpers.newArtifactResolver;
+import static org.apache.rat.mp.RatTestHelpers.newSiteRenderer;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.factory.DefaultArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.DefaultArtifactRepository;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.artifact.resolver.DefaultArtifactResolver;
-import org.apache.maven.doxia.siterenderer.Renderer;
+
 import org.apache.maven.model.Build;
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
-import org.apache.maven.settings.Settings;
-import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
-import org.apache.rat.mp.AbstractRatMojo;
-import org.apache.rat.mp.RatCheckException;
-import org.apache.rat.mp.RatCheckMojo;
-import org.apache.rat.mp.RatReportMojo;
-import org.codehaus.plexus.util.DirectoryScanner;
-
 
 /**
- * Test case for the {@link RatCheckMojo}.
+ * Test case for the {@link RatCheckMojo} and {@link RatReportMojo}.
  */
-public class RatCheckMojoTest extends AbstractMojoTestCase
-{
-    /**
-     * Creates a new instance of {@link Renderer}.
-     * @return A configured instance of {@link DefaultRenderer}.
-     * @throws Exception Creating the object failed.
-     */
-    private Renderer newSiteRenderer()
-            throws Exception
-    {
-        return (Renderer) container.lookup( Renderer.ROLE, "default" );
-    }
-
-    /**
-     * Creates a new instance of {@link ArtifactFactory}.
-     * @return A configured instance of {@link DefaultArtifactFactory}.
-     * @throws Exception Creating the object failed.
-     */
-    private ArtifactFactory newArtifactFactory()
-            throws Exception
-    {
-        final InvocationHandler handler = new InvocationHandler(){
-            public Object invoke( Object pProxy, Method pMethod, Object[] pArgs )
-                throws Throwable
-            {
-                System.out.println("Invoking method " + pMethod);
-                throw new IllegalStateException( "Not implemented" );
-            }
-        };
-        return (ArtifactFactory)
-            Proxy.newProxyInstance( Thread.currentThread().getContextClassLoader(),
-                                    new Class[]{ ArtifactFactory.class },
-                                    handler );
-    }
-
-    /**
-     * Creates a new instance of {@link ArtifactResolver}.
-     * @return A configured instance of {@link DefaultArtifactResolver}.
-     * @throws Exception Creating the object failed.
-     */
-    private ArtifactResolver newArtifactResolver()
-            throws Exception
-    {
-        final InvocationHandler handler = new InvocationHandler(){
-            public Object invoke( Object pProxy, Method pMethod, Object[] pArgs )
-                throws Throwable
-            {
-                System.out.println("Invoking method " + pMethod);
-                throw new IllegalStateException( "Not implemented" );
-            }
-        };
-        return (ArtifactResolver)
-            Proxy.newProxyInstance( Thread.currentThread().getContextClassLoader(),
-                                    new Class[]{ ArtifactResolver.class },
-                                    handler );
-    }
-
-    /**
-     * Creates an instance of {@link ArtifactRepository}.
-     * @return A configured instance of {@link DefaultArtifactRepository}.
-     * @throws Exception Creating the object failed.
-     */
-    private ArtifactRepository newArtifactRepository()
-            throws Exception
-    {
-        File m2Dir = new File( System.getProperty( "user.home" ), ".m2" );
-        File settingsFile = new File( m2Dir, "settings.xml" );
-        String localRepo = null;
-        if ( settingsFile.exists() )
-        {
-            Settings settings = new SettingsXpp3Reader().read( new FileReader( settingsFile ) );
-            localRepo = settings.getLocalRepository();
-        }
-        if ( localRepo == null )
-        {
-            localRepo = System.getProperty( "user.home" ) + "/.m2/repository";
-        }
-        ArtifactRepositoryLayout repositoryLayout =
-            (ArtifactRepositoryLayout) container.lookup(ArtifactRepositoryLayout.ROLE, "default" );
-        return new DefaultArtifactRepository( "local", "file://" + localRepo, repositoryLayout );
-    }
-
-    /**
-     * Creates a new instance of {@link RatCheckMojo}.
-     * @param pDir The directory, where to look for a pom.xml file.
-     * @return The configured Mojo.
-     * @throws Exception An error occurred while creating the Mojo.
-     */
-    private RatCheckMojo newRatCheckMojo( String pDir )
-            throws Exception
-    {
-        return (RatCheckMojo) newRatMojo( pDir, "check", false );
-    }
-
-    /**
-     * Creates a new instance of {@link AbstractRatMojo}.
-     * @param pDir The directory, where to look for a pom.xml file.
-     * @param pGoal The goal, which the Mojo must implement.
-     * @return The configured Mojo.
-     * @throws Exception An error occurred while creating the Mojo.
-     */
-    private AbstractRatMojo newRatMojo( String pDir, String pGoal, boolean pCreateCopy )
-            throws Exception
-    {
-        final File baseDir = new File( getBasedir() );
-        final File testBaseDir = getSourceDirectory(pDir, pCreateCopy, baseDir);
-        File testPom = new File( testBaseDir, "pom.xml" );
-        AbstractRatMojo mojo = (AbstractRatMojo) lookupMojo( pGoal, testPom );
-        assertNotNull( mojo );
-        final File buildDirectory = new File( new File( baseDir, "target/test" ), pDir );
-        setVariableValueToObject( mojo, "basedir", testBaseDir );
-        setVariableValueToObject( mojo, "addDefaultLicenseMatchers", Boolean.TRUE );
-        setVariableValueToObject( mojo, "useDefaultExcludes", Boolean.TRUE );
-        setVariableValueToObject( mojo, "useMavenDefaultExcludes", Boolean.TRUE );
-        setVariableValueToObject( mojo, "useEclipseDefaultExcludes", Boolean.TRUE );
-        setVariableValueToObject( mojo, "addLicenseHeaders", "false" );
-        final Build build = new Build();
-        build.setDirectory( buildDirectory.getPath() );
-        final MavenProjectStub project = new MavenProjectStub(){
-            @Override
-            public Build getBuild()
-            {
-                return build;
-            }
-        };
-        setVariableValueToObject( mojo, "project", project );
-        assertNotNull("Problem in test setup - you are missing a project in your mojo.", project);
-        assertNotNull("The mojo is missing its MavenProject, which will result in an NPE during rat runs.", mojo.getProject());
-        assertNotNull("No artifactRepos found, which will result in an NPE during rat runs.", project.getRemoteArtifactRepositories());
-        if (mojo instanceof RatReportMojo)
-        {
-            setVariableValueToObject( mojo, "localRepository", newArtifactRepository() );
-            setVariableValueToObject( mojo, "resolver", newArtifactResolver() );
-            setVariableValueToObject( mojo, "factory", newArtifactFactory() );
-            setVariableValueToObject( mojo, "siteRenderer", newSiteRenderer() );
-        }
-        else if ( mojo instanceof RatCheckMojo )
-        {
-            final File ratTxtFile = new File( buildDirectory, "rat.txt" );
-            setVariableValueToObject( mojo, "reportFile", ratTxtFile );
-        }
-        return mojo;
-    }
-
-    private File getSourceDirectory(String pDir, boolean pCreateCopy,
-            final File baseDir) throws IOException {
-        return makeSourceDirectory( new File( new File( baseDir, "src/test" ), pDir ), pDir, pCreateCopy );
-    }
-
-    private void remove( File pDir ) throws IOException {
-        if ( pDir.isFile() )
-        {
-            if ( ! pDir.delete() )
-            {
-                throw new IOException( "Unable to delete file: " + pDir );
-            }
-        }
-        else if ( pDir.isDirectory() )
-        {
-            final File[] files = pDir.listFiles();
-            for (File file : files) {
-                remove(file);
-            }
-            if ( ! pDir.delete() )
-            {
-                throw new IOException( "Unable to delete directory: " + pDir );
-            }
-        }
-        else if ( pDir.exists() )
-        {
-            throw new IOException( "Unable to delete unknown object " + pDir );
-        }
-    }
-
-    private void copy( File pSource, File pTarget ) throws IOException
-    {
-        if ( pSource.isDirectory() )
-        {
-            if ( !pTarget.isDirectory()  &&  !pTarget.mkdirs() ) {
-                throw new IOException("Unable to create directory: " + pTarget);
-            }
-            final DirectoryScanner scanner = new DirectoryScanner();
-            scanner.setBasedir(pSource);
-            scanner.addDefaultExcludes();
-            scanner.setIncludes(new String[]{"*"});
-            scanner.scan();
-            final String[] dirs = scanner.getIncludedDirectories();
-
-            for (final String dir : dirs) {
-                if (!"".equals(dir)) {
-                    copy(new File(pSource, dir), new File(pTarget, dir));
-                }
-            }
-            final String[] files = scanner.getIncludedFiles();
-            for (String file : files) {
-                copy(new File(pSource, file), new File(pTarget, file));
-            }
-        }
-        else if ( pSource.isFile() )
-        {
-            final FileInputStream fis = new FileInputStream( pSource );
-            final FileOutputStream fos = new FileOutputStream( pTarget );
-            final byte[] buffer = new byte[8192];
-            for ( ;; )
-            {
-                int res = fis.read(buffer);
-                if (res == -1) {
-                    break;
-                }
-                if (res > 0) {
-                    fos.write(buffer, 0, res);
-                }
-            }
-            fos.close();
-            fis.close();
-        }
-        else
-        {
-            throw new IOException( "Unable to copy unknown object " + pSource );
-        }
-    }
-    
-    private File makeSourceDirectory(File pFile, String pDir, boolean pCreateCopy) throws IOException {
-        if ( ! pCreateCopy )
-        {
-            return pFile;
-        }
-
-        final File baseDir = new File( getBasedir() );
-        final File targetDir = new File( new File( baseDir, "target/it-source" ), pDir );
-        remove( targetDir );
-        copy( pFile, targetDir );
-        return targetDir;
-    }
-
-    /**
-     * Reads the location of the rat text file from the Mojo.
-     * @param pMojo The configured Mojo.
-     * @return Value of the "reportFile" property.
-     * @throws Exception An error occurred while reading the property.
-     */
-    private File getRatTxtFile( RatCheckMojo pMojo )
-            throws Exception
-    {
-        return (File) getVariableValueFromObject( pMojo, "reportFile" );
-    }
-
-    /**
-     * Runs a check, which should expose no problems.
-     * @throws Exception The test failed.
-     */
-    public void testIt1() throws Exception {
-        final RatCheckMojo mojo = newRatCheckMojo( "it1" );
-        final File ratTxtFile = getRatTxtFile(mojo);
-        mojo.execute();
-        checkResult( ratTxtFile, 1, 0 );
-    }
-
-    /**
-     * Reads the created report file and verifies, whether the detected numbers
-     * are matching.
-     * @param pRatTxtFile The file to read.
-     * @param pNumALFiles The number of files with AL.
-     * @param pNumNoLicenseFiles The number of files without license.
-     * @throws IOException An error occurred while reading the file.
-     */
-    private void checkResult( File pRatTxtFile, int pNumALFiles, int pNumNoLicenseFiles )
-            throws IOException
-    {
-        assertTrue( pRatTxtFile.exists() );
-        BufferedReader reader = new BufferedReader( new FileReader( pRatTxtFile ) );
-        Integer numALFiles = null;
-        Integer numNoLicenseFiles = null;
-        for (;;)
-        {
-            String line = reader.readLine();
-            if ( line == null )
-            {
-                break;
-            }
-            int offset = line.indexOf( "Apache Licensed: " );
-            if ( offset >= 0 )
-            {
-                numALFiles = new Integer( line.substring( offset + "Apache Licensed: ".length() ).trim() );
-            }
-            offset = line.indexOf( "Unknown Licenses" );
-            if ( offset >= 0 )
-            {
-                numNoLicenseFiles = new Integer( line.substring( 0, offset ).trim() );
-            }
-        }
-        reader.close();
-        assertEquals( new Integer( pNumALFiles), numALFiles );
-        assertEquals( new Integer( pNumNoLicenseFiles ), numNoLicenseFiles );
-    }
-
-    /**
-     * Runs a check, which should detect a problem.
-     * @throws Exception The test failed.
-     */
-    public void testIt2() throws Exception {
-        final RatCheckMojo mojo = newRatCheckMojo( "it2" );
-        final File ratTxtFile = getRatTxtFile(mojo);
-        try
-        {
-            mojo.execute();
-            fail( "Expected RatCheckException" );
-        }
-        catch ( RatCheckException e )
-        {
-            final String msg = e.getMessage();
-            final String REPORTFILE = "rat.txt"; // Default: defaultValue = "${project.build.directory}/rat.txt"
-            assertTrue("report filename was not contained in '" + msg +"'", msg.contains(REPORTFILE));
-            assertFalse("no null allowed in '" + msg +"'", (msg.toUpperCase().indexOf("NULL") > -1));
-        }
-        checkResult( ratTxtFile, 1, 1 );
-    }
-
-    private String getFirstLine(File pFile) throws IOException {
-        final FileInputStream fis = new FileInputStream(pFile);
-        final InputStreamReader reader = new InputStreamReader(fis, "UTF8");
-        final BufferedReader breader = new BufferedReader(reader);
-        final String result = breader.readLine();
-        breader.close();
-        return result;
-    }
-    
-    /**
-     * Tests adding license headers.
-     */
-    public void testIt3() throws Exception {
-        final RatCheckMojo mojo = (RatCheckMojo) newRatMojo( "it3", "check", true );
-        setVariableValueToObject( mojo, "addLicenseHeaders", "true" );
-        setVariableValueToObject( mojo, "numUnapprovedLicenses", Integer.valueOf(1));
-        mojo.execute();
-        final File ratTxtFile = getRatTxtFile( mojo );
-        checkResult( ratTxtFile, 1, 1 );
-
-        final File baseDir = new File( getBasedir() );
-        final File sourcesDir = new File( new File( baseDir, "target/it-source" ), "it3" );
-        final String firstLineOrig = getFirstLine(new File(sourcesDir, "src.apt"));
-        assertTrue(firstLineOrig.indexOf("--") != -1);
-        assertTrue(firstLineOrig.indexOf("~~") == -1);
-        final String firstLineModified = getFirstLine(new File(sourcesDir, "src.apt.new"));
-        assertTrue(firstLineModified.indexOf("--") == -1);
-        assertTrue(firstLineModified.indexOf("~~") != -1);
-    }
+public class RatCheckMojoTest extends AbstractMojoTestCase {
+
+	/**
+	 * Creates a new instance of {@link RatCheckMojo}.
+	 * 
+	 * @param pDir
+	 *            The directory, where to look for a pom.xml file.
+	 * @return The configured Mojo.
+	 * @throws Exception
+	 *             An error occurred while creating the Mojo.
+	 */
+	private RatCheckMojo newRatCheckMojo(String pDir) throws Exception {
+		return (RatCheckMojo) newRatMojo(pDir, "check", false);
+	}
+
+	/**
+	 * Creates a new instance of {@link AbstractRatMojo}.
+	 * 
+	 * @param pDir
+	 *            The directory, where to look for a pom.xml file.
+	 * @param pGoal
+	 *            The goal, which the Mojo must implement.
+	 * @return The configured Mojo.
+	 * @throws Exception
+	 *             An error occurred while creating the Mojo.
+	 */
+	private AbstractRatMojo newRatMojo(String pDir, String pGoal,
+			boolean pCreateCopy) throws Exception {
+		final File baseDir = new File(getBasedir());
+		final File testBaseDir = getSourceDirectory(getBasedir(), pDir,
+				pCreateCopy, baseDir);
+		File testPom = new File(testBaseDir, "pom.xml");
+		AbstractRatMojo mojo = (AbstractRatMojo) lookupMojo(pGoal, testPom);
+		assertNotNull(mojo);
+		final File buildDirectory = new File(new File(baseDir, "target/test"),
+				pDir);
+		setVariableValueToObject(mojo, "basedir", testBaseDir);
+		setVariableValueToObject(mojo, "addDefaultLicenseMatchers",
+				Boolean.TRUE);
+		setVariableValueToObject(mojo, "useDefaultExcludes", Boolean.TRUE);
+		setVariableValueToObject(mojo, "useMavenDefaultExcludes", Boolean.TRUE);
+		setVariableValueToObject(mojo, "useEclipseDefaultExcludes",
+				Boolean.TRUE);
+		setVariableValueToObject(mojo, "addLicenseHeaders", "false");
+		final Build build = new Build();
+		build.setDirectory(buildDirectory.getPath());
+		final MavenProjectStub project = new MavenProjectStub() {
+			@Override
+			public Build getBuild() {
+				return build;
+			}
+		};
+		setVariableValueToObject(mojo, "project", project);
+		assertNotNull(
+				"Problem in test setup - you are missing a project in your mojo.",
+				project);
+		assertNotNull(
+				"The mojo is missing its MavenProject, which will result in an NPE during rat runs.",
+				mojo.getProject());
+		assertNotNull(
+				"No artifactRepos found, which will result in an NPE during rat runs.",
+				project.getRemoteArtifactRepositories());
+		
+		if (mojo instanceof RatReportMojo) {
+			setVariableValueToObject(mojo, "localRepository",
+					newArtifactRepository(container));
+			setVariableValueToObject(mojo, "resolver", newArtifactResolver());
+			setVariableValueToObject(mojo, "factory", newArtifactFactory());
+			setVariableValueToObject(mojo, "siteRenderer",
+					newSiteRenderer(container));
+		} else if (mojo instanceof RatCheckMojo) {
+			final File ratTxtFile = new File(buildDirectory, "rat.txt");
+			setVariableValueToObject(mojo, "reportFile", ratTxtFile);
+		}
+		return mojo;
+	}
+	
+	/**
+	 * Reads the location of the rat text file from the Mojo.
+	 * 
+	 * @param pMojo
+	 *            The configured Mojo.
+	 * @return Value of the "reportFile" property.
+	 * @throws Exception
+	 *             An error occurred while reading the property.
+	 */
+	private File getRatTxtFile(RatCheckMojo pMojo) throws Exception {
+		return (File) getVariableValueFromObject(pMojo, "reportFile");
+	}
+
+	/**
+	 * Runs a check, which should expose no problems.
+	 * 
+	 * @throws Exception
+	 *             The test failed.
+	 */
+	public void testIt1() throws Exception {
+		final RatCheckMojo mojo = newRatCheckMojo("it1");
+		final File ratTxtFile = getRatTxtFile(mojo);
+		mojo.execute();
+		ensureRatReportIsCorrect(ratTxtFile, 1, 0);
+	}
+
+	/**
+	 * Runs a check, which should detect a problem.
+	 * 
+	 * @throws Exception
+	 *             The test failed.
+	 */
+	public void testIt2() throws Exception {
+		final RatCheckMojo mojo = newRatCheckMojo("it2");
+		final File ratTxtFile = getRatTxtFile(mojo);
+		try {
+			mojo.execute();
+			fail("Expected RatCheckException");
+		} catch (RatCheckException e) {
+			final String msg = e.getMessage();
+			// default value is "${project.build.directory}/rat.txt"
+			final String REPORTFILE = "rat.txt";
+			
+			assertTrue("report filename was not contained in '" + msg + "'",
+					msg.contains(REPORTFILE));
+			assertFalse("no null allowed in '" + msg + "'", (msg.toUpperCase()
+					.indexOf("NULL") > -1));
+		}
+		ensureRatReportIsCorrect(ratTxtFile, 1, 1);
+	}
+
+	private String getFirstLine(File pFile) throws IOException {
+		final FileInputStream fis = new FileInputStream(pFile);
+		final InputStreamReader reader = new InputStreamReader(fis, "UTF8");
+		final BufferedReader breader = new BufferedReader(reader);
+		final String result = breader.readLine();
+		breader.close();
+		return result;
+	}
+
+	/**
+	 * Tests adding license headers.
+	 */
+	public void testIt3() throws Exception {
+		final RatCheckMojo mojo = (RatCheckMojo) newRatMojo("it3", "check",
+				true);
+		setVariableValueToObject(mojo, "addLicenseHeaders", "true");
+		setVariableValueToObject(mojo, "numUnapprovedLicenses",
+				Integer.valueOf(1));
+		mojo.execute();
+		final File ratTxtFile = getRatTxtFile(mojo);
+		ensureRatReportIsCorrect(ratTxtFile, 1, 1);
+
+		final File baseDir = new File(getBasedir());
+		final File sourcesDir = new File(new File(baseDir, "target/it-source"),
+				"it3");
+		final String firstLineOrig = getFirstLine(new File(sourcesDir,
+				"src.apt"));
+		assertTrue(firstLineOrig.indexOf("--") != -1);
+		assertTrue(firstLineOrig.indexOf("~~") == -1);
+		final String firstLineModified = getFirstLine(new File(sourcesDir,
+				"src.apt.new"));
+		assertTrue(firstLineModified.indexOf("--") == -1);
+		assertTrue(firstLineModified.indexOf("~~") != -1);
+	}
 
 }

Added: creadur/rat/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatTestHelpers.java
URL: http://svn.apache.org/viewvc/creadur/rat/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatTestHelpers.java?rev=1617370&view=auto
==============================================================================
--- creadur/rat/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatTestHelpers.java (added)
+++ creadur/rat/trunk/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatTestHelpers.java Mon Aug 11 21:40:26 2014
@@ -0,0 +1,282 @@
+package org.apache.rat.mp;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.factory.DefaultArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.DefaultArtifactResolver;
+import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.util.DirectoryScanner;
+
+/**
+ * Test helpers used when verifying mojo interaction in RAT integration tests.
+ */
+public final class RatTestHelpers {
+
+	/**
+	 * @param pDir
+	 *            Removes the given directory recursively.
+	 * @throws IOException
+	 *             in case of errors.
+	 */
+	public static void remove(File pDir) throws IOException {
+		if (pDir.isFile()) {
+			if (!pDir.delete()) {
+				throw new IOException("Unable to delete file: " + pDir);
+			}
+		} else if (pDir.isDirectory()) {
+			final File[] files = pDir.listFiles();
+			for (File file : files) {
+				remove(file);
+			}
+			if (!pDir.delete()) {
+				throw new IOException("Unable to delete directory: " + pDir);
+			}
+		} else if (pDir.exists()) {
+			throw new IOException("Unable to delete unknown object " + pDir);
+		}
+	}
+
+	/**
+	 * Copies the given files recursively in order to get all integration test
+	 * files into a target director.
+	 * 
+	 * @param pSource
+	 *            source files.
+	 * @param pTarget
+	 *            target directory
+	 * @throws IOException
+	 *             in case of errors.
+	 */
+	public static void copy(File pSource, File pTarget) throws IOException {
+		if (pSource.isDirectory()) {
+			if (!pTarget.isDirectory() && !pTarget.mkdirs()) {
+				throw new IOException("Unable to create directory: " + pTarget);
+			}
+			final DirectoryScanner scanner = new DirectoryScanner();
+			scanner.setBasedir(pSource);
+			scanner.addDefaultExcludes();
+			scanner.setIncludes(new String[] { "*" });
+			scanner.scan();
+			final String[] dirs = scanner.getIncludedDirectories();
+
+			for (final String dir : dirs) {
+				if (!"".equals(dir)) {
+					copy(new File(pSource, dir), new File(pTarget, dir));
+				}
+			}
+			final String[] files = scanner.getIncludedFiles();
+			for (String file : files) {
+				copy(new File(pSource, file), new File(pTarget, file));
+			}
+		} else if (pSource.isFile()) {
+			final FileInputStream fis = new FileInputStream(pSource);
+			final FileOutputStream fos = new FileOutputStream(pTarget);
+			final byte[] buffer = new byte[8192];
+			for (;;) {
+				int res = fis.read(buffer);
+				if (res == -1) {
+					break;
+				}
+				if (res > 0) {
+					fos.write(buffer, 0, res);
+				}
+			}
+			fos.close();
+			fis.close();
+		} else {
+			throw new IOException("Unable to copy unknown object " + pSource);
+		}
+	}
+
+	/**
+	 * Creates a new instance of {@link Renderer}.
+	 * 
+	 * @param container
+	 *            current plexus container.
+	 * @return A configured instance of {@link DefaultRenderer}.
+	 * @throws Exception
+	 *             Creating the object failed.
+	 */
+	public static Renderer newSiteRenderer(PlexusContainer container)
+			throws Exception {
+		return (Renderer) container.lookup(Renderer.ROLE, "default");
+	}
+
+	/**
+	 * Creates a new instance of {@link ArtifactFactory}.
+	 * 
+	 * @return A configured instance of {@link DefaultArtifactFactory}.
+	 * @throws Exception
+	 *             Creating the object failed.
+	 */
+	public static ArtifactFactory newArtifactFactory() throws Exception {
+		final InvocationHandler handler = new InvocationHandler() {
+			public Object invoke(Object pProxy, Method pMethod, Object[] pArgs)
+					throws Throwable {
+				System.out.println("Invoking method " + pMethod);
+				throw new IllegalStateException("Not implemented");
+			}
+		};
+		return (ArtifactFactory) Proxy.newProxyInstance(Thread.currentThread()
+				.getContextClassLoader(),
+				new Class[] { ArtifactFactory.class }, handler);
+	}
+
+	/**
+	 * Creates a new instance of {@link ArtifactResolver}.
+	 * 
+	 * @return A configured instance of {@link DefaultArtifactResolver}.
+	 * @throws Exception
+	 *             Creating the object failed.
+	 */
+	public static ArtifactResolver newArtifactResolver() throws Exception {
+		final InvocationHandler handler = new InvocationHandler() {
+			public Object invoke(Object pProxy, Method pMethod, Object[] pArgs)
+					throws Throwable {
+				System.out.println("Invoking method " + pMethod);
+				throw new IllegalStateException("Not implemented");
+			}
+		};
+		return (ArtifactResolver) Proxy.newProxyInstance(Thread.currentThread()
+				.getContextClassLoader(),
+				new Class[] { ArtifactResolver.class }, handler);
+	}
+
+	/**
+	 * Creates an instance of {@link ArtifactRepository}.
+	 * 
+	 * @param container
+	 *            current plexus container.
+	 * @return A configured instance of {@link DefaultArtifactRepository}.
+	 * @throws Exception
+	 *             Creating the object failed.
+	 */
+	public static ArtifactRepository newArtifactRepository(
+			PlexusContainer container) throws Exception {
+		File m2Dir = new File(System.getProperty("user.home"), ".m2");
+		File settingsFile = new File(m2Dir, "settings.xml");
+		String localRepo = null;
+		if (settingsFile.exists()) {
+			Settings settings = new SettingsXpp3Reader().read(new FileReader(
+					settingsFile));
+			localRepo = settings.getLocalRepository();
+		}
+		if (localRepo == null) {
+			localRepo = System.getProperty("user.home") + "/.m2/repository";
+		}
+		ArtifactRepositoryLayout repositoryLayout = (ArtifactRepositoryLayout) container
+				.lookup(ArtifactRepositoryLayout.ROLE, "default");
+		return new DefaultArtifactRepository("local", "file://" + localRepo,
+				repositoryLayout);
+	}
+
+	public static File makeSourceDirectory(String mvnBaseDir, File pFile,
+			String pDir, boolean pCreateCopy) throws IOException {
+		if (!pCreateCopy) {
+			return pFile;
+		}
+
+		final File targetDir = new File(new File(new File(mvnBaseDir),
+				"target/it-source"), pDir);
+		remove(targetDir);
+		copy(pFile, targetDir);
+		return targetDir;
+	}
+
+	public static File getSourceDirectory(String mvnBaseDir, String pDir,
+			boolean pCreateCopy, final File baseDir) throws IOException {
+		return makeSourceDirectory(mvnBaseDir, new File(new File(baseDir,
+				"src/test"), pDir), pDir, pCreateCopy);
+	}
+
+	/**
+	 * Reads the created report file and verifies, whether the detected numbers
+	 * are matching.
+	 * 
+	 * @param pRatTxtFile
+	 *            The file to read.
+	 * @param pNumALFiles
+	 *            The number of files with AL.
+	 * @param pNumNoLicenseFiles
+	 *            The number of files without license.
+	 * @throws IOException
+	 *             An error occurred while reading the file or the file does not
+	 *             exist at all.
+	 * @throws IllegalArgumentException
+	 *             In case of mismatches in file numbers passed in as parameter.
+	 */
+	public static void ensureRatReportIsCorrect(File pRatTxtFile,
+			int pNumALFiles, int pNumNoLicenseFiles) throws IOException {
+		if (!pRatTxtFile.exists()) {
+			throw new FileNotFoundException("Could not find " + pRatTxtFile);
+		}
+
+		BufferedReader reader = new BufferedReader(new FileReader(pRatTxtFile));
+		Integer numALFiles = null;
+		Integer numNoLicenseFiles = null;
+		for (;;) {
+			String line = reader.readLine();
+			if (line == null) {
+				break;
+			}
+			int offset = line.indexOf("Apache Licensed: ");
+			if (offset >= 0) {
+				numALFiles = new Integer(line.substring(
+						offset + "Apache Licensed: ".length()).trim());
+			}
+			offset = line.indexOf("Unknown Licenses");
+			if (offset >= 0) {
+				numNoLicenseFiles = new Integer(line.substring(0, offset)
+						.trim());
+			}
+		}
+		reader.close();
+
+		if (!new Integer(pNumALFiles).equals(numALFiles)) {
+			throw new IllegalArgumentException(
+					"Amount of licensed files does not match. Expected "
+							+ pNumALFiles + ", got " + numALFiles);
+		}
+
+		if (!new Integer(pNumNoLicenseFiles).equals(numNoLicenseFiles)) {
+			throw new IllegalArgumentException(
+					"Amount of licensed files does not match. Expected "
+							+ pNumALFiles + ", got " + numALFiles);
+		}
+
+	}
+
+}

Modified: creadur/rat/trunk/pom.xml
URL: http://svn.apache.org/viewvc/creadur/rat/trunk/pom.xml?rev=1617370&r1=1617369&r2=1617370&view=diff
==============================================================================
--- creadur/rat/trunk/pom.xml (original)
+++ creadur/rat/trunk/pom.xml Mon Aug 11 21:40:26 2014
@@ -77,6 +77,7 @@ agnostic home for software distribution 
     <rat.site.id>org.apache.rat.site</rat.site.id>
 
     <!-- maven plugin versions -->
+    <mavenInvokerPluginVersion>1.9</mavenInvokerPluginVersion>
     <mavenPluginPluginVersion>3.3</mavenPluginPluginVersion>
     <surefire.version>2.17</surefire.version>
   </properties>



Re: svn commit: r1617370 - in /creadur/rat/trunk: ./ apache-rat-plugin/ apache-rat-plugin/src/main/java/org/apache/rat/mp/ apache-rat-plugin/src/test/java/org/apache/rat/mp/

Posted by sebb <se...@gmail.com>.
On 11 August 2014 22:40,  <po...@apache.org> wrote:
> Author: pottlinger
> Date: Mon Aug 11 21:40:26 2014
> New Revision: 1617370
>
> URL: http://svn.apache.org/r1617370
> Log:
> Refactoring mojo tests.
>
> -Replaced the way the MavenProject injected to a non-deprecated way (to get rid of the warning during the build).
> -Updated mavenInvokerPluginVersion and extracted it as a pom-property.
> -Extracted some RAT mojo integration test methods into a separate RatTestHelpers in order to find integration tests more easily after RAT-168 and the NPE when trying to forge 0.11.
>

[]

> ==============================================================================
> --- creadur/rat/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java (original)
> +++ creadur/rat/trunk/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java Mon Aug 11 21:40:26 2014
> @@ -198,9 +198,9 @@ public abstract class AbstractRatMojo ex
>         private boolean excludeSubProjects;
>
>         /**
> -        * Holds the maven-internal project to allow resolution of artifact properties during mojo runs.
> -        */
> -       @Component
> +    * Holds the maven-internal project to allow resolution of artifact properties during mojo runs.
> +    */
> +       @Parameter(property = "project", required = true, readonly = true)

So the NPE was caused by using

          @Parameter(name = "project",

i.e. the wrong attribute name?

>         private MavenProject project;
>
>         /**


[]