/** * 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.squalix.tools.umlquality; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import junit.framework.TestCase; import org.squale.jraf.commons.exception.JrafDaoException; import org.squale.squalecommon.SqualeTestCase; import org.squale.squalecommon.daolayer.component.AbstractComponentDAOImpl; import org.squale.squalecommon.daolayer.component.ProjectDAOImpl; import org.squale.squalecommon.daolayer.component.ProjectParameterDAOImpl; import org.squale.squalecommon.daolayer.result.MeasureDAOImpl; import org.squale.squalecommon.enterpriselayer.businessobject.component.ApplicationBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.AuditBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.ProjectBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.UmlClassBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.UmlInterfaceBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.UmlModelBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.parameters.ListParameterBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.parameters.MapParameterBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.parameters.ParametersConstants; import org.squale.squalecommon.enterpriselayer.businessobject.component.parameters.StringParameterBO; import org.squale.squalecommon.enterpriselayer.businessobject.result.umlquality.UMLQualityClassMetricsBO; import org.squale.squalecommon.enterpriselayer.businessobject.result.umlquality.UMLQualityInterfaceMetricsBO; import org.squale.squalecommon.enterpriselayer.businessobject.result.umlquality.UMLQualityModelMetricsBO; import org.squale.squalecommon.enterpriselayer.businessobject.rule.QualityGridBO; import org.squale.squalix.core.AbstractTask; import org.squale.squalix.core.TaskData; /** * @author E6400802 Pour changer le mod�le de ce commentaire de type g�n�r�, allez � : * Fen�tre>Pr�f�rences>Java>G�n�ration de code>Code et commentaires */ public class UMLQualityTaskTest extends SqualeTestCase { /** * Pseudo-chemin vers une vue. */ private static final String VIEW_PATH = ""; /** l'application */ private ApplicationBO mAppli = new ApplicationBO(); /** Le projet � auditer */ private ProjectBO mProject = null; /** L'audit */ private AuditBO mAudit = null; /** Les param�tres temporaires du projet */ private TaskData mData = new TaskData(); /** * @see TestCase#setUp() * @throws Exception si erreur */ protected void setUp() throws Exception { super.setUp(); getSession().beginTransaction(); mAppli = getComponentFactory().createApplication( getSession() ); QualityGridBO grid = getComponentFactory().createGrid( getSession() ); mProject = getComponentFactory().createProject( getSession(), mAppli, grid ); // Enregistrement du ProjectBO dans la base ProjectDAOImpl projectDAO = ProjectDAOImpl.getInstance(); // Les param�tres doivent contenir le chemin du fichier de configuration MapParameterBO parameter = new MapParameterBO(); Map projectParams = new HashMap(); StringParameterBO params = new StringParameterBO(); MapParameterBO umlqualityMap = new MapParameterBO(); Map umlqualityParams = new HashMap(); params.setValue( new File( ".", "data/models/Circulation2.xmi" ).getAbsolutePath() ); umlqualityParams.put( ParametersConstants.UMLQUALITY_SOURCE_XMI, params ); umlqualityMap.setParameters( umlqualityParams ); // Ajout des filtres de classe ListParameterBO excludeClasses = new ListParameterBO(); List listPatterns = new ArrayList(); StringParameterBO pattern1 = new StringParameterBO(); pattern1.setValue( "#.java" ); listPatterns.add( pattern1 ); StringParameterBO pattern2 = new StringParameterBO(); pattern2.setValue( "#.javax" ); listPatterns.add( pattern2 ); excludeClasses.setParameters( listPatterns ); // Ajout des filtres aux param�tres d'UMLQuality umlqualityParams.put( ParametersConstants.MODEL_EXCLUDED_CLASSES, excludeClasses ); umlqualityMap.setParameters( umlqualityParams ); // Ajout des param�tres d'UMLQuality aux param�tres du projet projectParams.put( ParametersConstants.UMLQUALITY, umlqualityMap ); parameter.setParameters( projectParams ); ProjectParameterDAOImpl.getInstance().create( getSession(), parameter ); mProject.setParameters( parameter ); ProjectDAOImpl.getInstance().save( getSession(), mProject ); mAudit = getComponentFactory().createAudit( this.getSession(), mProject ); // On fait le commit pour permettre l'acc�s aux donn�es dans une autre session getSession().commitTransactionWithoutClose(); mData.putData( TaskData.VIEW_PATH, VIEW_PATH ); } /** * V�rifie la correcte ex�cution de la t�che UMLQuality. * * @throws JrafDaoException si erreur */ public void testRun() throws JrafDaoException { UMLQualityTask task = new UMLQualityTask(); task.setData( mData ); task.setAuditId( new Long( mAudit.getId() ) ); task.setProjectId( new Long( mProject.getId() ) ); task.setApplicationId( new Long( mAppli.getId() ) ); task.setStatus( AbstractTask.NOT_ATTEMPTED ); task.run(); assertEquals( AbstractTask.TERMINATED, task.getStatus() ); try { // On charge le mod�le analys�: Collection model = AbstractComponentDAOImpl.getInstance().findProjectChildren( getSession(), mProject, mAudit, UmlModelBO.class ); assertEquals( 1, model.size() ); // On r�cup�re les mesures pour le mod�le: Iterator modelIt = model.iterator(); UmlModelBO aModel = (UmlModelBO) modelIt.next(); Collection modelMeasures = MeasureDAOImpl.getInstance().findWhere( getSession(), new Long( aModel.getId() ), task.getAuditId() ); assertEquals( 1, modelMeasures.size() ); // on v�rifie le contenu du tableau de Strings MapParameterBO umlqualityParams = (MapParameterBO) mProject.getParameters().getParameters().get( ParametersConstants.UMLQUALITY ); List filterList = ( (ListParameterBO) umlqualityParams.getParameters().get( ParametersConstants.MODEL_EXCLUDED_CLASSES ) ).getParameters(); assertEquals( "#.java", ( (StringParameterBO) filterList.get( 0 ) ).getValue() ); assertEquals( "#.javax", ( (StringParameterBO) filterList.get( 1 ) ).getValue() ); UMLQualityModelMetricsBO modelMetric = (UMLQualityModelMetricsBO) modelMeasures.iterator().next(); assertEquals( 2, modelMetric.getMCC().intValue() ); assertEquals( 4, modelMetric.getMD().intValue() ); // On charge les classes analys�es: Collection children = AbstractComponentDAOImpl.getInstance().findProjectChildren( getSession(), mProject, mAudit, UmlClassBO.class ); assertEquals( 24, children.size() ); // On r�cup�re les mesures pour la premi�re classe: Iterator childrenIt = children.iterator(); UmlClassBO aClass = (UmlClassBO) childrenIt.next(); Collection measures = MeasureDAOImpl.getInstance().findWhere( getSession(), new Long( aClass.getId() ), task.getAuditId() ); assertEquals( 1, measures.size() ); UMLQualityClassMetricsBO metric = (UMLQualityClassMetricsBO) measures.iterator().next(); assertEquals( 7, metric.getRFC().intValue() ); // mesure du rfc assertEquals( 7, metric.getNumAttr().intValue() ); // mesure du nb d'attributs assertEquals( 0, metric.getNOBD().intValue() ); // mesure du dit assertEquals( 1, metric.getNOBM().intValue() ); assertEquals( 1, metric.getNOC().intValue() ); assertEquals( 1, metric.getNOP().intValue() ); assertEquals( 0, metric.getNVM().intValue() ); assertEquals( 0, metric.getNII().intValue() ); assertEquals( 2, metric.getDIT().intValue() ); assertEquals( 6, metric.getOpsInh().intValue() ); assertEquals( 0, metric.getDepClient().intValue() ); assertEquals( 0, metric.getDepSupp().intValue() ); assertEquals( 1, metric.getNumOps().intValue() ); // mesure du nb d'op�rations // On charge les interfaces analys�es: Collection interfaces = AbstractComponentDAOImpl.getInstance().findProjectChildren( getSession(), mProject, mAudit, UmlInterfaceBO.class ); assertEquals( 3, interfaces.size() ); // On r�cup�re les mesures pour la premi�re interface: Iterator interfaceIt = interfaces.iterator(); UmlInterfaceBO aInterface = (UmlInterfaceBO) interfaceIt.next(); Collection interfaceMeasures = MeasureDAOImpl.getInstance().findWhere( getSession(), new Long( aInterface.getId() ), new Long( mAudit.getId() ) ); assertEquals( 1, interfaceMeasures.size() ); UMLQualityInterfaceMetricsBO interfaceMetric = (UMLQualityInterfaceMetricsBO) interfaceMeasures.iterator().next(); assertEquals( 3, interfaceMetric.getNumOps().intValue() ); assertEquals( 1, interfaceMetric.getNumClients().intValue() ); assertEquals( 0, interfaceMetric.getNumAnc().intValue() ); } catch ( JrafDaoException e ) { e.printStackTrace(); fail( "unexpected exception" ); } } }