/**
* Copyright (C) 2008-2010, Squale Project - http://www.squale.org
*
* This file is part of Squale.
*
* Squale is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or any later version.
*
* Squale 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 Lesser General Public License
* along with Squale. If not, see <http://www.gnu.org/licenses/>.
*/
package org.squale.squalecommon.enterpriselayer.facade.rule;
import java.util.Collection;
import java.util.Iterator;
import org.squale.squalecommon.SqualeTestCase;
import org.squale.squalecommon.enterpriselayer.businessobject.rule.ConditionFormulaBO;
import org.squale.squalecommon.enterpriselayer.businessobject.rule.SimpleFormulaBO;
/**
* Test de conversion de formules
*/
public class FormulaConverterTest
extends SqualeTestCase
{
/** Identificateur de formule */
private final int mFormulaId = 12345;
/**
* Test d'extraction des param�tres
*/
public void testExtractParametersCondition()
{
// Test d'une formule avec conditions
ConditionFormulaBO formula = new ConditionFormulaBO();
formula.setTriggerCondition( "mccabe.wmc >= 8 | sonarj.vg >7" );
formula.addMarkCondition( "mccabe.maxvg >= 0.5 * mccabe.sumvg" );
formula.addMarkCondition( "mccabe.maxvg >= 0.5 * mccabe.sumvg" );
formula.addMarkCondition( "mccabe.maxvg >= 0.3 * mccabe.sumvg" );
formula.addMeasureKind( "mccabe" );
formula.addMeasureKind( "sonarj" );
formula.setId( mFormulaId );
ParameterExtraction extracter = new ParameterExtraction();
Collection params = extracter.getFormulaParameters( formula );
// Nombre de prametres attendus
final int paramsCount = 4;
assertEquals( paramsCount, params.size() );
FormulaParameter parameter = new FormulaParameter();
parameter.setMeasureKind( "mccabe" );
parameter.setMeasureAttribute( "maxvg" );
assertTrue( params.contains( parameter ) );
parameter.setMeasureAttribute( "sumvg" );
assertTrue( params.contains( parameter ) );
parameter.setMeasureAttribute( "wmc" );
assertTrue( params.contains( parameter ) );
parameter.setMeasureKind( "sonarj" );
parameter.setMeasureAttribute( "vg" );
assertTrue( params.contains( parameter ) );
}
/**
* Test d'extraction des param�tres
*/
public void testExtractParametersSimple()
{
// Test d'une formule avec conditions
SimpleFormulaBO formula = new SimpleFormulaBO();
formula.setTriggerCondition( "mccabe.wmc >= 8 | sonarj.vg >7" );
formula.setFormula( "mccabe.maxvg >= 0.5 * mccabe.sumvg" );
formula.addMeasureKind( "mccabe" );
formula.addMeasureKind( "sonarj" );
formula.setId( mFormulaId );
ParameterExtraction extracter = new ParameterExtraction();
Collection params = extracter.getFormulaParameters( formula );
// Nombre de prametres attendus
final int paramsCount = 4;
assertEquals( paramsCount, params.size() );
FormulaParameter parameter = new FormulaParameter();
parameter.setMeasureKind( "mccabe" );
parameter.setMeasureAttribute( "maxvg" );
assertTrue( params.contains( parameter ) );
parameter.setMeasureAttribute( "sumvg" );
assertTrue( params.contains( parameter ) );
parameter.setMeasureAttribute( "wmc" );
assertTrue( params.contains( parameter ) );
parameter.setMeasureKind( "sonarj" );
parameter.setMeasureAttribute( "vg" );
assertTrue( params.contains( parameter ) );
}
/**
* Test de conversion des formules avec condition
*/
public void testConvertConditionFormula()
{
ConditionFormulaBO formula = new ConditionFormulaBO();
formula.setId( mFormulaId );
formula.addMarkCondition( "condition0" );
formula.addMarkCondition( "condition1" );
formula.addMarkCondition( "condition2" );
formula.addMeasureKind( "kind1" );
formula.addMeasureKind( "kind2" );
formula.setTriggerCondition( "trigger" );
FormulaConverter converter = new FormulaConverter();
String result = converter.convertFormula( formula );
// V�rification de l'id de la formule
assertTrue( result.indexOf( formula.getId() + "" ) > 0 );
// V�rification de la pr�sence du trigger
assertTrue( result.indexOf( formula.getTriggerCondition() ) > 0 );
// V�rification des conditions
Iterator conditions = formula.getMarkConditions().iterator();
while ( conditions.hasNext() )
{
assertTrue( result.indexOf( (String) conditions.next() ) > 0 );
}
// V�rification des types de mesure
Iterator measureKinds = formula.getMeasureKinds().iterator();
while ( measureKinds.hasNext() )
{
assertTrue( result.indexOf( (String) measureKinds.next() ) > 0 );
}
}
/**
* Test de conversion des formules simples
*/
public void testConvertSimpleFormula()
{
SimpleFormulaBO formula = new SimpleFormulaBO();
formula.setId( mFormulaId );
formula.setFormula( "formula0" );
formula.addMeasureKind( "kind1" );
formula.addMeasureKind( "kind2" );
formula.setTriggerCondition( "trigger" );
FormulaConverter converter = new FormulaConverter();
String result = converter.convertFormula( formula );
// V�rification de l'id de la formule
assertTrue( result.indexOf( formula.getId() + "" ) > 0 );
// V�rification de la pr�sence du trigger
assertTrue( result.indexOf( formula.getTriggerCondition() ) > 0 );
// V�rification de la formule
assertTrue( result.indexOf( formula.getFormula() ) > 0 );
// V�rification des types de mesure
Iterator measureKinds = formula.getMeasureKinds().iterator();
while ( measureKinds.hasNext() )
{
assertTrue( result.indexOf( (String) measureKinds.next() ) > 0 );
}
}
}