package com.rcpcompany.test.utils;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import com.rcpcompany.uibindings.moao.IMOAO;
import com.rcpcompany.uibindings.moao.IMOAOFacet;
import com.rcpcompany.uibindings.moao.IMOAOMessage;
import com.rcpcompany.uibindings.moao.IMOAOPackage;
import com.rcpcompany.uibindings.moao.Severity;
/**
* Various test utilities for {@link IMOAO}
*
* @author Tonny Madsen, tonny.madsen@gmail.com
*/
public class MOAOTestUtils {
/**
* Asserts that the specified object has an {@link IMOAOMessage} for the specified feature, severity and message
* (regexp).
*
* @param obj
* the object
* @param sf
* the feature of the object
* @param severity
* the severity
* @param messageRE
* the message (an regexp)
*/
public static void assertMOAOMessage(IMOAO obj, EStructuralFeature sf, Severity severity, String messageRE) {
assertTrue("No messages/facets for " + obj, obj.eIsSet(IMOAOPackage.Literals.MOAO__FACETS));
String s = "";
for (final IMOAOFacet f : obj.getFacets()) {
if (!(f instanceof IMOAOMessage)) {
continue;
}
final IMOAOMessage m = (IMOAOMessage) f;
final EStructuralFeature msf = m.getFeature();
s += "\n " + (msf != null ? msf.getName() : "<no feature>") + " - " + m.getSeverity() + ": '"
+ m.getDescription() + "'";
if (msf != sf) {
continue;
}
if (m.getSeverity() != severity) {
continue;
}
final String description = m.getDescription();
if (description == null) {
continue;
}
if (!description.matches(messageRE)) {
continue;
}
return;
}
fail("Expected message not found for " + obj + "\nFeature: " + sf + "\nSeverity: " + severity + "\nMessage: '"
+ messageRE + "'\nHave:" + s);
}
/**
* Asserts that there are no messages in the containment tree with the specified root.
*
* @param root
* the root of the three
*/
public static void assertNoMOAOMessages(IMOAO root) {
assertNoMOAOMessagesOne(root);
for (final TreeIterator<EObject> ti = root.eAllContents(); ti.hasNext();) {
assertNoMOAOMessagesOne(ti.next());
}
}
private static void assertNoMOAOMessagesOne(EObject obj) {
if (!(obj instanceof IMOAO))
return;
if (!(obj.eIsSet(IMOAOPackage.Literals.MOAO__FACETS)))
return;
final IMOAO m = (IMOAO) obj;
for (final IMOAOFacet f : m.getFacets()) {
assertTrue(obj + " has message", !(f instanceof IMOAOMessage));
}
}
}