/**
* 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.util.repository;
import junit.framework.TestCase;
import org.squale.jraf.commons.exception.JrafDaoException;
import org.squale.squalecommon.SqualeTestCase;
import org.squale.squalecommon.daolayer.component.ProjectDAOImpl;
import org.squale.squalecommon.daolayer.component.ProjectParameterDAOImpl;
import org.squale.squalecommon.enterpriselayer.businessobject.component.ApplicationBO;
import org.squale.squalecommon.enterpriselayer.businessobject.component.ClassBO;
import org.squale.squalecommon.enterpriselayer.businessobject.component.MethodBO;
import org.squale.squalecommon.enterpriselayer.businessobject.component.PackageBO;
import org.squale.squalecommon.enterpriselayer.businessobject.component.ProjectBO;
import org.squale.squalecommon.enterpriselayer.businessobject.component.parameters.MapParameterBO;
import org.squale.squalecommon.enterpriselayer.businessobject.rule.QualityGridBO;
import org.squale.squalix.util.parser.JavaParser;
/**
* Teste ComponentRepository.
*/
public class ComponentRepositoryTest
extends SqualeTestCase
{
/** l'application */
private ApplicationBO mAppli = new ApplicationBO();
/** le projet � auditer */
private ProjectBO mProject = new ProjectBO();
/** le projet � auditer */
private ComponentRepository mRepository;
/**
* @see TestCase#setUp()
*/
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();
MapParameterBO params = new MapParameterBO();
ProjectParameterDAOImpl.getInstance().create( getSession(), params );
mProject.setParameters( params );
ProjectDAOImpl.getInstance().save( getSession(), mProject );
PackageBO packageBO1 = getComponentFactory().createPackage( getSession(), mProject );
PackageBO packageBO2 = getComponentFactory().createPackage( getSession(), "package2", packageBO1 );
ClassBO classBO = getComponentFactory().createClass( getSession(), packageBO2 );
mRepository = new ComponentRepository( mProject, getSession() );
}
/**
* Teste de la m�thode persisteClass avec une classe qui n'existe pas en base.
*
* @throws JrafDaoException si erreur
*/
public void testPersisteNotExistingClass()
throws JrafDaoException
{
// On cr�e une classe
ClassBO classBO = createClassBO();
ClassBO persistentClass = (ClassBO) mRepository.persisteComponent( classBO );
getSession().commitTransactionWithoutClose();
assertEquals( "ClassTest", persistentClass.getName() );
assertTrue( -1 != persistentClass.getId() );
}
/**
* Teste de la m�thode persisteClass avec une classe qui existe en base.
*
* @throws JrafDaoException si erreur
*/
public void testPersisteExistingClass()
throws JrafDaoException
{
// On cr�e une classe
ClassBO classBO = createClassBO();
ClassBO persistentClass = (ClassBO) mRepository.persisteComponent( classBO );
getSession().commitTransactionWithoutClose();
ClassBO classResult = (ClassBO) mRepository.persisteComponent( classBO );
assertEquals( "ClassTest", classResult.getName() );
assertTrue( -1 != classResult.getId() );
}
/**
* Teste la persistance d'une classe sans package.
*
* @throws JrafDaoException si erreur
*/
public void testPersisteExistingClassWithoutPackage()
throws JrafDaoException
{
// On cr�e une classe sans package
ClassBO classBO = createClassBOWithoutPackage();
ClassBO persistentClass = (ClassBO) mRepository.persisteComponent( classBO );
getSession().commitTransactionWithoutClose();
ClassBO classResult = (ClassBO) mRepository.persisteComponent( classBO );
assertEquals( "ClassTest", classResult.getName() );
assertTrue( -1 != classResult.getId() );
}
/**
* Teste de la m�thode persisteMethod avec une m�thode qui n'existe pas en base.
*
* @throws JrafDaoException si erreur
*/
public void testPersisteNotExistingMethod()
throws JrafDaoException
{
// On cr�e une m�thode
ClassBO classBO = createClassBO();
MethodBO methodBO = getComponentFactory().createMethod( getSession(), classBO );
MethodBO persistentMethod = (MethodBO) mRepository.persisteComponent( methodBO );
getSession().commitTransactionWithoutClose();
assertEquals( "method", persistentMethod.getName() );
assertEquals( "fileName", persistentMethod.getLongFileName() );
assertTrue( -1 != persistentMethod.getId() );
}
/**
* Teste de la m�thode persisteMethod avec la classe de la m�thode qui existe en base.
*
* @throws JrafDaoException si erreur
*/
public void testPersisteMethodWithExistingClass()
throws JrafDaoException
{
// On cr�e une classe
ClassBO classBO1 = createClassBO();
ClassBO persistentClass = (ClassBO) mRepository.persisteComponent( classBO1 );
// On cr�e une m�thode avec la classe persistante
ClassBO classBO2 = createClassBO();
MethodBO methodBO = getComponentFactory().createMethod( getSession(), classBO2 );
MethodBO persistentMethod = (MethodBO) mRepository.persisteComponent( methodBO );
getSession().commitTransactionWithoutClose();
assertEquals( "method", persistentMethod.getName() );
assertEquals( "fileName", persistentMethod.getLongFileName() );
assertTrue( -1 != persistentMethod.getId() );
}
/**
* @return une classe
*/
private ClassBO createClassBO()
{
String absoluteClassName = "org.squale.projetTest.ClassTest";
return createClassBO( absoluteClassName );
}
/**
* @param pAbsoluteClassName le nom absolu de la classe
* @return une classe
*/
private ClassBO createClassBO( String pAbsoluteClassName )
{
JavaParser javaParser = new JavaParser( mProject );
return javaParser.getClass( pAbsoluteClassName );
}
/**
* @return une classe sans package
*/
private ClassBO createClassBOWithoutPackage()
{
String absoluteClassName = "ClassTest";
JavaParser javaParser = new JavaParser( mProject );
return javaParser.getClass( absoluteClassName );
}
}