package org.xpect.xtext.lib.tests; import java.util.List; import org.eclipse.xtext.diagnostics.Diagnostic; import org.eclipse.xtext.diagnostics.Severity; import org.eclipse.xtext.validation.Issue; import org.xpect.XpectImport; import org.xpect.setup.ISetupInitializer; import org.xpect.setup.XpectSetupComponent; import org.xpect.setup.XpectSetupFactory; import org.xpect.setup.XpectSetupRoot; import org.xpect.state.Creates; import org.xpect.xtext.lib.tests.ValidationTestConfig.IgnoredIssues; import org.xpect.xtext.lib.tests.ValidationTestConfig.LinkingAndValidationIssues; import org.xpect.xtext.lib.tests.ValidationTestConfig.SyntaxAndLinkingAndValidationIssues; import org.xpect.xtext.lib.tests.ValidationTestConfig.ValidationErrorsAndWarnings; import org.xpect.xtext.lib.tests.ValidationTestConfig.ValidationWarnings; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Lists; @XpectSetupFactory @XpectSetupRoot @XpectImport({ IgnoredIssues.class, SyntaxAndLinkingAndValidationIssues.class, LinkingAndValidationIssues.class, ValidationErrorsAndWarnings.class, ValidationWarnings.class }) public class ValidationTestConfig { @XpectSetupComponent public static class IgnoredIssues implements Predicate<Issue> { private List<IssueFilter> filters = Lists.newArrayList(); public void add(IssueFilter filter) { this.filters.add(filter); } public boolean apply(Issue input) { for (IssueFilter filter : filters) if (filter.shouldIgnore(input)) return false; return true; } } public static interface IssueFilter { boolean shouldIgnore(Issue issue); } @XpectSetupComponent public static class LinkingAndValidationIssues implements IssueFilter { public boolean shouldIgnore(Issue issue) { return !Diagnostic.SYNTAX_DIAGNOSTIC.equals(issue.getCode()); } } @XpectSetupComponent public static class SyntaxAndLinkingAndValidationIssues implements IssueFilter { public boolean shouldIgnore(Issue issue) { return true; } } @XpectSetupComponent public static class ValidationErrorsAndWarnings implements IssueFilter { public boolean shouldIgnore(Issue issue) { return !Diagnostic.SYNTAX_DIAGNOSTIC.equals(issue.getCode()) && !Diagnostic.LINKING_DIAGNOSTIC.equals(issue.getCode()); } } @XpectSetupComponent public static class ValidationWarnings implements IssueFilter { public boolean shouldIgnore(Issue issue) { return issue.getSeverity() == Severity.WARNING; } } private IgnoredIssues ignoredIssues = null; public ValidationTestConfig(ISetupInitializer<ValidationTestConfig> init) { init.initialize(this); } public void add(IgnoredIssues ignored) { Preconditions.checkArgument(this.ignoredIssues == null, "ignoredIssues can only be set once."); this.ignoredIssues = ignored; } public Predicate<Issue> getIgnoreFilter() { if (ignoredIssues == null) return Predicates.alwaysTrue(); return ignoredIssues; } @Creates public ValidationTestConfig getThis() { return this; } }