/**
*
*/
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.quality.assurance.analyze.ConfigurationSetStructureAnalyzer;
import org.js.model.feature.resource.eft.mopp.EftResourceFactory;
import junit.framework.TestCase;
/**
* @author David Gollasch
*
*/
public class ConfigurationSetStructureAnalyzerTestCase extends TestCase {
private ResourceSet resourceSet = new ResourceSetImpl();
private ConfigurationSetStructureAnalyzer sa1, sa2, sa3, sa4;
/**
* @throws java.lang.Exception
*/
protected void setUp() throws Exception {
// set 1 will be filled with model 1 to 5
Set<FeatureModel> testset1 = new HashSet<FeatureModel>();
// set 2 will be filled with model 1 to 6
Set<FeatureModel> testset2 = new HashSet<FeatureModel>();
// set 2 will be filled with model 7
Set<FeatureModel> testset3 = new HashSet<FeatureModel>();
// set 2 will be filled with model 8
Set<FeatureModel> testset4 = new HashSet<FeatureModel>();
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());
testset1.add(fm1);
testset1.add(fm2);
testset1.add(fm3);
testset1.add(fm4);
testset1.add(fm5);
testset2.add(fm1);
testset2.add(fm2);
testset2.add(fm3);
testset2.add(fm4);
testset2.add(fm5);
testset2.add(fm6);
testset3.add(fm7);
testset4.add(fm8);
sa1 = new ConfigurationSetStructureAnalyzer(testset1);
sa2 = new ConfigurationSetStructureAnalyzer(testset2);
sa3 = new ConfigurationSetStructureAnalyzer(testset3);
sa4 = new ConfigurationSetStructureAnalyzer(testset4);
}
/**
* Test method for {@link org.js.model.feature.quality.assurance.analyze.ConfigurationSetStructureAnalyzer#getDeselectedFeatures()}.
*/
public void testSA1() {
Set<Feature> result = sa1.getDeselectedFeatures();
Set<String> resultIds = new HashSet<String>();
resultIds.add("feature16");
resultIds.add("feature17");
resultIds.add("feature18");
resultIds.add("feature19");
resultIds.add("feature20");
assertTrue(result.size() == 5);
for (Feature feature : result) {
String id = null;
for (String string : resultIds) {
if(string.equalsIgnoreCase(feature.getId()))
id = string;
}
assertNotNull(id);
if(id != null)
resultIds.remove(id);
}
}
/**
* Test method for {@link org.js.model.feature.quality.assurance.analyze.ConfigurationSetStructureAnalyzer#getDeselectedFeatures()}.
*/
public void testSA2() {
Set<Feature> result = sa2.getDeselectedFeatures();
Set<String> resultIds = new HashSet<String>();
resultIds.add("feature17");
resultIds.add("feature18");
resultIds.add("feature19");
resultIds.add("feature20");
assertTrue(result.size() == 4);
for (Feature feature : result) {
String id = null;
for (String string : resultIds) {
if(string.equalsIgnoreCase(feature.getId()))
id = string;
}
assertNotNull(id);
if(id != null)
resultIds.remove(id);
}
}
/**
* Test method for {@link org.js.model.feature.quality.assurance.analyze.ConfigurationSetStructureAnalyzer#getDeselectedFeatures()}.
*/
public void testSA3() {
Set<Feature> result = sa3.getDeselectedFeatures();
Set<String> resultIds = new HashSet<String>();
resultIds.add("feature02");
resultIds.add("feature03");
resultIds.add("feature04");
resultIds.add("feature05");
resultIds.add("feature06");
resultIds.add("feature07");
resultIds.add("feature08");
resultIds.add("feature09");
resultIds.add("feature10");
resultIds.add("feature11");
resultIds.add("feature12");
resultIds.add("feature13");
resultIds.add("feature14");
resultIds.add("feature15");
resultIds.add("feature16");
resultIds.add("feature17");
resultIds.add("feature18");
resultIds.add("feature19");
resultIds.add("feature20");
assertTrue(result.size() == 19);
for (Feature feature : result) {
String id = null;
for (String string : resultIds) {
if(string.equalsIgnoreCase(feature.getId()))
id = string;
}
assertNotNull(id);
if(id != null)
resultIds.remove(id);
}
}
/**
* Test method for {@link org.js.model.feature.quality.assurance.analyze.ConfigurationSetStructureAnalyzer#getDeselectedFeatures()}.
*/
public void testSA4() {
Set<Feature> result = sa4.getDeselectedFeatures();
assertTrue(result.size() == 0);
}
//---------------------------------------------------------------------------
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;
}
}