package husaccttest.analyse;
import husacct.ServiceProvider;
import husacct.analyse.IAnalyseService;
import husacct.common.dto.DependencyDTO;
import husacct.common.dto.ProjectDTO;
import husacct.common.dto.SoftwareUnitDTO;
import husacct.common.dto.UmlLinkDTO;
import husacct.common.enums.DependencySubTypes;
import husacct.control.ControlServiceImpl;
import husacct.control.task.MainController;
import husacct.control.task.WorkspaceController;
import husacct.validate.IValidateService;
import husaccttest.TestResourceFinder;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.TreeMap;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
public class CSharp_AccuracyTestDependencyDetection {
private static ControlServiceImpl controlService;
private static MainController mainController;
private static WorkspaceController workspaceController;
private static Logger logger;
private static IAnalyseService analyseService = null;
private static IValidateService validateService = null;
private static String path;
private static String language = "C#";
@BeforeClass
public static void beforeClass() {
try {
setLog4jConfiguration();
logger.info(String.format("Starting CSharp Accuracy Test"));
createWorkspace("CSharpAccuracyTest");
// Create Application
path = new File(TestResourceFinder.findSourceCodeDirectory("csharp", "benchmark")).getAbsolutePath();
ArrayList<ProjectDTO> projects = createProjectDTOs();
ServiceProvider.getInstance().getDefineService().createApplication(language +" test", projects, "1.0");
analyseApplication();
//analyseApplication() starts a different Thread, and needs some time
boolean isAnalysing = true;
controlService = (ControlServiceImpl) ServiceProvider.getInstance().getControlService();
mainController = controlService.getMainController();
while(isAnalysing){
try {
Thread.sleep(10);
} catch (InterruptedException e) {}
isAnalysing = mainController.getStateController().isAnalysing();
}
/* checkConformance();
//checkConformance() starts a different Thread, and needs some time
boolean isValidating = true;
controlService = (ControlServiceImpl) ServiceProvider.getInstance().getControlService();
mainController = controlService.getMainController();
while(isValidating){
try {
Thread.sleep((long)10);
} catch (InterruptedException e) {}
isValidating = mainController.getStateController().isValidating();
} */
} catch (Exception e){
String errorMessage = "Exception: " + e.getMessage();
logger.warn(errorMessage);
}
}
@AfterClass
public static void tearDown(){
workspaceController.closeWorkspace();
}
// TESTS
// DIRECT
// Access
@Test
public void AccessClassVariable(){
String fromClass = "Domain.Direct.Violating.AccessClassVariable";
String toClass = "Technology.Direct.Dao.CheckInDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void AccessClassVariableConstant(){
String fromClass = "Domain.Direct.Violating.AccessClassVariableConstant";
String toClass = "Technology.Direct.Dao.UserDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void AccessClassVariableInterface(){
String fromClass = "Domain.Direct.Violating.AccessClassVariableInterface";
String toClass = "Technology.Direct.Dao.ISierraDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void AccessEnumeration(){
String fromClass = "Domain.Direct.Violating.AccessEnumeration";
String toClass = "Technology.Direct.Dao.TipDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void AccessEnumerationInner(){
String fromClass = "Domain.Direct.Violating.AccessInnerEnumeration";
String toClass = "Technology.Direct.Dao.CallInstanceOuterClassDAO.InnerEnumeration";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void AccessInstanceVariableRead(){
String fromClass = "Domain.Direct.Violating.AccessInstanceVariableRead";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void AccessInstanceVariableWrite(){
String fromClass = "Domain.Direct.Violating.AccessInstanceVariableWrite";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void AccessInstanceVariableConstant(){
String fromClass = "Domain.Direct.Violating.AccessInstanceVariableConstant";
String toClass = "Technology.Direct.Dao.UserDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void AccessInstanceVariableSuperClass(){
String fromClass = "Domain.Direct.Violating.AccessInstanceVariableSuperClass";
String toClass = "Technology.Direct.Subclass.CallInstanceSubClassDOA";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
boolean outcome1 = areDependencyTypesDetected(fromClass, toClass, typesToFind, false);
toClass = "Technology.Direct.Dao.CallInstanceSuperClassDAO";
boolean outcome2 = areDependencyTypesDetected(fromClass, toClass, typesToFind, true);
boolean totalOutcome = false;
if ((outcome1 == true) && (outcome2 == true)) {
totalOutcome = true;
}
Assert.assertTrue(totalOutcome);
}
@Test
public void AccessInstanceVariableSuperSuperClass(){
String fromClass = "Domain.Direct.Violating.AccessInstanceVariableSuperSuperClass";
String toClass = "Technology.Direct.Subclass.CallInstanceSubSubClassDOA";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
boolean outcome1 = areDependencyTypesDetected(fromClass, toClass, typesToFind, false);
toClass = "Technology.Direct.Dao.CallInstanceSuperClassDAO";
boolean outcome2 = areDependencyTypesDetected(fromClass, toClass, typesToFind, true);
boolean totalOutcome = false;
if (outcome1 && outcome2) {
totalOutcome = true;
}
Assert.assertTrue(totalOutcome);
}
@Test
public void AccessFromInnerClass(){
String fromClass = "Domain.Direct.Violating.CallFromInnerClass.CallingInnerClass";
String toClass = "Domain.Direct.Base";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessInstanceVariable_SetArgumentValue(){
String fromClass = "Domain.Direct.Violating.AccessInstanceVariable_SetArgumentValue";
String toClass = "Technology.Direct.Dao.CheckInDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessObjectReferenceAsParameter(){
String fromClass = "Domain.Direct.Violating.AccessObjectReferenceAsParameter";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void AccessLocalVariable_ReadArgumentValue(){
String fromClass = "Domain.Direct.Violating.AccessLocalVariable_ReadArgumentValue";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void AccessLocalVariable_SetArgumentValue(){
String fromClass = "Domain.Direct.Violating.AccessLocalVariable_SetArgumentValue";
String toClass = "Technology.Direct.Dao.CheckInDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessObjectReferenceWithinIfStatement(){
String fromClass = "Domain.Direct.Violating.AccessObjectReferenceWithinIfStatement";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
// Annotation
@Test
public void AnnotationDependency(){ // Asserts False, since annotations are not supported in C#
String fromClass = "Domain.Direct.Violating.AnnotationDependency";
String toClass = "Technology.Direct.Dao.SettingsAnnotation";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Annotation");
Assert.assertFalse(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
// Call
@Test
public void CallClassMethod(){
String fromClass = "Domain.Direct.Violating.CallClassMethod";
String toClass = "Technology.Direct.Dao.BadgesDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallClassMethod_ClassesWithoutNamespace(){
String fromClass = "No_Namespace_Domain_Direct_Violating.CallClassMethod_ClassWithoutNamespace1";
String toClass = "Technology.Direct.Dao.BadgesDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
fromClass = "No_Namespace_Domain_Direct_Violating.CallClassMethod_ClassWithoutNamespace2";
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallClassMethod_ClassesWithinMultipleNamespaces(){
String fromClass = "Domain.Direct.Violating.Namespace1.CallClassMethod_ClassWithNamespace1";
String toClass = "Technology.Direct.Dao.BadgesDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
fromClass = "Domain.Direct.Violating.Namespace2.CallClassMethod_ClassWithNamespace2";
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallClassMethod_ClassWithinSubNamespace(){
String fromClass = "Domain.Direct.Violating.Namespace2.Namespace2_1.CallClassMethod_ClassWithNamespace2_1";
String toClass = "Technology.Direct.Dao.BadgesDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
toClass = "Domain.Direct.Violating.Namespace1.IClassWithNamespace1";
typesToFind.clear();
typesToFind.add("Inheritance");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallClassMethod_LOC_MultipleNamespaces(){
String fromClass = "No_Namespace_Domain_Direct_Violating.CallClassMethod_ClassWithoutNamespace1";
analyseService = ServiceProvider.getInstance().getAnalyseService();
SoftwareUnitDTO selectedModule = analyseService.getSoftwareUnitByUniqueName(fromClass);
int loc = analyseService.getAnalysisStatistics(selectedModule).selectionNrOfLinesOfCode;
Assert.assertTrue(loc == 8);
}
@Test
public void CallConstructor(){
String fromClass = "Domain.Direct.Violating.CallConstructor";
String toClass = "Technology.Direct.Dao.AccountDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallConstructor_GenericType_MultipleTypeParameters(){
String fromClass = "Domain.Direct.Violating.CallConstructor_GenericType_MultipleTypeParameters";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, "Technology.Direct.Dao.ProfileDAO", typesToFind, DependencySubTypes.REF_TYPE.toString(), false));
Assert.assertTrue(areDependencyTypesDetected(fromClass, "Technology.Direct.Dao.UserDAO", typesToFind, DependencySubTypes.REF_TYPE.toString(), false));
}
@Test
public void CallConstructorInnerClass(){
String fromClass = "Domain.Direct.Violating.CallConstructorInnerClass";
String toClass = "Technology.Direct.Dao.CallInstanceOuterClassDAO.CallInstanceInnerClassDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallConstructorLibraryClass(){ // Asserts False, since HUSACCT is not able to detect invocations on library classes.
String fromClass = "Domain.Direct.Violating.CallConstructorLibraryClass";
String toClass = "FI.Foyt.Foursquare.Api.FoursquareApi";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertFalse(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallConstructorSuper(){
String fromClass = "Domain.Direct.Violating.CallConstructorSuper";
String toClass = "Technology.Direct.Dao.HistoryDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false)); }
@Test
public void CallFromInnerClass(){
String fromClass = "Domain.Direct.Violating.CallFromInnerClass.CallingInnerClass";
String toClass = "Technology.Direct.Dao.CallInstanceOuterClassDAO.CallInstanceInnerClassDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallInstance(){
String fromClass = "Domain.Direct.Violating.CallInstance";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallInstanceGeneric(){
String fromClass = "Domain.Direct.Violating.CallInstanceGeneric";
String toClass = "Technology.Direct.Dao.ProfileDAO<p1, p2>";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallInstanceInnerClass(){
String fromClass = "Domain.Direct.Violating.CallInstanceInnerClass";
String toClass = "Technology.Direct.Dao.CallInstanceOuterClassDAO.CallInstanceInnerClassDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallConstructorInnerClassDefault(){
String fromClass = "Domain.Direct.Violating.CallConstructorInnerClassDefault";
String toClass = "Technology.Direct.Dao.CallInstanceOuterClassDAO.CallInstanceInnerClassDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallConstructorInnerClassFromOtherInnerClass(){
String fromClass = "Technology.Direct.Dao.CallInstanceOuterClassDAO.TestConstructorCallOfInnerClass";
String toClass = "Technology.Direct.Dao.CallInstanceOuterClassDAO.CallInstanceInnerClassDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallInstanceInnerInterface(){
String fromClass = "Domain.Direct.Violating.CallInstanceInnerInterface";
String toClass = "Technology.Direct.Dao.CallInstanceOuterClassDAO.CallInstanceInnerInterfaceDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallInstanceInterface(){
String fromClass = "Domain.Direct.Violating.CallInstanceInterface";
String toClass = "Technology.Direct.Dao.CallInstanceInterfaceDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallInstanceInterfaceGenericInterface(){
String fromClass = "Domain.Direct.Violating.CallInstanceInterfaceGenericInterface";
String toClass = "Technology.Direct.Dao.CallInstanceInterfaceDAO<p1>";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallInstanceLibraryClass(){
String fromClass = "Domain.Direct.Violating.CallInstanceLibraryClass";
String toClass = "xLibraries.FI.Foyt.Foursquare.Api.FoursquareApi";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertFalse(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
typesToFind.clear();
typesToFind.add("Declaration");
Assert.assertFalse(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
typesToFind.clear();
typesToFind.add("Inheritance");
toClass = "Domain.Direct.Base";
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallInstanceOfSuperOverridden(){
String fromClass = "Domain.Direct.Violating.CallInstanceOfSuperOverridden";
String toClass = "Technology.Direct.Dao.HistoryDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false)); }
@Test
public void CallInstanceSuperClass(){
String fromClass = "Domain.Direct.Violating.CallInstanceSuperClass";
String toClass = "Technology.Direct.Subclass.CallInstanceSubClassDOA";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
boolean outcome1 = areDependencyTypesDetected(fromClass, toClass, typesToFind, false);
toClass = "Technology.Direct.Dao.CallInstanceSuperClassDAO";
boolean outcome2 = areDependencyTypesDetected(fromClass, toClass, typesToFind, false);
boolean totalOutcome = false;
if ((outcome1 == true) || (outcome2 == true)) {
totalOutcome = true;
}
Assert.assertTrue(totalOutcome);
}
@Test
public void CallInstanceSuperSuperClass(){
String fromClass = "Domain.Direct.Violating.CallInstanceSuperSuperClass";
String toClass = "Technology.Direct.Subclass.CallInstanceSubSubClassDOA";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
boolean outcome1 = areDependencyTypesDetected(fromClass, toClass, typesToFind, false);
toClass = "Technology.Direct.Subclass.CallInstanceSubClassDOA";
boolean outcome2 = areDependencyTypesDetected(fromClass, toClass, typesToFind, false);
toClass = "Technology.Direct.Dao.CallInstanceSuperClassDAO";
boolean outcome3 = areDependencyTypesDetected(fromClass, toClass, typesToFind, false);
boolean totalOutcome = false;
if ((outcome1 == true) || (outcome2 == true) || (outcome3 == true)) {
totalOutcome = true;
}
Assert.assertTrue(totalOutcome);
}
// Declaration
@Test
public void DeclarationExceptionThrows(){
String fromClass = "Domain.Direct.Violating.DeclarationExceptionThrows";
String toClass = "Technology.Direct.Dao.StaticsException";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Declaration");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void DeclarationInnerClass(){
String fromClass = "Domain.Direct.Base";
String toClass = "Technology.Direct.Dao.CallInstanceOuterClassDAO.CallInstanceInnerClassDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Declaration");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void DeclarationOuterClassByInnerClass(){
String fromClass = "Technology.Direct.Dao.CallInstanceOuterClassDAO.StaticNestedClass";
String toClass = "Technology.Direct.Dao.CallInstanceOuterClassDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Declaration");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void DeclarationParameter(){
String fromClass = "Domain.Direct.Violating.DeclarationParameter";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Declaration");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void DeclarationParameter_GenericType_OneTypeParameter(){
String fromClass = "Domain.Direct.Violating.DeclarationParameter_GenericType_OneTypeParameter";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, "Technology.Direct.Dao.ProfileDAO", typesToFind, DependencySubTypes.REF_TYPE.toString(), false));
}
@Test
public void DeclarationReturnType(){
String fromClass = "Domain.Direct.Violating.DeclarationReturnType";
String toClass = "Technology.Direct.Dao.VenueDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Declaration");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void DeclarationReturnType_GenericType_OneTypeParameter(){
String fromClass = "Domain.Direct.Violating.DeclarationReturnType_GenericType_OneTypeParameter";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, "Technology.Direct.Dao.ProfileDAO", typesToFind, DependencySubTypes.REF_TYPE.toString(), false));
}
@Test
public void DeclarationTypeCast(){
String fromClass = "Domain.Direct.Violating.DeclarationTypeCast";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void DeclarationTypeCastToInnerClass(){
String fromClass = "Domain.Direct.Violating.DeclarationTypeCastToInnerClass";
String toClass = "Technology.Direct.Dao.CallInstanceOuterClassDAO.CallInstanceInnerClassDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void DeclarationTypeCastOfArgument(){
String fromClass = "Domain.Direct.Violating.DeclarationTypeCastOfArgument";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void DeclarationVariableInstance(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableInstance";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Declaration");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void DeclarationVariableInstance_GenericType_OneTypeParameter(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableInstance_GenericType_OneTypeParameter";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Declaration");
Assert.assertTrue(areDependencyTypesDetected(fromClass, "Technology.Direct.Dao.AccountDAO", typesToFind, DependencySubTypes.DECL_INSTANCE_VAR.toString(), false));
typesToFind.clear();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, "Technology.Direct.Dao.BadgesDAO", typesToFind, DependencySubTypes.REF_TYPE.toString(), false));
Assert.assertTrue(areDependencyTypesDetected(fromClass, "Technology.Direct.Dao.CheckInDAO", typesToFind, DependencySubTypes.REF_TYPE.toString(), false));
}
@Test
public void DeclarationVariableInstance_GenericType_MultipleTypeParameters(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableInstance_GenericType_MultipleTypeParameters";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, "Technology.Direct.Dao.ProfileDAO", typesToFind, DependencySubTypes.REF_TYPE.toString(), false));
Assert.assertTrue(areDependencyTypesDetected(fromClass, "Technology.Direct.Dao.FriendsDAO", typesToFind, DependencySubTypes.REF_TYPE.toString(), false));
}
@Test
public void DeclarationVariableInstance_GenericType_MultipleTypeParameters_Complex(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableInstance_GenericType_MultipleTypeParameters_Complex";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, "Technology.Direct.Dao.ProfileDAO", typesToFind, DependencySubTypes.REF_TYPE.toString(), false));
Assert.assertTrue(areDependencyTypesDetected(fromClass, "Technology.Direct.Dao.FriendsDAO", typesToFind, DependencySubTypes.REF_TYPE.toString(), false));
}
@Test
public void DeclarationVariableStatic(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableStatic";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Declaration");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void DeclarationVariableLocal(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableLocal";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Declaration");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void DeclarationVariableLocal_Initialized(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableLocal_Initialized";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Declaration");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void DeclarationVariableWithinForStatement(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableWithinForStatement";
String toClass = "Technology.Direct.Dao.ProfileDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Declaration");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
// Import
@Test
public void ImportDependencyUnused(){
String fromClass = "Domain.Direct.Violating.ImportDependencyUnused";
String toClass = "Technology.Direct.Dao.AccountDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Import");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
// Inheritance
@Test
public void InheritanceExtends(){
String fromClass = "Domain.Direct.Violating.InheritanceExtends";
String toClass = "Technology.Direct.Dao.HistoryDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Inheritance");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
toClass = "Technology.Direct.Dao.IMapDAO";
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void InheritanceExtendsAbstractClass(){
String fromClass = "Domain.Direct.Violating.InheritanceExtendsAbstractClass";
String toClass = "Technology.Direct.Dao.FriendsDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Inheritance");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void InheritanceExtendsFullPath(){
String fromClass = "Domain.Direct.Violating.InheritanceExtendsFullPath";
String toClass = "Technology.Direct.Dao.HistoryDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Inheritance");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false)); }
@Test
public void InheritanceImplementsInterface(){
String fromClass = "Domain.Direct.Violating.InheritanceImplementsInterface";
String toClass = "Technology.Direct.Dao.IMapDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Inheritance");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
//TESTS
//INDIRECT
// Access
@Test
public void AccessInstanceVariableIndirect_MethodVar(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessInstanceVariableIndirect_MethodVar";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessInstanceVariableIndirect_VarVar(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessInstanceVariableIndirect_VarVar";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessInstanceVariableIndirect_VarVarToString(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessInstanceVariableIndirect_VarVarToString";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessInstanceVariableIndirectIndirect_MethodVarVar(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessInstanceVariableIndirectIndirect_MethodVarVar";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessInstanceVariableIndirectIndirect_VarVarVar(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessInstanceVariableIndirectIndirect_VarVarVar";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessInstanceVariableIndirect_SuperClass(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessInstanceVariableIndirect_SuperClass";
String toClass = "Technology.Direct.Dao.CallInstanceSuperClassDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessInstanceVariableIndirect_SuperSuperClass(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessInstanceVariableIndirect_SuperSuperClass";
String toClass = "Technology.Direct.Dao.CallInstanceSuperClassDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessObjectReferenceIndirect_AsParameter_POI(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessObjectReferenceIndirect_AsParameter_POI";
String toClass = "Domain.Indirect.IndirectTo.POI";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessObjectReferenceIndirect_AsReturnValueOfSuperClassMethod_FromSide(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessObjectReferenceIndirect_AsReturnValueOfSuperClassMethod_FromSide";
String toClass = "Domain.Indirect.IndirectTo.POI";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessObjectReferenceIndirect_AsReturnValue_MethodDerivedViaArgumentType(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessObjectReferenceIndirect_AsReturnValue_MethodDerivedViaArgumentType";
String toClass = "Domain.Indirect.IndirectTo.POI";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessObjectReferenceIndirect_AsReturnValue_MethodDerivedViaHeuristic(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessObjectReferenceIndirect_AsReturnValue_MethodDerivedViaHeuristic";
String toClass = "Domain.Indirect.IndirectTo.POI";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessObjectReferenceIndirect_AsParameter(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessObjectReferenceIndirect_AsParameter";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessObjectReferenceIndirect_WithinIfStament_POI(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessObjectReferenceIndirect_WithinIfStament_POI";
String toClass = "Domain.Indirect.IndirectTo.POI";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessObjectReferenceIndirect_WithinIfStament(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessObjectReferenceIndirect_WithinIfStament";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Reference");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessStaticVariableIndirect_MethodVar(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessStaticVariableIndirect_MethodVar";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessStaticVariableIndirect_VarVar(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessStaticVariableIndirect_VarVar";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessStaticVariableIndirect_VarVarToString(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessStaticVariableIndirect_VarVarToString";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessStaticVariableIndirectIndirect_MethodVarVar(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessStaticVariableIndirectIndirect_MethodVarVar";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void AccessStaticVariableIndirectIndirect_VarVarVar(){
String fromClass = "Domain.Indirect.ViolatingFrom.AccessStaticVariableIndirectIndirect_VarVarVar";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Access");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
// Call
@Test
public void CallInstanceMethodIndirect_MethodMethod(){
String fromClass = "Domain.Indirect.ViolatingFrom.CallInstanceMethodIndirect_MethodMethod";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void CallInstanceMethodIndirect_MethodMethodToString(){
String fromClass = "Domain.Indirect.ViolatingFrom.CallInstanceMethodIndirect_MethodMethodToString";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void CallInstanceMethodIndirect_MethodMethod_ViaConstructor(){
String fromClass = "Domain.Indirect.ViolatingFrom.CallInstanceMethodIndirect_MethodMethod_ViaConstructor";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void CallInstanceMethodIndirect_StaticMethodInstanceMethod(){
String fromClass = "Domain.Indirect.ViolatingFrom.CallInstanceMethodIndirect_StaticMethodInstanceMethod";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void CallInstanceMethodIndirect_SuperClass(){
String fromClass = "Domain.Indirect.ViolatingFrom.CallInstanceMethodIndirect_SuperClass";
String toClass = "Technology.Direct.Dao.CallInstanceSuperClassDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void CallInstanceMethodIndirect_SuperSuperClass(){
String fromClass = "Domain.Indirect.ViolatingFrom.CallInstanceMethodIndirect_SuperSuperClass";
String toClass = "Technology.Direct.Dao.CallInstanceSuperClassDAO";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void CallInstanceMethodIndirect_VarMethod(){
String fromClass = "Domain.Indirect.ViolatingFrom.CallInstanceMethodIndirect_VarMethod";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void CallInstanceMethodIndirectIndirect_MethodVarMethod(){
String fromClass = "Domain.Indirect.ViolatingFrom.CallInstanceMethodIndirectIndirect_MethodVarMethod";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void CallInstanceMethodIndirectIndirect_VarVarMethod(){
String fromClass = "Domain.Indirect.ViolatingFrom.CallInstanceMethodIndirectIndirect_VarVarMethod";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void CallStaticMethodIndirect_MethodStaticMethod(){
String fromClass = "Domain.Indirect.ViolatingFrom.CallStaticMethodIndirect_MethodStaticMethod";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void CallStaticMethodIndirect_VarStaticMethod(){
String fromClass = "Domain.Indirect.ViolatingFrom.CallStaticMethodIndirect_VarStaticMethod";
String toClass = "Domain.Indirect.IndirectTo.ServiceOne";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Call");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
// Inheritance
@Test
public void InheritanceExtendsExtendsIndirect(){
String fromClass = "Domain.Indirect.ViolatingFrom.InheritanceExtendsExtendsIndirect";
String toClass = "Domain.Indirect.IndirectTo.POI";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Inheritance");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void InheritanceExtendsImplementsIndirect(){
String fromClass = "Domain.Indirect.ViolatingFrom.InheritanceExtendsImplementsIndirect";
String toClass = "Domain.Indirect.IndirectTo.IPreferences";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Inheritance");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
@Test
public void InheritanceFromInnerClass(){
String fromClass = "Domain.Direct.Violating.CallFromInnerClass.CallingInnerClass";
String toClass = "Domain.Direct.Base";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Inheritance");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, false));
}
@Test
public void InheritanceImplementsExtendsIndirect(){
String fromClass = "Domain.Indirect.ViolatingFrom.InheritanceImplementsExtendsIndirect";
String toClass = "Domain.Indirect.IndirectTo.IPreferences";
ArrayList<String> typesToFind = new ArrayList<String>();
typesToFind.add("Inheritance");
Assert.assertTrue(areDependencyTypesDetected(fromClass, toClass, typesToFind, true));
}
// Violations: Test if all found violating dependencies are reported as violations
/* @Test
public void ViolationsDirect_CompareToNumberOfDirectDependencies_violating_dao(){
String fromClass = "Domain.Direct.Violating";
String toClass = "technology.direct";
analyseService = ServiceProvider.getInstance().getAnalyseService();
validateService = ServiceProvider.getInstance().getValidateService();
int numberOfDependencies = analyseService.getDependencies(fromClass, toClass).length;
int numberOfViolations = validateService.getViolationsByPhysicalPath(fromClass, toClass).length;
Assert.assertTrue(numberOfDependencies == numberOfViolations);
}
@Test
public void ViolationsDirect_CompareToNumberOfDirectDependencies_violating_foursquare(){
String fromClass = "Domain.Direct.Violating";
String toClass = "Fi.Foyt.Foursquare.Api";
analyseService = ServiceProvider.getInstance().getAnalyseService();
validateService = ServiceProvider.getInstance().getValidateService();
int numberOfDependencies = analyseService.getDependencies(fromClass, toClass).length;
int numberOfViolations = validateService.getViolationsByPhysicalPath(fromClass, toClass).length;
Assert.assertTrue(numberOfDependencies == numberOfViolations);
}
@Test
public void ViolationsInDirect_CompareToNumberOfInDirectDependencies_violatingfrom_indirectto(){
String fromClass = "Domain.Indirect.ViolatingFrom";
String toClass = "Domain.Indirect.IndirectTo";
analyseService = ServiceProvider.getInstance().getAnalyseService();
validateService = ServiceProvider.getInstance().getValidateService();
int numberOfDependencies = analyseService.getDependencies(fromClass, toClass).length;
int numberOfViolations = validateService.getViolationsByPhysicalPath(fromClass, toClass).length;
Assert.assertTrue(numberOfDependencies == numberOfViolations);
}
@Test
public void ViolationsInDirect_CompareToNumberOfInDirectDependencies_violatingfrom_dao(){
String fromClass = "Domain.Indirect.ViolatingFrom";
String toClass = "Technology.Direct.Dao";
analyseService = ServiceProvider.getInstance().getAnalyseService();
validateService = ServiceProvider.getInstance().getValidateService();
int numberOfDependencies = analyseService.getDependencies(fromClass, toClass).length;
int numberOfViolations = validateService.getViolationsByPhysicalPath(fromClass, toClass).length;
Assert.assertTrue(numberOfDependencies == numberOfViolations);
}
*/
// UmlLinkTypes: Positive
@Test
public void UmlLinkType_InstanceVariableDeclaration_NotComposite(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableInstance";
String toClass = "Technology.Direct.Dao.ProfileDAO";
String fromAttribute = "pdao";
boolean isComposite = false;
String typeToFind = "Attribute";
Assert.assertTrue(isUmlLinkDetected(fromClass, toClass, fromAttribute, isComposite, typeToFind));
}
@Test
public void UmlLinkType_InstanceVariableDeclaration_Composite_Array(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableInstance_GenericType_OneTypeParameter";
String toClass = "Technology.Direct.Dao.AccountDAO";
String fromAttribute = "aDao";
boolean isComposite = true;
String typeToFind = "Attribute";
Assert.assertTrue(isUmlLinkDetected(fromClass, toClass, fromAttribute, isComposite, typeToFind));
}
@Test
public void UmlLinkType_InstanceVariableDeclaration_Composite_List(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableInstance_GenericType_OneTypeParameter";
String toClass = "Technology.Direct.Dao.BadgesDAO";
String fromAttribute = "bDao";
boolean isComposite = true;
String typeToFind = "Attribute";
Assert.assertTrue(isUmlLinkDetected(fromClass, toClass, fromAttribute, isComposite, typeToFind));
}
@Test
public void UmlLinkType_InstanceVariableDeclaration_Composite_HashSet(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableInstance_GenericType_OneTypeParameter";
String toClass = "Technology.Direct.Dao.CheckInDAO";
String fromAttribute = "cDao";
boolean isComposite = true;
String typeToFind = "Attribute";
Assert.assertTrue(isUmlLinkDetected(fromClass, toClass, fromAttribute, isComposite, typeToFind));
}
@Test
public void UmlLinkType_VariableInstance_GenericType_MultipleTypeParameters(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableInstance_GenericType_MultipleTypeParameters";
String toClass = "Technology.Direct.Dao.FriendsDAO";
String fromAttribute = "dictionary";
boolean isComposite = true;
String typeToFind = "Attribute";
Assert.assertTrue(isUmlLinkDetected(fromClass, toClass, fromAttribute, isComposite, typeToFind));
}
@Test
public void UmlLinkType_InstanceVariableDeclaration_MultipleAttributesOfTheSameTypeAtTheSameLine(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableInstance_MultipleAttributesAtTheSameLine";
String toClass = "Technology.Direct.Dao.ProfileDAO";
String fromAttribute = "p1Dao";
boolean isComposite = false;
String typeToFind = "Attribute";
Assert.assertTrue(isUmlLinkDetected(fromClass, toClass, fromAttribute, isComposite, typeToFind));
fromAttribute = "p2Dao";
Assert.assertTrue(isUmlLinkDetected(fromClass, toClass, fromAttribute, isComposite, typeToFind));
fromAttribute = "p3Dao";
Assert.assertTrue(isUmlLinkDetected(fromClass, toClass, fromAttribute, isComposite, typeToFind));
}
@Test
public void UmlLinkType_Inherits(){
String fromClass = "Domain.Direct.Violating.InheritanceExtends";
String toClass = "Technology.Direct.Dao.HistoryDAO";
String fromAttribute = "";
boolean isComposite = false;
String typeToFind = "Inherits";
Assert.assertTrue(isUmlLinkDetected(fromClass, toClass, fromAttribute, isComposite, typeToFind));
}
@Test
public void UmlLinkType_Implements(){
String fromClass = "Domain.Direct.Violating.InheritanceImplementsInterface";
String toClass = "Technology.Direct.Dao.IMapDAO";
String fromAttribute = "";
boolean isComposite = false;
String typeToFind = "Implements";
Assert.assertTrue(isUmlLinkDetected(fromClass, toClass, fromAttribute, isComposite, typeToFind));
}
// UmlLinkTypes: Negative
@Test
public void UmlLinkType_NotFromClassVariable(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableStatic";
String toClass = "Technology.Direct.Dao.ProfileDAO";
Assert.assertTrue(isUmlLinkNotDetected(fromClass, toClass));
}
@Test
public void UmlLinkType_NotFromGenericTypeDeclarationWithMultipleTypeParameters(){
String fromClass = "Domain.Direct.Violating.DeclarationVariableInstance_GenericType_MultipleTypeParameters";
String toClass = "Technology.Direct.Dao.ProfileDAO";
Assert.assertTrue(isUmlLinkNotDetected(fromClass, toClass));
}
@Test
public void UmlLinkType_NotFromLocalVariableDeclaration(){ // No UmlLinks should be caused by local variables.
String fromClass = "Domain.Direct.Violating.DeclarationVariableLocal";
String toClass = "Technology.Direct.Dao.ProfileDAO";
Assert.assertTrue(isUmlLinkNotDetected(fromClass, toClass));
}
@Test
public void UmlLinkType_NotFromParameterDeclaration(){ // No UmlLinks should be caused by local variables.
String fromClass = "Domain.Direct.Violating.DeclarationParameter";
String toClass = "Technology.Direct.Dao.ProfileDAO";
Assert.assertTrue(isUmlLinkNotDetected(fromClass, toClass));
}
@Test
public void UmlLinkType_NotFromReturnTypeDeclaration(){ // No UmlLinks should be caused by local variables.
String fromClass = "Domain.Direct.Violating.DeclarationReturnType_GenericType_OneTypeParameter";
String toClass = "Technology.Direct.Dao.ProfileDAO";
Assert.assertTrue(isUmlLinkNotDetected(fromClass, toClass));
}
//
//private helpers
//
private static void setLog4jConfiguration() {
URL propertiesFile = Class.class.getResource("/husacct/common/resources/log4j.properties");
PropertyConfigurator.configure(propertiesFile);
logger = Logger.getLogger(CSharp_AccuracyTestDependencyDetection.class);
}
private static ArrayList<ProjectDTO> createProjectDTOs(){
ArrayList<ProjectDTO> projects = new ArrayList<ProjectDTO>();
ArrayList<String> paths = new ArrayList<String>();
paths.add(path);
ArrayList<SoftwareUnitDTO> analysedModules = new ArrayList<SoftwareUnitDTO>();
ProjectDTO project = new ProjectDTO("C# Accuracy Test", paths, language, "version0", "for testing purposes", analysedModules);
projects.add(project);
return projects;
}
private static void createWorkspace(String name) {
controlService = (ControlServiceImpl) ServiceProvider.getInstance().getControlService();
mainController = controlService.getMainController();
workspaceController = mainController.getWorkspaceController();
workspaceController.createWorkspace(name);
}
private static void loadWorkspace(String location) {
logger.info(String.format("Loading workspace %s", location));
File file = new File(location);
if(file.exists()){
HashMap<String, Object> dataValues = new HashMap<String, Object>();
dataValues.put("file", file);
workspaceController.loadWorkspace("Xml", dataValues);
if(workspaceController.isAWorkspaceOpened()){
logger.info(String.format("Workspace %s loaded", location));
} else {
logger.warn(String.format("Unable to open workspace %s", file.getAbsoluteFile()));
}
} else {
logger.warn(String.format("Unable to locate %s", file.getAbsoluteFile()));
}
}
private static void analyseApplication() {
controlService = (ControlServiceImpl) ServiceProvider.getInstance().getControlService();
mainController = controlService.getMainController();
mainController.getApplicationController().analyseApplication();
}
private static void checkConformance() {
ServiceProvider.getInstance().getControlService().setValidating(true);
logger.info(new Date().toString() + " CheckConformanceTask is Starting: IValidateService.checkConformance()" );
ServiceProvider.getInstance().getValidateService().getCategories();
ServiceProvider.getInstance().getValidateService().checkConformance();
ServiceProvider.getInstance().getControlService().setValidating(false);
logger.info(new Date().toString() + " CheckConformanceTask sets state Validating to false" );
}
private boolean areDependencyTypesDetected(String fromClass, String toClass, ArrayList<String> dependencyTypes, boolean isIndirect) {
boolean dependencyTypesDetected = false;
TreeMap<String, Boolean> foundDependencyTypes = new TreeMap<String, Boolean>();
analyseService = ServiceProvider.getInstance().getAnalyseService();
DependencyDTO[] foundDependencies = analyseService.getDependenciesFromClassToClass(fromClass, toClass);
int numberOfDependencies = foundDependencies.length;
for (String dependencyType : dependencyTypes) {
boolean found = false;
for (int i=0 ; i < numberOfDependencies; i++){
if (foundDependencies[i].type.equals(dependencyType) && (foundDependencies[i].isIndirect) == isIndirect) {
found = true;
}
}
foundDependencyTypes.put(dependencyType,found);
}
if (!foundDependencyTypes.containsValue(false)){
dependencyTypesDetected = true;
}
return dependencyTypesDetected;
}
private boolean areDependencyTypesDetected(String classFrom, String classTo, ArrayList<String> dependencyTypes, String subType, boolean isIndirect) {
boolean dependencyTypesDetected = false;
TreeMap<String, Boolean> foundDependencyTypes = new TreeMap<String, Boolean>();
analyseService = ServiceProvider.getInstance().getAnalyseService();
DependencyDTO[] foundDependencies = analyseService.getDependenciesFromClassToClass(classFrom, classTo);
int numberOfDependencies = foundDependencies.length;
for (String dependencyType : dependencyTypes) {
boolean found = false;
for (int i=0 ; i < numberOfDependencies; i++){
if (foundDependencies[i].type.equals(dependencyType) && (foundDependencies[i].isIndirect) == isIndirect) {
if (!subType.equals("")) {
if (foundDependencies[i].subType.equals(subType)) {
found = true;
}
} else {
found = true;
}
}
}
foundDependencyTypes.put(dependencyType,found);
}
if (!foundDependencyTypes.containsValue(false)){
dependencyTypesDetected = true;
}
return dependencyTypesDetected;
}
private boolean isUmlLinkDetected(String classFrom, String classTo, String attributeFrom, boolean isComposite, String linkType) {
boolean umlLinkDetected = false;
analyseService = ServiceProvider.getInstance().getAnalyseService();
UmlLinkDTO[] umlLinkDTOs = analyseService.getUmlLinksFromClassToToClass(classFrom, classTo);
for (UmlLinkDTO linkDTO : umlLinkDTOs) {
if (linkDTO.from.equals(classFrom) && linkDTO.to.equals(classTo) && linkDTO.attributeFrom.equals(attributeFrom) &&
(linkDTO.isComposite == isComposite) && linkDTO.type.equals(linkType)) {
umlLinkDetected = true;
}
}
return umlLinkDetected;
}
private boolean isUmlLinkNotDetected(String classFrom, String classTo) {
boolean umlLinkDetected = true;
analyseService = ServiceProvider.getInstance().getAnalyseService();
UmlLinkDTO[] umlLinkDTOs = analyseService.getUmlLinksFromClassToToClass(classFrom, classTo);
for (UmlLinkDTO linkDTO : umlLinkDTOs) {
if (linkDTO.from.equals(classFrom) && linkDTO.to.equals(classTo)) {
umlLinkDetected = false;
}
}
return umlLinkDetected;
}
}