package org.yakindu.sct.model.stext.test.validation;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.yakindu.sct.test.models.AbstractTestModelsUtil.VALIDATION_TESTMODEL_DIR;
import java.util.HashMap;
import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.junit4.validation.ValidatorTester;
import org.junit.After;
import org.junit.Before;
import org.yakindu.sct.model.sgraph.SGraphFactory;
import org.yakindu.sct.model.sgraph.Statechart;
import org.yakindu.sct.model.sgraph.Transition;
import org.yakindu.sct.model.sgraph.Vertex;
import org.yakindu.sct.model.stext.resource.StextResource;
import org.yakindu.sct.model.stext.test.util.AbstractSTextTest;
import org.yakindu.sct.model.stext.validation.STextJavaValidator;
import org.yakindu.sct.test.models.AbstractTestModelsUtil;
import com.google.inject.Inject;
import com.google.inject.Injector;
public abstract class AbstractSTextValidationTest extends AbstractSTextTest {
@Inject
public STextJavaValidator validator;
@Inject
public Injector injector;
protected ValidatorTester<STextJavaValidator> tester;
protected BasicDiagnostic diagnostics;
protected SGraphFactory factory;
protected Statechart statechart;
protected StextResource resource;
@Before public void setup() {
factory = SGraphFactory.eINSTANCE;
resource = new StextResource(URI.createURI(""));
injector.injectMembers(resource);
statechart = factory.createStatechart();
resource.getContents().add(statechart);
diagnostics = new BasicDiagnostic();
tester = new ValidatorTester<STextJavaValidator>(validator, injector);
}
@After public void teardown() {
tester = null;
}
protected void resetDiagnostics() {
diagnostics = new BasicDiagnostic();
}
protected Transition createTransition(Vertex source, Vertex target) {
Transition trans = SGraphFactory.eINSTANCE.createTransition();
trans.setSource(source);
trans.setTarget(target);
source.getOutgoingTransitions().add(trans);
target.getIncomingTransitions().add(trans);
return trans;
}
protected void assertError(Diagnostic diag, String message) {
Diagnostic d = issueByName(diag, message);
assertNotNull("Issue '" + message + "' does not exist.", issueByName(diag, message));
assertEquals("Issue '" + message + "' is no error.", Diagnostic.ERROR, d.getSeverity());
}
protected void assertWarning(Diagnostic diag, String message) {
Diagnostic d = issueByName(diag, message);
assertNotNull("Issue '" + message + "' does not exist.", issueByName(diag, message));
assertEquals("Issue '" + message + "' is no warning.", Diagnostic.WARNING, d.getSeverity());
}
protected void assertIssueCount(Diagnostic diag, int count) {
int c = diag.getChildren().size();
assertEquals("expected " + count + " issue(s) but were " + c + " [" + diag.toString() + "]", count, c);
}
protected Diagnostic issueByName(Diagnostic diag, String message) {
for (Diagnostic issue : diag.getChildren()) {
if (message.equals(issue.getMessage()))
return issue;
}
return null;
}
protected boolean validate(EObject obj) {
return validator.validate(obj, diagnostics,
new HashMap<Object, Object>());
}
protected Statechart loadStatechart(String modelName) {
return AbstractTestModelsUtil
.loadStatechart(VALIDATION_TESTMODEL_DIR
+ modelName);
}
}