package org.fluentlenium.core.conditions; import org.fluentlenium.core.domain.FluentWebElement; import java.util.List; import java.util.function.Predicate; /** * Abstract class conditions on list of elements. */ @SuppressWarnings("PMD.ExcessivePublicCount") public abstract class AbstractFluentListConditions implements FluentListConditions, ListConditionsElements { private boolean negation; private final List<? extends FluentWebElement> elements; /** * Creates a new conditions on list of elements. * * @param elements underlying elements */ protected AbstractFluentListConditions(List<? extends FluentWebElement> elements) { this.elements = elements; } @Override public boolean size(int size) { if (negation) { return elements.size() != size; } return elements.size() == size; } /** * Is this conditions list negated ? * * @return true if this conditions list is negated, false otherwise. */ protected boolean isNegation() { return negation; } /** * Set negation value * * @param negation negation value */ public void setNegation(boolean negation) { this.negation = negation; } /** * Get the underlying list of elements * * @return underlying list of elements */ protected List<? extends FluentWebElement> getElements() { return elements; } @Override public List<? extends FluentWebElement> getActualElements() { return elements; } @Override public IntegerConditions size() { return new IntegerConditionsImpl(elements.size(), negation); } @Override public boolean verify(Predicate<FluentWebElement> predicate) { return verify(predicate, false); } @Override public boolean present() { return verify(input -> input.conditions().present(), false); } @Override public boolean clickable() { return verify(input -> input.conditions().clickable(), false); } @Override public boolean stale() { return verify(input -> input.conditions().stale(), false); } @Override public boolean displayed() { return verify(input -> input.conditions().displayed(), false); } @Override public boolean enabled() { return verify(input -> input.conditions().enabled(), false); } @Override public boolean selected() { return verify(input -> input.conditions().selected(), false); } @Override public boolean attribute(String name, String value) { return attribute(name).equalTo(value); } @Override public StringConditions attribute(String name) { return new StringListConditionsImpl(this, input -> input.attribute(name), input -> input.conditions().attribute(name)); } @Override public boolean id(String id) { return id().equalTo(id); } @Override public StringConditions id() { return new StringListConditionsImpl(this, FluentWebElement::id, input -> input.conditions().id()); } @Override public StringConditions name() { return new StringListConditionsImpl(this, FluentWebElement::name, input -> input.conditions().name()); } @Override public boolean name(String name) { return name().equalTo(name); } @Override public StringConditions tagName() { return new StringListConditionsImpl(this, FluentWebElement::tagName, input -> input.conditions().tagName()); } @Override public boolean tagName(String tagName) { return tagName().equalTo(tagName); } @Override public StringConditions value() { return new StringListConditionsImpl(this, FluentWebElement::value, input -> input.conditions().value()); } @Override public boolean value(String value) { return value().equalTo(value); } @Override public StringConditions text() { return new StringListConditionsImpl(this, FluentWebElement::text, input -> input.conditions().text()); } @Override public boolean text(String text) { return text().equalTo(text); } @Override public StringConditions textContent() { return new StringListConditionsImpl(this, FluentWebElement::textContent, input -> input.conditions().textContent()); } @Override public boolean textContent(String anotherString) { return textContent().equalTo(anotherString); } @Override public RectangleConditions rectangle() { return new RectangleListConditionsImpl(this); } @Override public boolean className(String className) { return verify(input -> input.conditions().className(className), false); } }