package org.codehaus.mojo.fitnesse;
/*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 2.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Foobar. If not, see <http://www.gnu.org/licenses/>.
*/
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.settings.Server;
import org.jmock.Mock;
import org.jmock.cglib.MockObjectTestCase;
public class FitnesseAbstractMojoTest
extends MockObjectTestCase
{
private static final String WILD_CART = "XXX";
private Mock mMockLog;
public static class MojoTest
extends FitnesseAbstractMojo
{
public MojoTest( Log pLog )
{
setLog( pLog );
}
public void execute()
throws MojoExecutionException, MojoFailureException
{
}
String getOutputFileName( Fitnesse pServer )
{
return null;
}
String getOutputUrl( Fitnesse pServer )
{
return null;
}
}
public void testGetCredentialOk()
throws MojoExecutionException
{
MojoTest tMojo = getMojo( null );
UsernamePasswordCredentials tCred = tMojo.getCredential( "Server0" );
assertEquals( "Login0", tCred.getUserName() );
assertEquals( "Password0", tCred.getPassword() );
tCred = tMojo.getCredential( "Server1" );
assertEquals( "Login1", tCred.getUserName() );
assertEquals( "Password1", tCred.getPassword() );
tCred = tMojo.getCredential( "Server2" );
assertEquals( "Login2", tCred.getUserName() );
assertEquals( "Password2", tCred.getPassword() );
}
public void testGetCredentialNotFound()
{
MojoTest tMojo = getMojo( null );
try
{
tMojo.getCredential( "Server3" );
fail( "Should not find credential" );
}
catch ( MojoExecutionException e )
{
assertEquals( "Unable to find credential for ServerId=[Server3], "
+ "you must define a <Server> tag in your settings.xml for this Id.", e.getMessage() );
}
}
private MojoTest getMojo( Log pLog )
{
MojoTest tMojo = new MojoTest( pLog );
Server tServer = new Server();
tServer.setId( "Server0" );
tServer.setUsername( "Login0" );
tServer.setPassword( "Password0" );
tMojo.addServer( tServer );
tServer = new Server();
tServer.setId( "Server1" );
tServer.setUsername( "Login1" );
tServer.setPassword( "Password1" );
tMojo.addServer( tServer );
tServer = new Server();
tServer.setId( "Server2" );
tServer.setUsername( "Login2" );
tServer.setPassword( "Password2" );
tMojo.addServer( tServer );
tMojo.setDateFormat( "dd/MM/yyyy HH:mm" );
return tMojo;
}
public void testCheckConfigurationWithoutCommandLineNorConfig()
throws MojoExecutionException
{
MojoTest tMojo = getMojo( (Log) mMockLog.proxy() );
mMockLog.stubs().method( "error" ).with(
eq( "Your should configure at least one Fitnesse "
+ "server. Check your maven-fitnesse-plugin configuration." ) );
try
{
tMojo.setFitnesses( null );
tMojo.checkConfiguration();
}
catch ( MojoExecutionException e )
{
assertEquals( "Your should configure at least one Fitnesse server. "
+ "Check your maven-fitnesse-plugin configuration.", e.getMessage() );
}
List tList = new ArrayList();
tMojo.setFitnesses( tList );
try
{
tMojo.checkConfiguration();
}
catch ( MojoExecutionException e )
{
assertEquals( "Your should configure at least one Fitnesse server. "
+ "Check your maven-fitnesse-plugin configuration.", e.getMessage() );
}
}
public void testCheckConfigurationWithoutCommandLineAndOneFitnesse()
throws MojoExecutionException
{
MojoTest tMojo = getMojo( (Log) mMockLog.proxy() );
List tList = new ArrayList();
tList.add( new Fitnesse( "localhost", 80, "MaPage", null ) );
tMojo.setFitnesses( tList );
tMojo.checkConfiguration();
assertEquals( 1, tMojo.getFitnesseSize() );
assertEquals( "localhost", tMojo.getFitnesse( 0 ).getHostName() );
assertEquals( 80, tMojo.getFitnesse( 0 ).getPort() );
assertEquals( "MaPage", tMojo.getFitnesse( 0 ).getPageName() );
}
public void testCheckConfigurationWithoutCommandLineAndSeveralFitnesse()
throws MojoExecutionException
{
MojoTest tMojo = getMojo( (Log) mMockLog.proxy() );
List tList = new ArrayList();
tList.add( new Fitnesse( "localhost", 80, "MaPage", null ) );
tList.add( new Fitnesse( "localhost2", 8080, "MaPage2", null ) );
tMojo.setFitnesses( tList );
tMojo.checkConfiguration();
assertEquals( 2, tMojo.getFitnesseSize() );
assertEquals( "localhost", tMojo.getFitnesse( 0 ).getHostName() );
assertEquals( 80, tMojo.getFitnesse( 0 ).getPort() );
assertEquals( "MaPage", tMojo.getFitnesse( 0 ).getPageName() );
assertEquals( "localhost2", tMojo.getFitnesse( 1 ).getHostName() );
assertEquals( 8080, tMojo.getFitnesse( 1 ).getPort() );
assertEquals( "MaPage2", tMojo.getFitnesse( 1 ).getPageName() );
}
public void testCheckConfigurationWithCommandLineAndWithoutConfig()
throws MojoExecutionException
{
MojoTest tMojo = getMojo( (Log) mMockLog.proxy() );
tMojo.setFitnesses( null );
tMojo.cmdFitnessePage = "MaPage";
tMojo.checkConfiguration();
assertEquals( 1, tMojo.getFitnesseSize() );
assertEquals( "localhost", tMojo.getFitnesse( 0 ).getHostName() );
assertEquals( 80, tMojo.getFitnesse( 0 ).getPort() );
assertEquals( "MaPage", tMojo.getFitnesse( 0 ).getPageName() );
tMojo = getMojo( (Log) mMockLog.proxy() );
tMojo.cmdFitnessePage = "MaPage";
List tList = new ArrayList();
tMojo.setFitnesses( tList );
tMojo.checkConfiguration();
assertEquals( 1, tMojo.getFitnesseSize() );
assertEquals( "localhost", tMojo.getFitnesse( 0 ).getHostName() );
assertEquals( 80, tMojo.getFitnesse( 0 ).getPort() );
assertEquals( "MaPage", tMojo.getFitnesse( 0 ).getPageName() );
}
public void testCheckConfigurationWithSimpleCommandLineAndOneFitnesse()
throws MojoExecutionException
{
MojoTest tMojo = getMojo( (Log) mMockLog.proxy() );
tMojo.cmdFitnessePage = "MyPage";
List tList = new ArrayList();
tList.add( new Fitnesse( "localhost", 80, "MaPage", null ) );
tMojo.setFitnesses( tList );
tMojo.checkConfiguration();
assertEquals( 1, tMojo.getFitnesseSize() );
assertEquals( "localhost", tMojo.getFitnesse( 0 ).getHostName() );
assertEquals( 80, tMojo.getFitnesse( 0 ).getPort() );
assertEquals( "MyPage", tMojo.getFitnesse( 0 ).getPageName() );
}
public void testCheckConfigurationWithFullCommandLineAndOneFitnesse()
throws MojoExecutionException
{
MojoTest tMojo = getMojo( (Log) mMockLog.proxy() );
tMojo.cmdFitnessePage = "MyPage";
tMojo.cmdFitnesseHostName = "myHost";
tMojo.cmdFitnessePort = 8080;
List tList = new ArrayList();
tList.add( new Fitnesse( "localhost", 80, "MaPage", null ) );
tMojo.setFitnesses( tList );
tMojo.checkConfiguration();
assertEquals( 1, tMojo.getFitnesseSize() );
assertEquals( "myHost", tMojo.getFitnesse( 0 ).getHostName() );
assertEquals( 8080, tMojo.getFitnesse( 0 ).getPort() );
assertEquals( "MyPage", tMojo.getFitnesse( 0 ).getPageName() );
}
public void testCheckConfigurationWithCommandLineAndSeveralFitnesse()
throws MojoExecutionException
{
MojoTest tMojo = getMojo( (Log) mMockLog.proxy() );
tMojo.cmdFitnessePage = "MyPage";
List tList = new ArrayList();
tList.add( new Fitnesse( "localhost", 80, "MaPage", null ) );
tList.add( new Fitnesse( "localhost2", 8080, "MaPage2", null ) );
tMojo.setFitnesses( tList );
tMojo.checkConfiguration();
assertEquals( 1, tMojo.getFitnesseSize() );
assertEquals( "localhost", tMojo.getFitnesse( 0 ).getHostName() );
assertEquals( 80, tMojo.getFitnesse( 0 ).getPort() );
assertEquals( "MyPage", tMojo.getFitnesse( 0 ).getPageName() );
}
public void testCheckConfigurationWithFullCommandLineAndSeveralFitnesse()
throws MojoExecutionException
{
MojoTest tMojo = getMojo( (Log) mMockLog.proxy() );
tMojo.cmdFitnessePage = "MyPage";
tMojo.cmdFitnesseHostName = "myHost";
tMojo.cmdFitnessePort = 8081;
List tList = new ArrayList();
tList.add( new Fitnesse( "localhost", 80, "MaPage", null ) );
tList.add( new Fitnesse( "localhost2", 8080, "MaPage2", null ) );
tMojo.setFitnesses( tList );
tMojo.checkConfiguration();
assertEquals( 1, tMojo.getFitnesseSize() );
assertEquals( "myHost", tMojo.getFitnesse( 0 ).getHostName() );
assertEquals( 8081, tMojo.getFitnesse( 0 ).getPort() );
assertEquals( "MyPage", tMojo.getFitnesse( 0 ).getPageName() );
}
public void testCheckConfigurationWithHostCommandLineAndSeveralFitnesse()
throws MojoExecutionException
{
MojoTest tMojo = getMojo( (Log) mMockLog.proxy() );
tMojo.cmdFitnesseHostName = "myHost";
List tList = new ArrayList();
tList.add( new Fitnesse( "localhost", 80, "MaPage", null ) );
tList.add( new Fitnesse( "localhost2", 8080, "MaPage2", null ) );
tMojo.setFitnesses( tList );
tMojo.checkConfiguration();
assertEquals( 1, tMojo.getFitnesseSize() );
assertEquals( "myHost", tMojo.getFitnesse( 0 ).getHostName() );
assertEquals( 80, tMojo.getFitnesse( 0 ).getPort() );
assertEquals( "MaPage", tMojo.getFitnesse( 0 ).getPageName() );
}
public void testCheckConfigurationWithPortCommandLineAndSeveralFitnesse()
throws MojoExecutionException
{
MojoTest tMojo = getMojo( (Log) mMockLog.proxy() );
tMojo.cmdFitnessePort = 8081;
List tList = new ArrayList();
tList.add( new Fitnesse( "localhost", 80, "MaPage", null ) );
tList.add( new Fitnesse( "localhost2", 8080, "MaPage2", null ) );
tMojo.setFitnesses( tList );
tMojo.checkConfiguration();
assertEquals( 1, tMojo.getFitnesseSize() );
assertEquals( "localhost", tMojo.getFitnesse( 0 ).getHostName() );
assertEquals( 8081, tMojo.getFitnesse( 0 ).getPort() );
assertEquals( "MaPage", tMojo.getFitnesse( 0 ).getPageName() );
}
/**
* @Override
*/
protected void setUp()
throws Exception
{
super.setUp();
mMockLog = mock( Log.class );
mMockLog.stubs().method( "info" ).withAnyArguments();
}
public void testTransformHtmlForSimpleTest()
throws IOException, MojoExecutionException
{
InputStream tSrcFile = getClass().getClassLoader().getResourceAsStream( "remote/TestBrut.html" );
InputStream tExpectedFile = getClass().getClassLoader().getResourceAsStream( "remote/TestResult.html" );
try
{
compareTransformFile( tSrcFile, tExpectedFile, "TestResult_output.txt", FitnessePage.STATUS_ERROR );
}
finally
{
tSrcFile.close();
tExpectedFile.close();
}
}
public void testTransformHtmlForSuite()
throws IOException, MojoExecutionException
{
InputStream tSrcFile = getClass().getClassLoader().getResourceAsStream( "remote/SuiteBrut.html" );
InputStream tExpectedFile = getClass().getClassLoader().getResourceAsStream( "remote/SuiteResult.html" );
try
{
compareTransformFile( tSrcFile, tExpectedFile, "SuiteResult_output.txt", FitnessePage.STATUS_ERROR );
}
finally
{
tSrcFile.close();
tExpectedFile.close();
}
}
private void compareTransformFile( InputStream pSrcFile, InputStream pExpectedFile, String pOutputFileName,
String pStatus )
throws FileNotFoundException, IOException, MojoExecutionException
{
String tExpected = FileUtil.getString( pExpectedFile );
ByteArrayOutputStream tTransform = new ByteArrayOutputStream();
MojoTest tMojo = getMojo( (Log) mMockLog.proxy() );
tMojo.transformHtml( pSrcFile, new OutputStreamWriter( tTransform ), pOutputFileName, pStatus );
StringTokenizer tTokExp = new StringTokenizer( tExpected, "\n" );
StringTokenizer tTokRes = new StringTokenizer( tTransform.toString(), "\n" );
while ( tTokExp.hasMoreElements() )
{
String tExpectToken = tTokExp.nextToken();
String tResultToken = tTokRes.nextToken();
if ( tExpectToken.indexOf( WILD_CART ) >= 0 )
{
int tStartIndex = tExpectToken.indexOf( WILD_CART );
assertEquals( tExpectToken.substring( 0, tStartIndex ), tResultToken.substring( 0, tStartIndex ) );
int tEndIndex = tExpectToken.lastIndexOf( WILD_CART ) + WILD_CART.length();
String tEndExpectected = tExpectToken.substring( tEndIndex, tExpectToken.length() );
String tEndResult = tResultToken.substring( tEndIndex, tResultToken.length() );
assertEquals( tEndExpectected, tEndResult );
}
else
{
assertEquals( tExpectToken, tResultToken );
}
}
assertFalse( tTokRes.hasMoreElements() );
}
}