blob: 27f671bbe47c8518f3cc740741e37036156db9eb [file] [log] [blame]
package org.apache.maven.surefire.its.fixture;
/*
* 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 org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
import org.apache.maven.plugin.surefire.log.api.PrintStreamLogger;
import org.apache.maven.plugins.surefire.report.ReportTestSuite;
import org.apache.maven.plugins.surefire.report.SurefireReportParser;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import static java.lang.Double.parseDouble;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.Assume.assumeTrue;
/**
*
*/
@SuppressWarnings( {"JavaDoc"} )
public final class HelperAssertions
{
private HelperAssertions()
{
throw new IllegalStateException( "no instantiable constructor" );
}
/**
* assert that the reports in the specified testDir have the right summary statistics
*/
public static void assertTestSuiteResults( int total, int errors, int failures, int skipped, File testDir )
{
IntegrationTestSuiteResults suite = parseTestResults( testDir );
assertTestSuiteResults( total, errors, failures, skipped, suite );
}
public static void assertTestSuiteResults( int total, int errors, int failures, int skipped, int flakes,
File testDir )
{
IntegrationTestSuiteResults suite = parseTestResults( testDir );
assertTestSuiteResults( total, errors, failures, skipped, flakes, suite );
}
public static void assertTestSuiteResults( int total, File testDir )
{
IntegrationTestSuiteResults suite = parseTestResults( testDir );
assertTestSuiteResults( total, suite );
}
/**
* assert that the reports in the specified testDir have the right summary statistics
*/
public static void assertIntegrationTestSuiteResults( int total, int errors, int failures, int skipped,
File testDir )
{
IntegrationTestSuiteResults suite = parseIntegrationTestResults( testDir );
assertTestSuiteResults( total, errors, failures, skipped, suite );
}
public static void assertIntegrationTestSuiteResults( int total, File testDir )
{
IntegrationTestSuiteResults suite = parseIntegrationTestResults( testDir );
assertTestSuiteResults( total, suite );
}
public static void assertTestSuiteResults( int total, int errors, int failures, int skipped,
IntegrationTestSuiteResults actualSuite )
{
assertEquals( "wrong number of tests", total, actualSuite.getTotal() );
assertEquals( "wrong number of errors", errors, actualSuite.getErrors() );
assertEquals( "wrong number of failures", failures, actualSuite.getFailures() );
assertEquals( "wrong number of skipped", skipped, actualSuite.getSkipped() );
}
public static void assertTestSuiteResults( int total, IntegrationTestSuiteResults actualSuite )
{
assertEquals( "wrong number of tests", total, actualSuite.getTotal() );
}
public static void assertTestSuiteResults( int total, int errors, int failures, int skipped, int flakes,
IntegrationTestSuiteResults actualSuite )
{
assertTestSuiteResults( total, errors, failures, skipped, actualSuite );
assertEquals( "wrong number of flaky tests", flakes, actualSuite.getFlakes() );
}
public static IntegrationTestSuiteResults parseTestResults( File... testDirs )
{
List<ReportTestSuite> reports = extractReports( testDirs );
return parseReportList( reports );
}
private static IntegrationTestSuiteResults parseIntegrationTestResults( File... testDirs )
{
List<ReportTestSuite> reports = extractITReports( testDirs );
return parseReportList( reports );
}
/**
* Converts a list of ReportTestSuites into an IntegrationTestSuiteResults object, suitable for summary assertions
*/
public static IntegrationTestSuiteResults parseReportList( List<ReportTestSuite> reports )
{
assertFalse( "No reports!", reports.isEmpty() );
int total = 0, errors = 0, failures = 0, skipped = 0, flakes = 0;
for ( ReportTestSuite report : reports )
{
total += report.getNumberOfTests();
errors += report.getNumberOfErrors();
failures += report.getNumberOfFailures();
skipped += report.getNumberOfSkipped();
flakes += report.getNumberOfFlakes();
}
return new IntegrationTestSuiteResults( total, errors, failures, skipped, flakes );
}
public static List<ReportTestSuite> extractReports( File... testDirs )
{
List<File> reportsDirs = new ArrayList<>();
for ( File testDir : testDirs )
{
File reportsDir = new File( testDir, "target/surefire-reports" );
assertTrue( "Reports directory is missing: " + reportsDir.getAbsolutePath(), reportsDir.exists() );
reportsDirs.add( reportsDir );
}
ConsoleLogger logger = new PrintStreamLogger( System.out );
SurefireReportParser parser = new SurefireReportParser( reportsDirs, Locale.getDefault(), logger );
try
{
return parser.parseXMLReportFiles();
}
catch ( Exception e )
{
throw new RuntimeException( "Couldn't parse XML reports", e );
}
}
private static List<ReportTestSuite> extractITReports( File... testDirs )
{
List<File> reportsDirs = new ArrayList<>();
for ( File testDir : testDirs )
{
File reportsDir = new File( testDir, "target/failsafe-reports" );
assertTrue( "Reports directory is missing: " + reportsDir.getAbsolutePath(), reportsDir.exists() );
reportsDirs.add( reportsDir );
}
ConsoleLogger logger = new PrintStreamLogger( System.out );
SurefireReportParser parser = new SurefireReportParser( reportsDirs, Locale.getDefault(), logger );
try
{
return parser.parseXMLReportFiles();
}
catch ( Exception e )
{
throw new RuntimeException( "Couldn't parse XML reports", e );
}
}
public static void assumeJavaVersion( double expectedVersion )
{
String thisVersion = System.getProperty( "java.specification.version" );
assumeTrue( "java.specification.version: " + thisVersion, parseDouble( thisVersion ) >= expectedVersion );
}
public static void assumeJavaMaxVersion( double expectedMaxVersion )
{
String thisVersion = System.getProperty( "java.specification.version" );
assumeTrue( "java.specification.version: " + thisVersion, parseDouble( thisVersion ) <= expectedMaxVersion );
}
public static void assumeJavaVersionExcluded( double excludedVersion )
{
String thisVersion = System.getProperty( "java.specification.version" );
assumeTrue( "java.specification.version: " + thisVersion, parseDouble( thisVersion ) != excludedVersion );
}
public static String convertUnicodeToUTF8( String unicode )
{
return new String( unicode.getBytes( UTF_8 ), UTF_8 );
}
}