blob: ebb2c3486b1f7407c4089abfb98bfd7207890f12 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
* Chalmers | University of Gothenburg - additional features, updated API
*******************************************************************************/
package org.eclipse.capra.testsuite;
import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
import static org.eclipse.capra.testsuite.TestHelper.createEmptyFileInProject;
import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.capra.core.adapters.Connection;
import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
import org.eclipse.capra.core.helpers.ArtifactHelper;
import org.eclipse.capra.core.helpers.ExtensionPointHelper;
import org.eclipse.capra.core.helpers.TraceHelper;
import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
import org.eclipse.capra.ui.views.SelectionView;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.junit.Before;
import org.junit.Test;
/**
* A class to test the helper methods in the {@link TraceHelper} class.
*
* @author Salome Maro
*
*/
public class TestTraceHelper {
private static final String PROJECT_NAME = "TestProject";
private static final String FILE_A = "FILE_A";
private static final String FILE_B = "FILE_B";
private static final String FILE_C = "FILE_C";
private static final String FILE_D = "FILE_D";
@Before
public void init() throws CoreException {
clearWorkspace();
resetSelectionView();
}
/**
* Tests for the getTraces(List<EObject> artifacts) method.
*
* @throws CoreException
* @throws BuildException
*/
@Test
public void testgetTracesMethod() throws CoreException, BuildException {
// create a simple project
createSimpleProject(PROJECT_NAME);
// create some files in the project
IFile fileA = createEmptyFileInProject(FILE_A, PROJECT_NAME);
IFile fileB = createEmptyFileInProject(FILE_B, PROJECT_NAME);
IFile fileC = createEmptyFileInProject(FILE_C, PROJECT_NAME);
IFile fileD = createEmptyFileInProject(FILE_D, PROJECT_NAME);
// create a trace link between File A and B
SelectionView.getOpenedView().dropToSelection(fileA);
SelectionView.getOpenedView().dropToSelection(fileB);
assertFalse(thereIsATraceBetween(fileA, fileB));
createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
assertTrue(thereIsATraceBetween(fileA, fileB));
// clear selection
SelectionView.getOpenedView().clearSelection();
// create a trace link between File B and C
SelectionView.getOpenedView().dropToSelection(fileB);
SelectionView.getOpenedView().dropToSelection(fileC);
assertFalse(thereIsATraceBetween(fileB, fileC));
createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
assertTrue(thereIsATraceBetween(fileB, fileC));
// clear selection
SelectionView.getOpenedView().clearSelection();
// create a list with wrappers of File A and B
ResourceSet resourceSet = new ResourceSetImpl();
TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
List<Object> artifactsA_B = new ArrayList<Object>(Arrays.asList(fileA, fileB));
List<EObject> A_B_wrappers = artifactHelper.createWrappers(artifactsA_B);
// get trace link related to fileA and file B
EObject traceModel = persistenceAdapter.getTraceModel(resourceSet);
TraceHelper traceHelper = new TraceHelper(traceModel);
List<Connection> traceLinks = traceHelper.getTraces(A_B_wrappers);
// check that only one link is returned
assertTrue(traceLinks.size() == 1);
// check that the trace link returned is between file A and file B
assertTrue(traceLinks.get(0).getOrigin().equals(A_B_wrappers.get(0)));
assertTrue(traceLinks.get(0).getTargets().get(0).equals(A_B_wrappers.get(1)));
// create a list with wrappers of file A, B and C
List<Object> artifactsA_B_C = new ArrayList<Object>(Arrays.asList(fileA, fileB, fileC));
// create wrappers
List<EObject> A_B_Cwrappers = artifactHelper.createWrappers(artifactsA_B_C);
// get trace links related to file A, B and C
List<Connection> traceLinksA_B_C = traceHelper.getTraces(A_B_Cwrappers);
// check that only two links are returned
assertTrue(traceLinksA_B_C.size() == 2);
// check that the first link is between file A and B
assertTrue(traceLinksA_B_C.get(0).getOrigin().equals(A_B_wrappers.get(0)));
assertTrue(traceLinksA_B_C.get(0).getTargets().get(0).equals(A_B_wrappers.get(1)));
// check that the second link is between file B and C
assertTrue(traceLinksA_B_C.get(1).getOrigin().equals(A_B_Cwrappers.get(1)));
assertTrue(traceLinksA_B_C.get(1).getTargets().get(0).equals(A_B_Cwrappers.get(2)));
// Testing edge cases
// Null sent to the method
List<Connection> null_connections = traceHelper.getTraces(null);
// Check that an empty list is returned.
assertTrue(null_connections.size() == 0);
// An element that is not in the trace model
List<EObject> artifact_D = new ArrayList<EObject>(Arrays.asList(artifactHelper.createWrapper(fileD)));
List<Connection> traceLinksD = traceHelper.getTraces(artifact_D);
// Check that an empty list is returned
assertTrue(traceLinksD.size() == 0);
// One element in the traceModel and one not in the trace model
List<Object> artifactsC_D = new ArrayList<Object>(Arrays.asList(fileC, fileD));
List<EObject> C_D_wrappers = artifactHelper.createWrappers(artifactsC_D);
// get trace links related to file C and D
List<Connection> traceLinksC_D = traceHelper.getTraces(C_D_wrappers);
// check that the list of links is null
assertTrue(traceLinksC_D.size() == 0);
}
}