|
|
@@ -1,211 +1,227 @@ |
|
|
|
/*
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
package org.apache.tools.ant.taskdefs.optional.junit;
|
|
|
|
|
|
|
|
import static org.junit.Assert.assertFalse;
|
|
|
|
import static org.junit.Assert.assertTrue;
|
|
|
|
import static org.apache.tools.ant.AntAssert.assertContains;
|
|
|
|
import static org.junit.Assert.fail;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.FileReader;
|
|
|
|
import java.io.InputStream;
|
|
|
|
import java.net.URL;
|
|
|
|
|
|
|
|
import org.apache.tools.ant.BuildFileRule;
|
|
|
|
import org.apache.tools.ant.util.FileUtils;
|
|
|
|
import org.junit.Before;
|
|
|
|
import org.junit.Rule;
|
|
|
|
import org.junit.Test;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Small testcase for the junitreporttask.
|
|
|
|
* First test added to reproduce an fault, still a lot to improve
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public class JUnitReportTest {
|
|
|
|
|
|
|
|
@Rule
|
|
|
|
public BuildFileRule buildRule = new BuildFileRule();
|
|
|
|
|
|
|
|
@Before
|
|
|
|
public void setUp() {
|
|
|
|
buildRule.configureProject("src/etc/testcases/taskdefs/optional/junitreport.xml");
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Verifies that no empty junit-noframes.html is generated when frames
|
|
|
|
* output is selected via the default.
|
|
|
|
* Needs reports1 task from junitreport.xml.
|
|
|
|
*/
|
|
|
|
@Test
|
|
|
|
public void testNoFileJUnitNoFrames() {
|
|
|
|
buildRule.executeTarget("reports1");
|
|
|
|
assertFalse("No file junit-noframes.html expected", (new File(System.getProperty("root"), "src/etc/testcases/taskdefs/optional/junitreport/test/html/junit-noframes.html").exists()));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public void assertIndexCreated() {
|
|
|
|
if (!new File(buildRule.getProject().getProperty("output"), "html/index.html").exists()) {
|
|
|
|
fail("No file index file found");
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testEmptyFile() throws Exception {
|
|
|
|
buildRule.executeTarget("testEmptyFile");
|
|
|
|
assertIndexCreated();
|
|
|
|
assertContains("Required text not found in log", XMLResultAggregator.WARNING_EMPTY_FILE, buildRule.getLog());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testIncompleteFile() throws Exception {
|
|
|
|
buildRule.executeTarget("testIncompleteFile");
|
|
|
|
assertIndexCreated();
|
|
|
|
assertContains("Required text not found in log", XMLResultAggregator.WARNING_IS_POSSIBLY_CORRUPTED, buildRule.getLog());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testWrongElement() throws Exception {
|
|
|
|
buildRule.executeTarget("testWrongElement");
|
|
|
|
assertIndexCreated();
|
|
|
|
assertContains("Required text not found in log", XMLResultAggregator.WARNING_INVALID_ROOT_ELEMENT, buildRule.getLog());
|
|
|
|
}
|
|
|
|
|
|
|
|
// Bugzilla Report 34963
|
|
|
|
@Test
|
|
|
|
public void testStackTraceLineBreaks() throws Exception {
|
|
|
|
buildRule.executeTarget("testStackTraceLineBreaks");
|
|
|
|
assertIndexCreated();
|
|
|
|
FileReader r = null;
|
|
|
|
try {
|
|
|
|
r = new FileReader(new File(buildRule.getOutputDir(), "html/sampleproject/coins/0_CoinTest.html"));
|
|
|
|
String report = FileUtils.readFully(r);
|
|
|
|
assertContains("output must contain <br>:\n" + report, "junit.framework.AssertionFailedError: DOEG<br>", report);
|
|
|
|
assertContains("#51049: output must translate line breaks:\n" + report, "cur['line.separator'] = '\\r\\n';", report);
|
|
|
|
} finally {
|
|
|
|
FileUtils.close(r);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Bugzilla Report 38477
|
|
|
|
@Test
|
|
|
|
public void testSpecialSignsInSrcPath() throws Exception {
|
|
|
|
buildRule.executeTarget("testSpecialSignsInSrcPath");
|
|
|
|
File reportFile = new File(buildRule.getOutputDir(), "html/index.html");
|
|
|
|
// tests one the file object
|
|
|
|
assertTrue("No index.html present. Not generated?", reportFile.exists() );
|
|
|
|
assertTrue("Cant read the report file.", reportFile.canRead() );
|
|
|
|
assertTrue("File shouldn't be empty.", reportFile.length() > 0 );
|
|
|
|
// conversion to URL via FileUtils like in XMLResultAggregator, not as suggested in the bug report
|
|
|
|
URL reportUrl = new URL( FileUtils.getFileUtils().toURI(reportFile.getAbsolutePath()) );
|
|
|
|
InputStream reportStream = reportUrl.openStream();
|
|
|
|
assertTrue("This shouldn't be an empty stream.", reportStream.available() > 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testSpecialSignsInHtmlPath() throws Exception {
|
|
|
|
buildRule.executeTarget("testSpecialSignsInHtmlPath");
|
|
|
|
File reportFile = new File(buildRule.getOutputDir(), "html# $%\u00A7&-!report/index.html");
|
|
|
|
// tests one the file object
|
|
|
|
assertTrue("No index.html present. Not generated?", reportFile.exists() );
|
|
|
|
assertTrue("Cant read the report file.", reportFile.canRead() );
|
|
|
|
assertTrue("File shouldn't be empty.", reportFile.length() > 0 );
|
|
|
|
// conversion to URL via FileUtils like in XMLResultAggregator, not as suggested in the bug report
|
|
|
|
URL reportUrl = new URL( FileUtils.getFileUtils().toURI(reportFile.getAbsolutePath()) );
|
|
|
|
InputStream reportStream = reportUrl.openStream();
|
|
|
|
assertTrue("This shouldn't be an empty stream.", reportStream.available() > 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
//Bugzilla Report 39708
|
|
|
|
@Test
|
|
|
|
public void testWithStyleFromDir() throws Exception {
|
|
|
|
buildRule.executeTarget("testWithStyleFromDir");
|
|
|
|
File reportFile = new File(buildRule.getOutputDir(), "html/index.html");
|
|
|
|
// tests one the file object
|
|
|
|
assertTrue("No index.html present. Not generated?", reportFile.exists() );
|
|
|
|
assertTrue("Cant read the report file.", reportFile.canRead() );
|
|
|
|
assertTrue("File shouldn't be empty.", reportFile.length() > 0 );
|
|
|
|
// conversion to URL via FileUtils like in XMLResultAggregator, not as suggested in the bug report
|
|
|
|
URL reportUrl = new URL( FileUtils.getFileUtils().toURI(reportFile.getAbsolutePath()) );
|
|
|
|
InputStream reportStream = reportUrl.openStream();
|
|
|
|
assertTrue("This shouldn't be an empty stream.", reportStream.available() > 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
//Bugzilla Report 40021
|
|
|
|
@Test
|
|
|
|
public void testNoFrames() throws Exception {
|
|
|
|
buildRule.executeTarget("testNoFrames");
|
|
|
|
File reportFile = new File(buildRule.getOutputDir(), "html/junit-noframes.html");
|
|
|
|
// tests one the file object
|
|
|
|
assertTrue("No junit-noframes.html present. Not generated?", reportFile.exists() );
|
|
|
|
assertTrue("Cant read the report file.", reportFile.canRead() );
|
|
|
|
assertTrue("File shouldn't be empty.", reportFile.length() > 0 );
|
|
|
|
// conversion to URL via FileUtils like in XMLResultAggregator, not as suggested in the bug report
|
|
|
|
URL reportUrl = new URL( FileUtils.getFileUtils().toURI(reportFile.getAbsolutePath()) );
|
|
|
|
InputStream reportStream = reportUrl.openStream();
|
|
|
|
assertTrue("This shouldn't be an empty stream.", reportStream.available() > 0);
|
|
|
|
}
|
|
|
|
//Bugzilla Report 39708
|
|
|
|
@Test
|
|
|
|
public void testWithStyleFromDirAndXslImport() throws Exception {
|
|
|
|
buildRule.executeTarget("testWithStyleFromDirAndXslImport");
|
|
|
|
File reportFile = new File(buildRule.getOutputDir(), "html/index.html");
|
|
|
|
// tests one the file object
|
|
|
|
assertTrue("No index.html present. Not generated?", reportFile.exists() );
|
|
|
|
assertTrue("Cant read the report file.", reportFile.canRead() );
|
|
|
|
assertTrue("File shouldn't be empty.", reportFile.length() > 0 );
|
|
|
|
// conversion to URL via FileUtils like in XMLResultAggregator, not as suggested in the bug report
|
|
|
|
URL reportUrl = new URL( FileUtils.getFileUtils().toURI(reportFile.getAbsolutePath()) );
|
|
|
|
InputStream reportStream = reportUrl.openStream();
|
|
|
|
assertTrue("This shouldn't be an empty stream.", reportStream.available() > 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testWithStyleFromClasspath() throws Exception {
|
|
|
|
buildRule.executeTarget("testWithStyleFromClasspath");
|
|
|
|
File reportFile = new File(buildRule.getOutputDir(), "html/index.html");
|
|
|
|
// tests one the file object
|
|
|
|
assertTrue("No index.html present. Not generated?", reportFile.exists() );
|
|
|
|
assertTrue("Cant read the report file.", reportFile.canRead() );
|
|
|
|
assertTrue("File shouldn't be empty.", reportFile.length() > 0 );
|
|
|
|
// conversion to URL via FileUtils like in XMLResultAggregator, not as suggested in the bug report
|
|
|
|
URL reportUrl = new URL( FileUtils.getFileUtils().toURI(reportFile.getAbsolutePath()) );
|
|
|
|
InputStream reportStream = reportUrl.openStream();
|
|
|
|
assertTrue("This shouldn't be an empty stream.", reportStream.available() > 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
public void testWithParams() throws Exception {
|
|
|
|
buildRule.executeTarget("testWithParams");
|
|
|
|
assertContains("key1=value1,key2=value2", buildRule.getLog());
|
|
|
|
File reportFile = new File(buildRule.getOutputDir(), "html/index.html");
|
|
|
|
// tests one the file object
|
|
|
|
assertTrue("No index.html present. Not generated?", reportFile.exists() );
|
|
|
|
assertTrue("Cant read the report file.", reportFile.canRead() );
|
|
|
|
assertTrue("File shouldn't be empty.", reportFile.length() > 0 );
|
|
|
|
// conversion to URL via FileUtils like in XMLResultAggregator, not as suggested in the bug report
|
|
|
|
URL reportUrl = new URL( FileUtils.getFileUtils().toURI(reportFile.getAbsolutePath()) );
|
|
|
|
InputStream reportStream = reportUrl.openStream();
|
|
|
|
assertTrue("This shouldn't be an empty stream.", reportStream.available() > 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. |
|
|
|
* |
|
|
|
*/ |
|
|
|
|
|
|
|
package org.apache.tools.ant.taskdefs.optional.junit; |
|
|
|
|
|
|
|
import static org.junit.Assert.assertFalse; |
|
|
|
import static org.junit.Assert.assertTrue; |
|
|
|
import static org.apache.tools.ant.AntAssert.assertContains; |
|
|
|
import static org.junit.Assert.fail; |
|
|
|
|
|
|
|
import java.io.ByteArrayInputStream; |
|
|
|
import java.io.File; |
|
|
|
import java.io.FileReader; |
|
|
|
import java.io.InputStream; |
|
|
|
import java.io.IOException; |
|
|
|
import java.net.URL; |
|
|
|
import java.security.Permission; |
|
|
|
import javax.xml.transform.TransformerFactory; |
|
|
|
import javax.xml.transform.TransformerFactoryConfigurationError; |
|
|
|
|
|
|
|
import org.apache.tools.ant.BuildFileRule; |
|
|
|
import org.apache.tools.ant.util.FileUtils; |
|
|
|
import org.junit.Assume; |
|
|
|
import org.junit.Before; |
|
|
|
import org.junit.Rule; |
|
|
|
import org.junit.Test; |
|
|
|
|
|
|
|
/** |
|
|
|
* Small testcase for the junitreporttask. |
|
|
|
* First test added to reproduce an fault, still a lot to improve |
|
|
|
* |
|
|
|
*/ |
|
|
|
public class JUnitReportTest { |
|
|
|
|
|
|
|
@Rule |
|
|
|
public BuildFileRule buildRule = new BuildFileRule(); |
|
|
|
|
|
|
|
@Before |
|
|
|
public void setUp() { |
|
|
|
buildRule.configureProject("src/etc/testcases/taskdefs/optional/junitreport.xml"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Verifies that no empty junit-noframes.html is generated when frames |
|
|
|
* output is selected via the default. |
|
|
|
* Needs reports1 task from junitreport.xml. |
|
|
|
*/ |
|
|
|
@Test |
|
|
|
public void testNoFileJUnitNoFrames() { |
|
|
|
buildRule.executeTarget("reports1"); |
|
|
|
assertFalse("No file junit-noframes.html expected", (new File(System.getProperty("root"), "src/etc/testcases/taskdefs/optional/junitreport/test/html/junit-noframes.html").exists())); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public void assertIndexCreated() { |
|
|
|
try { |
|
|
|
commonIndexFileAssertions(); |
|
|
|
} catch (IOException ex) { |
|
|
|
throw new RuntimeException(ex); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private File commonIndexFileAssertions() throws IOException { |
|
|
|
File reportFile = new File(buildRule.getOutputDir(), "html/index.html"); |
|
|
|
commonIndexFileAssertions(reportFile); |
|
|
|
return reportFile; |
|
|
|
} |
|
|
|
|
|
|
|
private void commonIndexFileAssertions(File reportFile) throws IOException { |
|
|
|
// tests one the file object |
|
|
|
assertTrue("No index.html present. Not generated?", reportFile.exists() ); |
|
|
|
assertTrue("Cant read the report file.", reportFile.canRead() ); |
|
|
|
assertTrue("File shouldn't be empty.", reportFile.length() > 0 ); |
|
|
|
// conversion to URL via FileUtils like in XMLResultAggregator, not as suggested in the bug report |
|
|
|
URL reportUrl = new URL( FileUtils.getFileUtils().toURI(reportFile.getAbsolutePath()) ); |
|
|
|
InputStream reportStream = reportUrl.openStream(); |
|
|
|
try { |
|
|
|
assertTrue("This shouldn't be an empty stream.", reportStream.available() > 0); |
|
|
|
} finally { |
|
|
|
FileUtils.getFileUtils().close(reportStream); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testEmptyFile() throws Exception { |
|
|
|
buildRule.executeTarget("testEmptyFile"); |
|
|
|
assertIndexCreated(); |
|
|
|
assertContains("Required text not found in log", XMLResultAggregator.WARNING_EMPTY_FILE, buildRule.getLog()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testIncompleteFile() throws Exception { |
|
|
|
buildRule.executeTarget("testIncompleteFile"); |
|
|
|
assertIndexCreated(); |
|
|
|
assertContains("Required text not found in log", XMLResultAggregator.WARNING_IS_POSSIBLY_CORRUPTED, buildRule.getLog()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testWrongElement() throws Exception { |
|
|
|
buildRule.executeTarget("testWrongElement"); |
|
|
|
assertIndexCreated(); |
|
|
|
assertContains("Required text not found in log", XMLResultAggregator.WARNING_INVALID_ROOT_ELEMENT, buildRule.getLog()); |
|
|
|
} |
|
|
|
|
|
|
|
// Bugzilla Report 34963 |
|
|
|
@Test |
|
|
|
public void testStackTraceLineBreaks() throws Exception { |
|
|
|
buildRule.executeTarget("testStackTraceLineBreaks"); |
|
|
|
assertIndexCreated(); |
|
|
|
FileReader r = null; |
|
|
|
try { |
|
|
|
r = new FileReader(new File(buildRule.getOutputDir(), "html/sampleproject/coins/0_CoinTest.html")); |
|
|
|
String report = FileUtils.readFully(r); |
|
|
|
assertContains("output must contain <br>:\n" + report, "junit.framework.AssertionFailedError: DOEG<br>", report); |
|
|
|
assertContains("#51049: output must translate line breaks:\n" + report, "cur['line.separator'] = '\\r\\n';", report); |
|
|
|
} finally { |
|
|
|
FileUtils.close(r); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Bugzilla Report 38477 |
|
|
|
@Test |
|
|
|
public void testSpecialSignsInSrcPath() throws Exception { |
|
|
|
buildRule.executeTarget("testSpecialSignsInSrcPath"); |
|
|
|
commonIndexFileAssertions(); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSpecialSignsInHtmlPath() throws Exception { |
|
|
|
buildRule.executeTarget("testSpecialSignsInHtmlPath"); |
|
|
|
File reportFile = new File(buildRule.getOutputDir(), "html# $%\u00A7&-!report/index.html"); |
|
|
|
commonIndexFileAssertions(reportFile); |
|
|
|
} |
|
|
|
|
|
|
|
//Bugzilla Report 39708 |
|
|
|
@Test |
|
|
|
public void testWithStyleFromDir() throws Exception { |
|
|
|
buildRule.executeTarget("testWithStyleFromDir"); |
|
|
|
commonIndexFileAssertions(); |
|
|
|
} |
|
|
|
|
|
|
|
//Bugzilla Report 40021 |
|
|
|
@Test |
|
|
|
public void testNoFrames() throws Exception { |
|
|
|
buildRule.executeTarget("testNoFrames"); |
|
|
|
File reportFile = new File(buildRule.getOutputDir(), "html/junit-noframes.html"); |
|
|
|
commonIndexFileAssertions(reportFile); |
|
|
|
} |
|
|
|
|
|
|
|
//Bugzilla Report 39708 |
|
|
|
@Test |
|
|
|
public void testWithStyleFromDirAndXslImport() throws Exception { |
|
|
|
buildRule.executeTarget("testWithStyleFromDirAndXslImport"); |
|
|
|
commonIndexFileAssertions(); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testWithStyleFromClasspath() throws Exception { |
|
|
|
buildRule.executeTarget("testWithStyleFromClasspath"); |
|
|
|
commonIndexFileAssertions(); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testWithParams() throws Exception { |
|
|
|
buildRule.executeTarget("testWithParams"); |
|
|
|
assertContains("key1=value1,key2=value2", buildRule.getLog()); |
|
|
|
commonIndexFileAssertions(); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testWithSecurityManagerAndXalanFactory() throws Exception { |
|
|
|
try { |
|
|
|
String factoryName = TransformerFactory.newInstance().getClass().getName(); |
|
|
|
Assume.assumeTrue("TraxFactory is " + factoryName + " and not Xalan", |
|
|
|
"org.apache.xalan.processor.TransformerFactoryImpl" |
|
|
|
.equals(factoryName)); |
|
|
|
} catch (TransformerFactoryConfigurationError exc) { |
|
|
|
throw new RuntimeException(exc); |
|
|
|
} |
|
|
|
try { |
|
|
|
System.setSecurityManager(new SecurityManager() {public void checkPermission(Permission perm) {}}); |
|
|
|
buildRule.executeTarget("testWithStyleFromClasspath"); |
|
|
|
commonIndexFileAssertions(); |
|
|
|
} finally { |
|
|
|
System.setSecurityManager(null); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testWithSecurityManagerAndJDKFactory() throws Exception { |
|
|
|
ClassLoader orig = Thread.currentThread().getContextClassLoader(); |
|
|
|
try { |
|
|
|
Thread.currentThread().setContextClassLoader(new ClassLoader(ClassLoader.getSystemClassLoader().getParent()) { |
|
|
|
public InputStream getResourceAsStream(String name) { |
|
|
|
if (name.startsWith("META-INF/services/")) { |
|
|
|
// work around JAXP #6723276 in JDK 6 |
|
|
|
return new ByteArrayInputStream(new byte[0]); |
|
|
|
} |
|
|
|
return super.getResourceAsStream(name); |
|
|
|
} |
|
|
|
}); |
|
|
|
System.setSecurityManager(new SecurityManager() {public void checkPermission(Permission perm) {}}); |
|
|
|
buildRule.executeTarget("testWithStyleFromClasspath"); |
|
|
|
commonIndexFileAssertions(); |
|
|
|
} finally { |
|
|
|
System.setSecurityManager(null); |
|
|
|
Thread.currentThread().setContextClassLoader(orig); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |