You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@creadur.apache.org by jo...@apache.org on 2009/02/01 22:36:31 UTC

svn commit: r739847 - in /incubator/rat/main/trunk/rat/rat-anttasks/src: main/java/org/apache/rat/anttasks/ test/java/ test/java/org/ test/java/org/apache/ test/java/org/apache/rat/ test/java/org/apache/rat/anttasks/ test/java/org/example/ test/resourc...

Author: jochen
Date: Sun Feb  1 21:36:30 2009
New Revision: 739847

URL: http://svn.apache.org/viewvc?rev=739847&view=rev
Log:
Adding some tests, which are based on the BuildFileTest, thus easier to debug.

Added:
    incubator/rat/main/trunk/rat/rat-anttasks/src/main/java/org/apache/rat/anttasks/LogOutputStream.java
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/rat/
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/rat/anttasks/
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/example/
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/example/LicenseFamily.java
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/example/Matcher.java
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/report-junit.xml   (with props)
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/target/
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/target/anttasks/
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/target/anttasks/dest/
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/target/anttasks/src/
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/target/anttasks/src/org/
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/target/anttasks/src/org/example/
Modified:
    incubator/rat/main/trunk/rat/rat-anttasks/src/main/java/org/apache/rat/anttasks/Report.java
    incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/build.xml

Added: incubator/rat/main/trunk/rat/rat-anttasks/src/main/java/org/apache/rat/anttasks/LogOutputStream.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/rat/rat-anttasks/src/main/java/org/apache/rat/anttasks/LogOutputStream.java?rev=739847&view=auto
==============================================================================
--- incubator/rat/main/trunk/rat/rat-anttasks/src/main/java/org/apache/rat/anttasks/LogOutputStream.java (added)
+++ incubator/rat/main/trunk/rat/rat-anttasks/src/main/java/org/apache/rat/anttasks/LogOutputStream.java Sun Feb  1 21:36:30 2009
@@ -0,0 +1,49 @@
+package org.apache.rat.anttasks;
+
+import java.io.IOException;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectComponent;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.util.LineOrientedOutputStream;
+
+
+public class LogOutputStream extends LineOrientedOutputStream {
+    private ProjectComponent pc;
+    private int level;
+
+    public LogOutputStream(ProjectComponent pPc) {
+    	this(pPc, Project.MSG_INFO);
+    }
+
+    public LogOutputStream(Task pTask, int pLevel) {
+    	this(((ProjectComponent) (pTask)), pLevel);
+    }
+
+    public LogOutputStream(ProjectComponent pPc, int pLevel) {
+    	pc = pPc;
+    	level = pLevel;
+    }
+
+    protected void processBuffer() {
+    	System.err.println("processBuffer:");
+    	try {
+    		super.processBuffer();
+    	} catch(IOException e) {
+    		throw new RuntimeException("Unexpected IOException caught: " + e);
+    	}
+    }
+
+    protected void processLine(String pLine) {
+    	processLine(pLine, level);
+    }
+
+    protected void processLine(String pLine, int pLevel) {
+    	System.err.println("processLine: " + pLevel + ", " + pLine);
+    	pc.log(pLine, pLevel);
+    }
+
+    public int getMessageLevel() {
+    	return level;
+    }
+}

Modified: incubator/rat/main/trunk/rat/rat-anttasks/src/main/java/org/apache/rat/anttasks/Report.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/rat/rat-anttasks/src/main/java/org/apache/rat/anttasks/Report.java?rev=739847&r1=739846&r2=739847&view=diff
==============================================================================
--- incubator/rat/main/trunk/rat/rat-anttasks/src/main/java/org/apache/rat/anttasks/Report.java (original)
+++ incubator/rat/main/trunk/rat/rat-anttasks/src/main/java/org/apache/rat/anttasks/Report.java Sun Feb  1 21:36:30 2009
@@ -30,7 +30,6 @@
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.LogOutputStream;
 import org.apache.tools.ant.types.ResourceCollection;
 import org.apache.tools.ant.types.resources.Union;
 import org.apache.tools.ant.util.FileUtils;

Added: incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java?rev=739847&view=auto
==============================================================================
--- incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java (added)
+++ incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/rat/anttasks/AbstractRatAntTaskTest.java Sun Feb  1 21:36:30 2009
@@ -0,0 +1,71 @@
+package org.apache.rat.anttasks;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.regex.Pattern;
+
+import junit.framework.Assert;
+
+import org.apache.tools.ant.BuildFileTest;
+import org.apache.tools.ant.util.FileUtils;
+
+public abstract class AbstractRatAntTaskTest extends BuildFileTest {
+	private static final File tempDir = new File("target/anttasks");
+
+	protected abstract File getAntFile();
+
+	protected File getTempDir() {
+		return tempDir;
+	}
+
+	public void setUp() {
+		configureProject(getAntFile().getPath());
+	}
+
+	protected void assertLogDoesntMatch(String pPattern) {
+		final String log = super.getLog();
+		Assert.assertFalse("Log matches the pattern: " + pPattern + ", got " + log,
+				isMatching(pPattern, log));
+	}
+
+	protected void assertLogMatches(String pPattern) {
+		final String log = super.getLog();
+		Assert.assertTrue("Log doesn' match string: " + pPattern + ", got " + log,
+				isMatching(pPattern, log));
+	}
+
+	private boolean isMatching(final String pPattern, final String pValue) {
+		return Pattern.compile(pPattern).matcher(pValue).find();
+	}
+
+	private String load(File pFile) throws IOException {
+		FileReader fr = new FileReader(pFile);
+		try {
+			final StringBuffer sb = new StringBuffer();
+			char[] buffer = new char[1024];
+			for (;;) {
+				int res = fr.read(buffer);
+				if (res == -1) {
+					fr.close();
+					fr = null;
+					return sb.toString();
+				}
+				if (res > 0) {
+					sb.append(buffer, 0, res);
+				}
+			}
+		} finally {
+			FileUtils.close(fr);
+		}
+	}
+
+	protected void assertFileMatches(File pFile, String pPattern)
+			throws IOException {
+		final String content = load(pFile);
+		Assert.assertTrue("File " + pFile
+				+ " doesn't match the pattern " + pPattern
+				+ ", got " + content,
+				isMatching(pPattern, content));
+	}
+}

Added: incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/rat/anttasks/ReportTest.java?rev=739847&view=auto
==============================================================================
--- incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/rat/anttasks/ReportTest.java (added)
+++ incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/apache/rat/anttasks/ReportTest.java Sun Feb  1 21:36:30 2009
@@ -0,0 +1,68 @@
+package org.apache.rat.anttasks;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.tools.ant.BuildException;
+
+import junit.framework.Assert;
+
+public class ReportTest extends AbstractRatAntTaskTest {
+	private static final File antFile = new File("src/test/resources/antunit/report-junit.xml").getAbsoluteFile();
+
+	protected File getAntFile() {
+		return antFile;
+	}
+
+	public void testWithReportSentToAnt() throws Exception {
+		executeTarget("testWithReportSentToAnt");
+		assertLogMatches("AL +\\Q" + getAntFile().getPath() + "\\E");
+	}
+
+	public void testWithReportSentToFile() throws Exception {
+		final File reportFile = new File(getTempDir(), "selftest.report");
+		getTempDir().mkdirs();
+		final String alLine = "AL +\\Q" + getAntFile().getPath() + "\\E";
+		if (reportFile.isFile()  &&  !reportFile.delete()) {
+			throw new IOException("Unable to remove report file " + reportFile);
+		}
+		executeTarget("testWithReportSentToFile");
+		assertLogDoesntMatch(alLine);
+		Assert.assertTrue("Expected report file " + reportFile, reportFile.isFile());
+		assertFileMatches(reportFile, alLine);
+	}
+
+	public void testWithASLUnknown() throws Exception {
+		executeTarget("testWithASLUnknown");
+		assertLogDoesntMatch("AL +\\Q" + getAntFile().getPath() + "\\E");
+		assertLogMatches("\\!\\?\\?\\?\\?\\? +\\Q" + getAntFile().getPath() + "\\E");
+	}
+
+	public void testCustomMatcher() throws Exception {
+		executeTarget("testCustomMatcher");
+		assertLogDoesntMatch("AL +\\Q" + getAntFile().getPath() + "\\E");
+		assertLogMatches("EXMPL +\\Q" + getAntFile().getPath() + "\\E");
+	}
+
+	public void testNoResources() throws Exception {
+		try {
+			executeTarget("testNoResources");
+			fail("Expected Exception");
+		} catch (BuildException e) {
+			final String expect = "You must specify at least one file";
+			assertTrue("Expected " + expect + ", got " + e.getMessage(),
+					e.getMessage().indexOf(expect) != -1);
+		}
+	}
+
+	public void testNoLicenseMatchers() throws Exception {
+		try {
+			executeTarget("testNoLicenseMatchers");
+			fail("Expected Exception");
+		} catch (BuildException e) {
+			final String expect = "at least one license";
+			assertTrue("Expected " + expect + ", got " + e.getMessage(),
+					e.getMessage().indexOf(expect) != -1);
+		}
+	}
+}

Added: incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/example/LicenseFamily.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/example/LicenseFamily.java?rev=739847&view=auto
==============================================================================
--- incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/example/LicenseFamily.java (added)
+++ incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/example/LicenseFamily.java Sun Feb  1 21:36:30 2009
@@ -0,0 +1,10 @@
+package org.example;
+
+import org.apache.rat.license.ILicenseFamily;
+
+
+public class LicenseFamily implements ILicenseFamily {
+    public String getFamilyName() {
+    	return "Example License";
+   	}
+}

Added: incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/example/Matcher.java
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/example/Matcher.java?rev=739847&view=auto
==============================================================================
--- incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/example/Matcher.java (added)
+++ incubator/rat/main/trunk/rat/rat-anttasks/src/test/java/org/example/Matcher.java Sun Feb  1 21:36:30 2009
@@ -0,0 +1,19 @@
+package org.example;
+
+import org.apache.rat.analysis.IHeaderMatcher;
+import org.apache.rat.analysis.license.BaseLicense;
+import org.apache.rat.report.claim.IClaimReporter;
+import org.apache.rat.analysis.RatHeaderAnalysisException;
+
+
+public class Matcher extends BaseLicense implements IHeaderMatcher {
+    public Matcher() {
+    	super("EXMPL", "Example License", "");
+    }
+    public void reset() {}
+    
+    public boolean match(String subject, String line, IClaimReporter reporter) throws RatHeaderAnalysisException {
+    	reportOnLicense(subject, reporter);
+    	return true;
+    }
+}

Modified: incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/build.xml
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/build.xml?rev=739847&r1=739846&r2=739847&view=diff
==============================================================================
--- incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/build.xml (original)
+++ incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/build.xml Sun Feb  1 21:36:30 2009
@@ -1,52 +1,28 @@
-<project name="antunit" default="all">
-    <condition property="skipping">
-    	<istrue value="${test.skipped}"/>
-	</condition>
+<project name="antunit" default="all"
+     xmlns:au="antlib:org.apache.ant.antunit"
+    xmlns:rat="antlib:org.apache.rat.anttasks">
+  <taskdef uri="antlib:org.apache.ant.antunit"
+      resource="org/apache/ant/antunit/antlib.xml"
+     classpath="${test.classpath}"/>
 
-	<condition property="running.windows">
-        <os family="windows"/>
-    </condition>
+  <taskdef uri="antlib:org.apache.rat.anttasks"
+      resource="org/apache/rat/anttasks/antlib.xml"
+     classpath="${test.classpath}"/>
 
-	<target name="runAntWin" if="running.windows">
-        <macrodef name="runAnt">
-            <attribute name="buildfile"/>
-            <sequential>
-                <exec executable="cmd">
-                    <arg value="/c"/>
-                    <arg file="${ant.home}/bin/ant.bat"/>
-                    <arg value="-buildfile"/>
-                    <arg value="@{buildfile}"/>
-                    <arg value="-lib"/>
-                    <arg value="${jar.name}"/>
-                	<arg value="-lib"/>
-                	<arg value="${antunit.jar.name}"/>
-                    <arg value="-Dbasedir"/>
-                    <arg value="${base.dir}"/>
-                </exec>
-            </sequential>
-        </macrodef>
-    </target>
+  <condition property="tests.running">
+    <not><equals arg1="${tests.skipped}" arg2="true"/></not>
+  </condition>
 
-    <target name="runAntNonWin" unless="running.windows">
-        <macrodef name="runAnt">
-            <attribute name="buildfile"/>
-            <sequential>
-                <exec executable="ant">
-                    <arg value="-buildfile"/>
-                    <arg value="@{buildfile}"/>
-                    <arg value="-lib"/>
-                    <arg value="${jar.name}"/>
-                	<arg value="-Dbasedir"/>
-            	    <arg value="${base.dir}"/>
-                    <arg value="-lib"/>
-                    <arg value="${antunit.jar.name}"/>
-                </exec>
-            </sequential>
-        </macrodef>
-    </target>
-
-    <target name="all" depends="runAntWin,runAntNonWin" unless="skipping">
-    	<runAnt buildfile="report-bad-configurations.xml"/>
-        <runAnt buildfile="report-normal-operation.xml"/>
-	</target>
+  <target name="all" if="tests.running">
+    <echo>Invoking antunit on ${antunit.file}</echo>
+    <mkdir dir="${temp.dir}"/>
+    <au:antunit failonerror="true">
+      <file file="${antunit.file}"/>
+      <au:plainlistener sendLogTo="file" toDir="${temp.dir}" logLevel="info"/>
+      <propertyset>
+        <propertyref name="test.classpath"/>
+        <propertyref name="temp.dir"/>
+      </propertyset>
+    </au:antunit>
+  </target>
 </project>

Added: incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/report-junit.xml
URL: http://svn.apache.org/viewvc/incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/report-junit.xml?rev=739847&view=auto
==============================================================================
--- incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/report-junit.xml (added)
+++ incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/report-junit.xml Sun Feb  1 21:36:30 2009
@@ -0,0 +1,88 @@
+<?xml version='1.0'?>
+<!--
+
+ 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.                                           *
+
+-->
+
+<project default="all"
+    xmlns:au="antlib:org.apache.ant.antunit"
+    xmlns:rat="antlib:org.apache.rat.anttasks">
+  <taskdef uri="antlib:org.apache.ant.antunit"
+	  resource="org/apache/ant/antunit/antlib.xml"
+     classpath="${test.classpath}"/>
+
+  <taskdef uri="antlib:org.apache.rat.anttasks"
+  	  resource="org/apache/rat/anttasks/antlib.xml"
+     classpath="${test.classpath}"/>
+
+  <property name="output.dir" location="target/anttasks"/>
+  <pathconvert dirsep="/" property="file.name">
+    <path>
+      <pathelement location="${ant.file}"/>
+    </path>
+  </pathconvert>
+  <property name="expectedOutput" value="AL    ${file.name}"/>
+
+  <target name="testWithReportSentToAnt">
+  	<rat:report>
+      <file file="${ant.file}"/>
+    </rat:report>
+  </target>
+
+  <target name="all"/>
+
+  <target name="testWithReportSentToFile">
+    <property name="report.file" location="${output.dir}/selftest.report"/>
+    <rat:report reportFile="${report.file}">
+      <file file="${ant.file}"/>
+    </rat:report>
+  </target>
+
+  <target name="testWithASLUnknown">
+    <rat:report addDefaultLicenseMatchers="false">
+      <file file="${ant.file}"/>
+      <rat:w3c/>
+    </rat:report>
+  </target>
+
+  <target name="testCustomMatcher">
+    <mkdir dir="${output.dir}/dest"/>
+    <mkdir dir="${output.dir}/src/org/example"/>
+    <echo file="/tmp/classpath">Classpath is ${test.classpath}</echo>
+  	<typedef name="exmpl" classname="org.example.Matcher"
+    	classpath="${test.classpath}"/>
+    <typedef name="exmpl-license" classname="org.example.LicenseFamily"
+    	classpath="${test.classpath}"/>
+    <rat:report>
+      <file file="${ant.file}"/>
+      <exmpl/>
+      <exmpl-license/>
+    </rat:report>
+  </target>
+
+  <target name="testNoResources">
+    <rat:report/>
+  </target>
+
+  <target name="testNoLicenseMatchers">
+    <rat:report addDefaultLicenseMatchers="false">
+      <file file="${ant.file}"/>
+	</rat:report>
+  </target>
+</project>
\ No newline at end of file

Propchange: incubator/rat/main/trunk/rat/rat-anttasks/src/test/resources/antunit/report-junit.xml
------------------------------------------------------------------------------
    svn:executable = *