package jetbrains.mps.testbench.junit.suites; /*Generated by MPS */ import java.util.List; import jetbrains.mps.checkers.IRootChecker; import org.jetbrains.mps.openapi.model.SModel; import java.util.ArrayList; import jetbrains.mps.smodel.SModelStereotype; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations; import java.util.Set; import jetbrains.mps.errors.IErrorReporter; import jetbrains.mps.checkers.ErrorReportUtil; import jetbrains.mps.errors.MessageStatus; import jetbrains.mps.util.SNodeOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.AttributeOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.IAttributeDescriptor; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; public class CheckingTestsUtil { private final CheckingTestStatistic myStats; public CheckingTestsUtil(CheckingTestStatistic statistic) { myStats = statistic; } public List<String> applyChecker(final IRootChecker checker, final Iterable<SModel> models) { final List<String> errors = new ArrayList<String>(); for (SModel sm : models) { if (!(SModelStereotype.isUserModel(sm))) { continue; } if (SModelStereotype.isGeneratorModel(sm)) { continue; } for (SNode root : SModelOperations.roots(((SModel) sm), null)) { Set<IErrorReporter> errorReporters = null; try { errorReporters = checker.getErrors(root, sm.getRepository()); } catch (IllegalStateException e) { errors.add(e.getMessage()); } for (IErrorReporter reporter : errorReporters) { if (!(ErrorReportUtil.shouldReportError(reporter.getSNode()))) { continue; } if (reporter.getMessageStatus().equals(MessageStatus.ERROR)) { SNode node = reporter.getSNode(); if (!(CheckingTestsUtil.filterIssue(node))) { continue; } myStats.reportError(); errors.add("Error message: " + reporter.reportError() + " model: " + SNodeOperations.getModelLongName(node.getModel()) + " root: " + node.getContainingRoot() + " node: " + node); } if (reporter.getMessageStatus().equals(MessageStatus.WARNING)) { myStats.reportWarning(); } } } } return errors; } public static boolean filterIssue(SNode node) { SNode container = AttributeOperations.getAttribute(node, new IAttributeDescriptor.NodeAttribute(MetaAdapterFactory.getConcept(0x8585453e6bfb4d80L, 0x98deb16074f1d86cL, 0x11b07a3d4b5L, "jetbrains.mps.lang.test.structure.NodeOperationsContainer"))); if (container == null) { return true; } for (SNode property : SLinkOperations.getChildren(container, MetaAdapterFactory.getContainmentLink(0x8585453e6bfb4d80L, 0x98deb16074f1d86cL, 0x11b07a3d4b5L, 0x11b07abae7cL, "nodeOperations"))) { if (jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations.isInstanceOf(property, MetaAdapterFactory.getConcept(0x8585453e6bfb4d80L, 0x98deb16074f1d86cL, 0x11b01e7283dL, "jetbrains.mps.lang.test.structure.NodeErrorCheckOperation"))) { return false; } } return true; } public static String formatErrors(List<String> errors) { StringBuilder sb = new StringBuilder(); String sep = ""; for (String er : errors) { sb.append(sep).append(er); sep = "\n"; } return sb.toString(); } }