/** * 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.parser; import org.squale.squalecommon.SqualeTestCase; import org.squale.squalecommon.enterpriselayer.businessobject.component.ClassBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.MethodBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.ProjectBO; /** * Test pour le parser java */ public class JavaParserTest extends SqualeTestCase { /** * Test la m�thode getClass * * @see org.squale.squalix.util.parser.JavaParser#getClass(java.lang.String, java.lang.String) */ public void testGetClass() { String fileName = "D:/chemin/projetTest/ClassTest.java"; String absoluteClassName = "org.squale.projetTest.ClassTest"; ProjectBO project = new ProjectBO( "projetTest" ); JavaParser javaParser = new JavaParser( project ); ClassBO classBO = javaParser.getClass( absoluteClassName ); assertEquals( "ClassTest", classBO.getName() ); assertEquals( 0, classBO.getChildren().size() ); assertEquals( "projetTest", classBO.getParent().getName() ); assertEquals( "squale", classBO.getParent().getParent().getName() ); assertEquals( "org", classBO.getParent().getParent().getParent().getName() ); assertEquals( "projetTest", classBO.getParent().getParent().getParent().getParent().getName() ); // On test la r�cup�ration de la classe avec son fichier classBO = javaParser.getClass( absoluteClassName, "chemin/projetTest/ClassTest.java" ); assertEquals( "chemin/projetTest/ClassTest.java", classBO.getFileName() ); } /** * Test la m�thode getClass avec classe imbriqu�e fa�on McCabe * * @see org.squale.squalix.util.parser.JavaParser#getClass(java.lang.String, java.lang.String) */ public void testGetInnerClass() { String absoluteClassName = "org.squale.projetTest.ClassTest.InnerClass1"; ProjectBO project = new ProjectBO( "projetTest" ); JavaParser javaParser = new JavaParser( project ); javaParser.addKnownClass( "org.squale.projetTest.ClassTest" ); ClassBO classBO = javaParser.getClass( absoluteClassName ); assertEquals( "InnerClass1", classBO.getName() ); assertEquals( 0, classBO.getChildren().size() ); assertEquals( "ClassTest", classBO.getParent().getName() ); assertEquals( "projetTest", classBO.getParent().getParent().getName() ); assertEquals( "squale", classBO.getParent().getParent().getParent().getName() ); assertEquals( "org", classBO.getParent().getParent().getParent().getParent().getName() ); assertEquals( "projetTest", classBO.getParent().getParent().getParent().getParent().getParent().getName() ); } /** * Test la m�thode getClass avec classes imbriqu�es fa�on McCabe * * @see org.squale.squalix.util.parser.JavaParser#getClass(java.lang.String, java.lang.String) */ public void testGetInnerClasses() { String absoluteClassName = "org.squale.projetTest.ClassTest.InnerClass1.InnerClass2"; ProjectBO project = new ProjectBO( "projetTest" ); JavaParser javaParser = new JavaParser( project ); javaParser.addKnownClass( "org.squale.projetTest.ClassTest" ); javaParser.addKnownClass( "org.squale.projetTest.ClassTest.InnerClass1" ); ClassBO classBO = javaParser.getClass( absoluteClassName ); assertEquals( "InnerClass2", classBO.getName() ); assertEquals( 0, classBO.getChildren().size() ); assertEquals( "InnerClass1", classBO.getParent().getName() ); assertEquals( "ClassTest", classBO.getParent().getParent().getName() ); assertEquals( "projetTest", classBO.getParent().getParent().getParent().getName() ); assertEquals( "squale", classBO.getParent().getParent().getParent().getParent().getName() ); assertEquals( "org", classBO.getParent().getParent().getParent().getParent().getParent().getName() ); assertEquals( "projetTest", classBO.getParent().getParent().getParent().getParent().getParent().getParent().getName() ); } /** * Teste la m�thode getClass avec une classe interne d�finie dans un bloc * * @see org.squale.squalix.util.parser.JavaParser#getMethod(java.lang.String, java.lang.String) */ public void testGetBlockInnerClass() { String absoluteClassName = "org.squale.projetTest.ClassTest$1InnerClass"; ProjectBO project = new ProjectBO( "projetTest" ); JavaParser javaParser = new JavaParser( project ); ClassBO classBO = javaParser.getClass( absoluteClassName ); assertEquals( "InnerClass", classBO.getName() ); assertEquals( "ClassTest", classBO.getParent().getName() ); assertEquals( "projetTest", classBO.getParent().getParent().getName() ); assertEquals( "squale", classBO.getParent().getParent().getParent().getName() ); } /** * Teste la m�thode getClass avec une classe bugg�e par McCabe * * @see org.squale.squalix.util.parser.JavaParser#getMethod(java.lang.String, java.lang.String) */ public void testGetIncorrectClassName() { String absoluteClassName = "org.squale.1.InnerClass"; ProjectBO project = new ProjectBO( "projetTest" ); JavaParser javaParser = new JavaParser( project ); ClassBO classBO = javaParser.getClass( absoluteClassName ); assertNull( classBO ); } /** * Teste la m�thode getMethod avec une classe interne * * @see org.squale.squalix.util.parser.JavaParser#getMethod(java.lang.String, java.lang.String) */ public void testGetMethod() { String fileName = "ClassTest.java"; String absoluteMethodName = "org.squale.projetTest.ClassTest$InnerClass.myMethod(String qq)"; ProjectBO project = new ProjectBO( "projetTest" ); JavaParser javaParser = new JavaParser( project ); MethodBO methodBO = javaParser.getMethod( absoluteMethodName, fileName ); assertEquals( "myMethod(String qq)", methodBO.getName() ); assertEquals( fileName, methodBO.getLongFileName() ); assertEquals( "InnerClass", methodBO.getParent().getName() ); assertEquals( "ClassTest", methodBO.getParent().getParent().getName() ); assertEquals( "projetTest", methodBO.getParent().getParent().getParent().getName() ); assertEquals( "squale", methodBO.getParent().getParent().getParent().getParent().getName() ); } /** * Teste la m�thode getMethod avec une m�thode static * * @see org.squale.squalix.util.parser.JavaParser#getMethod(java.lang.String, java.lang.String) */ public void testGetMethodStatic() { String fileName = "ClassTest.java"; String absoluteMethodName = "org.squale.projetTest.ClassTest$InnerClass#StaticInitializer#1"; ProjectBO project = new ProjectBO( "projetTest" ); JavaParser javaParser = new JavaParser( project ); MethodBO methodBO = javaParser.getMethod( absoluteMethodName, fileName ); assertEquals( "#StaticInitializer#1", methodBO.getName() ); assertEquals( fileName, methodBO.getLongFileName() ); assertEquals( "InnerClass", methodBO.getParent().getName() ); assertEquals( "ClassTest", methodBO.getParent().getParent().getName() ); assertEquals( "projetTest", methodBO.getParent().getParent().getParent().getName() ); assertEquals( "squale", methodBO.getParent().getParent().getParent().getParent().getName() ); } /** * Teste la m�thode getMethod avec une m�thode bugg�e par McCabe. * * @see org.squale.squalix.util.parser.JavaParser#getMethod(java.lang.String, java.lang.String) */ public void testGetDuplicateMethod() { String fileName = "ClassTest.java"; String absoluteMethodName = "org.squale.projetTest.ClassTest.main(java.lang.String)_#1"; ProjectBO project = new ProjectBO( "projetTest" ); JavaParser javaParser = new JavaParser( project ); MethodBO methodBO = javaParser.getMethod( absoluteMethodName, fileName ); assertNull( methodBO ); } /** * Teste la m�thode getMethod avec une m�thode d�finie dans une classe interne elle-m�me d�finie dans un bloc fa�on * McCabe. * * @see org.squale.squalix.util.parser.JavaParser#getMethod(java.lang.String, java.lang.String) */ public void testGetMcCabeMethod() { String fileName = "ClassTest.java"; String absoluteMethodName = "org.squale.projetTest.ClassTest.method`InnerClass.main(java.lang.String)"; ProjectBO project = new ProjectBO( "projetTest" ); JavaParser javaParser = new JavaParser( project ); javaParser.addKnownClass( "org.squale.projetTest.ClassTest" ); MethodBO methodBO = javaParser.getMethod( absoluteMethodName, fileName ); assertEquals( "main(java.lang.String)", methodBO.getName() ); assertEquals( fileName, methodBO.getLongFileName() ); assertEquals( "InnerClass", methodBO.getParent().getName() ); assertEquals( "ClassTest", methodBO.getParent().getParent().getName() ); assertEquals( "projetTest", methodBO.getParent().getParent().getParent().getName() ); assertEquals( "squale", methodBO.getParent().getParent().getParent().getParent().getName() ); } /** * Teste le cas des classes anonymes McCabe */ public void testAnonymousClasses() { ProjectBO project = new ProjectBO( "projetTest" ); JavaParser javaParser = new JavaParser( project ); String fileName = "ClassTest.java"; // Premi�re m�thode String absoluteMethodName = "org.squale.projetTest.ClassTest.method1(java.lang.String)$" + JavaParser.MC_CABE_ANONYMOUS_CLASS_NAME + "001_" + ".method1_1(java.io.File, java.lang.String)"; MethodBO methodBO = javaParser.getMethod( absoluteMethodName, fileName ); assertEquals( "method1_1(java.io.File, java.lang.String)", methodBO.getName() ); assertEquals( fileName, methodBO.getLongFileName() ); assertEquals( JavaParser.ANONYMOUS_CLASS_NAME + "1", methodBO.getParent().getName() ); assertEquals( "ClassTest", methodBO.getParent().getParent().getName() ); assertEquals( "projetTest", methodBO.getParent().getParent().getParent().getName() ); assertEquals( "squale", methodBO.getParent().getParent().getParent().getParent().getName() ); // Deuxi�me m�thode String absoluteMethodName2 = "org.squale.projetTest.ClassTest.method2(java.lang.String)$" + JavaParser.MC_CABE_ANONYMOUS_CLASS_NAME + "001_" + ".method2_1(java.io.File, java.lang.String)"; MethodBO methodBO2 = javaParser.getMethod( absoluteMethodName2, fileName ); assertEquals( "method2_1(java.io.File, java.lang.String)", methodBO2.getName() ); assertEquals( fileName, methodBO2.getLongFileName() ); assertEquals( JavaParser.ANONYMOUS_CLASS_NAME + "2", methodBO2.getParent().getName() ); assertEquals( "ClassTest", methodBO2.getParent().getParent().getName() ); assertEquals( "projetTest", methodBO2.getParent().getParent().getParent().getName() ); assertEquals( "squale", methodBO2.getParent().getParent().getParent().getParent().getName() ); // Classe de la deuxi�me m�thode String absoluteClassName2 = "org.squale.projetTest.ClassTest.method2(java.lang.String)$" + JavaParser.MC_CABE_ANONYMOUS_CLASS_NAME + "001_"; ClassBO classBO2 = javaParser.getClass( absoluteClassName2 ); assertEquals( JavaParser.ANONYMOUS_CLASS_NAME + "2", classBO2.getName() ); assertEquals( "ClassTest", classBO2.getParent().getName() ); assertEquals( "projetTest", classBO2.getParent().getParent().getName() ); assertEquals( "squale", classBO2.getParent().getParent().getParent().getName() ); // Classe de la premi�re m�thode String absoluteClassName = "org.squale.projetTest.ClassTest.method1(java.lang.String)$" + JavaParser.MC_CABE_ANONYMOUS_CLASS_NAME + "001_"; ClassBO classBO = javaParser.getClass( absoluteClassName ); assertEquals( JavaParser.ANONYMOUS_CLASS_NAME + "1", classBO.getName() ); assertEquals( "ClassTest", classBO.getParent().getName() ); assertEquals( "projetTest", classBO.getParent().getParent().getName() ); assertEquals( "squale", classBO.getParent().getParent().getParent().getName() ); } /** * Test les remont�es statiques dans le cas d'un lien symbolique (McCabe casse ne remonte pas les packages) */ public void testBrokenLink() { ProjectBO project = new ProjectBO( "projetTest" ); JavaParser javaParser = new JavaParser( project ); javaParser.addKnownClass( "ClasseTest.ClasseTest" ); javaParser.addKnownClass( "ClasseTest" ); String fileName = "ClassTest.java"; String absoluteMethodName = "ClassTest.ClassTest#StaticInitializer#1"; MethodBO methodBO = javaParser.getMethod( absoluteMethodName, fileName ); assertEquals( "#StaticInitializer#1", methodBO.getName() ); } }