/**
*
*/
package org.js.model.feature.quality.assurance.test;
import java.io.IOException;
import java.net.URL;
import java.util.*;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.Resource.Factory;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.js.model.feature.*;
import org.js.model.feature.edit.FeatureModelHelper;
import org.js.model.feature.quality.assurance.analyze.FeatureBasedStructureAnalyzer;
import org.js.model.feature.resource.eft.mopp.EftResourceFactory;
import junit.framework.TestCase;
/**
* @author David
*
*/
public class FeatureBasedStructureAnalyzerTestCase extends TestCase {
private ResourceSet resourceSet = new ResourceSetImpl();
private FeatureBasedStructureAnalyzer sa5, sa6, sa7, sa8;
private FeatureBasedStructureAnalyzer sa9, sa10, sa11, sa12;
private FeatureBasedStructureAnalyzer sa13, sa14, sa15, sa16;
private FeatureBasedStructureAnalyzer sa17, sa18, sa19, sa20;
private FeatureBasedStructureAnalyzer sa21, sa22, sa23, sa24;
private FeatureBasedStructureAnalyzer sa25, sa26, sa27, sa28;
private FeatureBasedStructureAnalyzer sa29, sa30;
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
FeatureModel fm1 = (FeatureModel) loadTestModel("flattest1.eft", "eft", new EftResourceFactory());
FeatureModel fm2 = (FeatureModel) loadTestModel("flattest2.eft", "eft", new EftResourceFactory());
FeatureModel fm3 = (FeatureModel) loadTestModel("flattest3.eft", "eft", new EftResourceFactory());
FeatureModel fm4 = (FeatureModel) loadTestModel("flattest4.eft", "eft", new EftResourceFactory());
FeatureModel fm5 = (FeatureModel) loadTestModel("flattest5.eft", "eft", new EftResourceFactory());
FeatureModel fm6 = (FeatureModel) loadTestModel("flattest6.eft", "eft", new EftResourceFactory());
FeatureModel fm7 = (FeatureModel) loadTestModel("flattest7.eft", "eft", new EftResourceFactory());
FeatureModel fm8 = (FeatureModel) loadTestModel("flattest8.eft", "eft", new EftResourceFactory());
FeatureModel fm9 = (FeatureModel) loadTestModel("dependenciestest.eft", "eft", new EftResourceFactory());
Set<FeatureModel> testset1to5 = new HashSet<FeatureModel>();
testset1to5.add(fm1);
testset1to5.add(fm2);
testset1to5.add(fm3);
testset1to5.add(fm4);
testset1to5.add(fm5);
Set<FeatureModel> testset1to6 = new HashSet<FeatureModel>();
testset1to6.add(fm1);
testset1to6.add(fm2);
testset1to6.add(fm3);
testset1to6.add(fm4);
testset1to6.add(fm5);
testset1to6.add(fm6);
Set<FeatureModel> testset1to8 = new HashSet<FeatureModel>();
testset1to8.add(fm1);
testset1to8.add(fm2);
testset1to8.add(fm3);
testset1to8.add(fm4);
testset1to8.add(fm5);
testset1to8.add(fm6);
testset1to8.add(fm7);
testset1to8.add(fm8);
Set<FeatureModel> testsetFeaDep = new HashSet<FeatureModel>();
testsetFeaDep.add(fm9);
FeatureModelHelper fmh1 = new FeatureModelHelper(fm1);
FeatureModelHelper fmh9 = new FeatureModelHelper(fm9);
Feature f01 = fmh1.getFeature("feature01");
Feature f06 = fmh1.getFeature("feature06");
Feature f11 = fmh1.getFeature("feature11");
Feature f16 = fmh1.getFeature("feature16");
Feature f20 = fmh1.getFeature("feature20");
Feature g1f1 = fmh9.getFeature("g1f1");
Feature g1f2 = fmh9.getFeature("g1f2");
Feature g1f3 = fmh9.getFeature("g1f3");
Feature g1f4 = fmh9.getFeature("g1f4");
Feature g1f5 = fmh9.getFeature("g1f5");
Feature g1f6 = fmh9.getFeature("g1f6");
Feature g1f7 = fmh9.getFeature("g1f7");
Feature g1f8 = fmh9.getFeature("g1f8");
Feature g2f1 = fmh9.getFeature("g2f1");
Feature g2f2 = fmh9.getFeature("g2f2");
Feature g3f1 = fmh9.getFeature("g3f1");
Feature g3f2 = fmh9.getFeature("g3f2");
Feature g4f1 = fmh9.getFeature("g4f1");
Feature g4f2 = fmh9.getFeature("g4f2");
Feature g4f3 = fmh9.getFeature("g4f3");
Feature g5f1 = fmh9.getFeature("g5f1");
Feature g5f2 = fmh9.getFeature("g5f2");
Feature g5f3 = fmh9.getFeature("g5f3");
sa5 = new FeatureBasedStructureAnalyzer(testset1to5, fm1, f01);
sa6 = new FeatureBasedStructureAnalyzer(testset1to5, fm1, f06);
sa7 = new FeatureBasedStructureAnalyzer(testset1to5, fm1, f11);
sa8 = new FeatureBasedStructureAnalyzer(testset1to5, fm1, f16);
sa9 = new FeatureBasedStructureAnalyzer(testset1to8, fm1, f01);
sa10 = new FeatureBasedStructureAnalyzer(testset1to6, fm1, f16);
sa11 = new FeatureBasedStructureAnalyzer(testset1to8, fm1, f16);
sa12 = new FeatureBasedStructureAnalyzer(testset1to8, fm1, f20);
sa13 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g1f1);
sa14 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g1f2);
sa15 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g1f3);
sa16 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g1f4);
sa17 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g1f5);
sa18 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g1f6);
sa19 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g1f7);
sa20 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g1f8);
sa21 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g2f1);
sa22 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g2f2);
sa23 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g3f1);
sa24 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g3f2);
sa25 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g4f1);
sa26 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g4f2);
sa27 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g4f3);
sa28 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g5f1);
sa29 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g5f2);
sa30 = new FeatureBasedStructureAnalyzer(testsetFeaDep, fm9, g5f3);
}
public void testSA5() {
Set<FeatureModel> results = sa5.getFeatureModelsContainingFeature();
assertTrue(results.size() == 5);
}
public void testSA6() {
Set<FeatureModel> results = sa6.getFeatureModelsContainingFeature();
assertTrue(results.size() == 1);
}
public void testSA7() {
Set<FeatureModel> results = sa7.getFeatureModelsContainingFeature();
assertTrue(results.size() == 2);
}
public void testSA8() {
Set<FeatureModel> results = sa8.getFeatureModelsContainingFeature();
assertTrue(results.size() == 0);
}
public void testSA9() {
Set<FeatureModel> results = sa9.getFeatureModelsContainingFeature();
assertTrue(results.size() == 7);
}
public void testSA10() {
Set<FeatureModel> results = sa10.getFeatureModelsContainingFeature();
assertTrue(results.size() == 1);
}
public void testSA11() {
Set<FeatureModel> results = sa11.getFeatureModelsContainingFeature();
assertTrue(results.size() == 2);
}
public void testSA12() {
Set<FeatureModel> results = sa12.getFeatureModelsContainingFeature();
assertTrue(results.size() == 1);
}
public void testSA13() throws Exception {
Set<FeatureConstraint> results = sa13.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa13.isFeatureMandatory();
assertTrue(results.size() == 0);
assertFalse(isMandatory);
}
public void testSA14() throws Exception {
Set<FeatureConstraint> results = sa14.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa14.isFeatureMandatory();
assertTrue(results.size() == 0);
assertFalse(isMandatory);
}
public void testSA15() throws Exception {
Set<FeatureConstraint> results = sa15.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa15.isFeatureMandatory();
assertTrue(results.size() == 0);
assertFalse(isMandatory);
}
public void testSA16() throws Exception {
Set<FeatureConstraint> results = sa16.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa16.isFeatureMandatory();
assertTrue(results.size() == 0);
assertFalse(isMandatory);
}
public void testSA17() throws Exception {
Set<FeatureConstraint> results = sa17.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa17.isFeatureMandatory();
assertTrue(results.size() == 0);
assertFalse(isMandatory);
}
public void testSA18() throws Exception {
Set<FeatureConstraint> results = sa18.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa18.isFeatureMandatory();
assertTrue(results.size() == 0);
assertFalse(isMandatory);
}
public void testSA19() throws Exception {
Set<FeatureConstraint> results = sa19.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa19.isFeatureMandatory();
assertTrue(results.size() == 0);
assertFalse(isMandatory);
}
public void testSA20() throws Exception {
Set<FeatureConstraint> results = sa20.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa20.isFeatureMandatory();
assertTrue(results.size() == 1);
assertFalse(isMandatory);
}
public void testSA21() throws Exception {
Set<FeatureConstraint> results = sa21.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa21.isFeatureMandatory();
assertTrue(results.size() == 0);
assertTrue(isMandatory);
}
public void testSA22() throws Exception {
Set<FeatureConstraint> results = sa22.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa22.isFeatureMandatory();
assertTrue(results.size() == 2);
assertTrue(isMandatory);
}
public void testSA23() throws Exception {
Set<FeatureConstraint> results = sa23.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa23.isFeatureMandatory();
assertTrue(results.size() == 0);
assertFalse(isMandatory);
}
public void testSA24() throws Exception {
Set<FeatureConstraint> results = sa24.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa24.isFeatureMandatory();
assertTrue(results.size() == 1);
assertFalse(isMandatory);
}
public void testSA25() throws Exception {
Set<FeatureConstraint> results = sa25.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa25.isFeatureMandatory();
assertTrue(results.size() == 1);
assertFalse(isMandatory);
}
public void testSA26() throws Exception {
Set<FeatureConstraint> results = sa26.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa26.isFeatureMandatory();
assertTrue(results.size() == 1);
assertFalse(isMandatory);
}
public void testSA27() throws Exception {
Set<FeatureConstraint> results = sa27.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa27.isFeatureMandatory();
assertTrue(results.size() == 0);
assertFalse(isMandatory);
}
public void testSA28() throws Exception {
Set<FeatureConstraint> results = sa28.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa28.isFeatureMandatory();
assertTrue(results.size() == 1);
assertFalse(isMandatory);
}
public void testSA29() throws Exception {
Set<FeatureConstraint> results = sa29.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa29.isFeatureMandatory();
assertTrue(results.size() == 1);
assertFalse(isMandatory);
}
public void testSA30() throws Exception {
Set<FeatureConstraint> results = sa30.getFeatureConstraintsAffectingFeature();
boolean isMandatory = sa30.isFeatureMandatory();
assertTrue(results.size() == 0);
assertFalse(isMandatory);
}
//---------------------------------------------------------------------------
private EObject loadTestModel(String filename, String suffix, Factory resourceFactory) {
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(suffix, resourceFactory);
URL fileresource = this.getClass().getClassLoader().getResource(filename);
String path = fileresource.getPath();
path = path.replace("%20", " "); // Workaround to handle spaced in path (interpreted as %20 and reinterpreted as %2520)
URI uri = URI.createFileURI(path);
Resource resource = resourceSet.getResource(uri, true);
try {
resource.load(Collections.EMPTY_MAP);
System.out.println("Loaded " + uri);
EList<EObject> contents = resource.getContents();
if (contents != null && !contents.isEmpty()) {
return contents.get(0);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}