blob: 14b360ca62157ceef4939f56fc74b31f244a7088 [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 java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.maven.it.VerificationException;
import org.apache.maven.it.Verifier;
import org.hamcrest.Matcher;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.hamcrest.MatcherAssert.assertThat;
/**
* A specialized verifier that enforces a standard use case for surefire IT's
*
* @author Kristian Rosenvold
*/
public class OutputValidator
{
final Verifier verifier;
private final File baseDir;
public OutputValidator( Verifier verifier )
{
this.verifier = verifier;
this.baseDir = new File( verifier.getBasedir() );
}
public OutputValidator verifyTextInLog( String text )
{
try
{
verifier.verifyTextInLog( text );
}
catch ( VerificationException e )
{
throw new SurefireVerifierException( e );
}
return this;
}
public OutputValidator verifyErrorFreeLog()
{
try
{
verifier.verifyErrorFreeLog();
}
catch ( VerificationException e )
{
throw new SurefireVerifierException( e );
}
return this;
}
public OutputValidator verifyErrorFree( int total )
{
try
{
verifier.verifyErrorFreeLog();
this.assertTestSuiteResults( total, 0, 0, 0 );
return this;
}
catch ( VerificationException e )
{
throw new SurefireVerifierException( e );
}
}
public OutputValidator assertThatLogLine( Matcher<String> line, Matcher<Integer> nTimes )
throws VerificationException
{
int counter = loadLogLines( line ).size();
assertThat( "log pattern does not match nTimes", counter, nTimes );
return this;
}
public List<String> loadLogLines()
throws VerificationException
{
return verifier.loadFile( verifier.getBasedir(), verifier.getLogFileName(), false );
}
public List<String> loadLogLines( Matcher<String> line )
throws VerificationException
{
List<String> matchedLines = new ArrayList<>();
for ( String log : loadLogLines() )
{
if ( line.matches( log ) )
{
matchedLines.add( log );
}
}
return matchedLines;
}
public List<String> loadFile( File file, Charset charset )
{
//noinspection unchecked
try
{
return FileUtils.readLines( file, charset.name() );
}
catch ( IOException e )
{
throw new SurefireVerifierException( e );
}
}
public String getBasedir()
{
return verifier.getBasedir();
}
/**
* Returns a file, referenced from the extracted root (where pom.xml is located)
*
* @param path The subdirectory under basedir
* @return A file
*/
public File getSubFile( String path )
{
return new File( getBasedir(), path );
}
public OutputValidator assertTestSuiteResults( int total, int errors, int failures, int skipped )
{
HelperAssertions.assertTestSuiteResults( total, errors, failures, skipped, baseDir );
return this;
}
public OutputValidator assertTestSuiteResults( int total, int errors, int failures, int skipped, int flakes )
{
HelperAssertions.assertTestSuiteResults( total, errors, failures, skipped, flakes, baseDir );
return this;
}
public OutputValidator assertTestSuiteResults( int total )
{
HelperAssertions.assertTestSuiteResults( total, baseDir );
return this;
}
public OutputValidator assertIntegrationTestSuiteResults( int total, int errors, int failures, int skipped )
{
HelperAssertions.assertIntegrationTestSuiteResults( total, errors, failures, skipped, baseDir );
return this;
}
public OutputValidator assertIntegrationTestSuiteResults( int total )
{
HelperAssertions.assertIntegrationTestSuiteResults( total, baseDir );
return this;
}
public TestFile getTargetFile( String modulePath, String fileName )
{
File targetDir = getSubFile( modulePath + "/target" );
return new TestFile( new File( targetDir, fileName ), this );
}
public TestFile getTargetFile( String fileName )
{
File targetDir = getSubFile( "target" );
return new TestFile( new File( targetDir, fileName ), this );
}
public TestFile getSurefireReportsFile( String fileName, Charset charset )
{
File targetDir = getSurefireReportsDirectory();
return new TestFile( new File( targetDir, fileName ), charset, this );
}
public TestFile getSurefireReportsFile( String fileName )
{
return getSurefireReportsFile( fileName, null );
}
public TestFile getSurefireReportsXmlFile( String fileName )
{
File targetDir = getSurefireReportsDirectory();
return new TestFile( new File( targetDir, fileName ), UTF_8, this );
}
public File getSurefireReportsDirectory()
{
return getSubFile( "target/surefire-reports" );
}
public TestFile getSiteFile( String fileName )
{
File targetDir = getSubFile( "target/site" );
return new TestFile( new File( targetDir, fileName ), this );
}
public File getBaseDir()
{
return baseDir;
}
public String[] getStringsOrderInLog( String[] strings )
throws VerificationException
{
String[] retArr = new String[strings.length];
List<String> strList = new ArrayList<String>( Arrays.asList( strings ) );
int i = 0;
for ( String line : loadLogLines() )
{
for ( int j = 0; j < strList.size(); j++ )
{
if ( line.startsWith( strList.get( j ) ) )
{
retArr[i] = strList.get( j );
++i;
if ( i == strings.length )
{
return retArr;
}
strList.remove( j );
break;
}
}
}
return retArr;
}
public boolean stringsAppearInSpecificOrderInLog( String[] strings )
throws VerificationException
{
int i = 0;
for ( String line : loadLogLines() )
{
if ( line.startsWith( strings[i] ) )
{
if ( i == strings.length - 1 )
{
return true;
}
++i;
}
}
return false;
}
}