package org.robotframework.ide.eclipse.main.plugin.model; import static com.google.common.base.Predicates.not; import static com.google.common.collect.Iterables.all; import static org.assertj.core.api.Assertions.not; import java.util.List; import org.assertj.core.api.Condition; import org.rf.ide.core.testdata.model.AModelElement; import org.rf.ide.core.testdata.model.FilePosition; import org.rf.ide.core.testdata.text.read.recognizer.RobotToken; import com.google.common.base.Predicate; public class ModelConditions { public static Condition<RobotFileInternalElement> filePositions() { return new Condition<RobotFileInternalElement>("all token positions set") { @Override public boolean matches(final RobotFileInternalElement element) { final List<RobotToken> tokens = ((AModelElement<?>) element.getLinkedElement()).getElementTokens(); return all(tokens, not(havePositionsSet())); } }; } public static Condition<RobotFileInternalElement> noFilePositions() { return new Condition<RobotFileInternalElement>("no token positions set") { @Override public boolean matches(final RobotFileInternalElement element) { final List<RobotToken> tokens = ((AModelElement<?>) element.getLinkedElement()).getElementTokens(); return all(tokens, havePositionsSet()); } }; } private static Predicate<RobotToken> havePositionsSet() { return new Predicate<RobotToken>() { @Override public boolean apply(final RobotToken token) { final FilePosition tokenPosition = token.getFilePosition(); return tokenPosition.isNotSet(); } }; } public static Condition<RobotFileInternalElement> nullParent() { return new Condition<RobotFileInternalElement>("no parent reference") { @Override public boolean matches(final RobotFileInternalElement element) { return element.getParent() == null && ((AModelElement<?>) element.getLinkedElement()).getParent() == null; } }; } public static Condition<RobotElement> name(final String name) { return new Condition<RobotElement>("name set to " + name) { @Override public boolean matches(final RobotElement element) { return element.getName().equals(name); } }; } public static Condition<RobotElement> children() { return new Condition<RobotElement>("non empty children list") { @Override public boolean matches(final RobotElement element) { return !element.getChildren().isEmpty(); } }; } public static Condition<RobotElement> children(final int expectedChildren) { return new Condition<RobotElement>("exectly " + expectedChildren + " children") { @Override public boolean matches(final RobotElement element) { return element.getChildren().size() == expectedChildren; } }; } public static Condition<RobotElement> noChildren() { return not(children()); } }