Skip to content

Commit

Permalink
Remove some code duplication around matching elements by selector and…
Browse files Browse the repository at this point in the history
… attributes

Part of geb/issues#557
  • Loading branch information
erdi committed May 11, 2019
1 parent 6ae6d2c commit c5068ec
Showing 1 changed file with 36 additions and 34 deletions.
Expand Up @@ -216,9 +216,7 @@ class DefaultNavigator implements Navigator {
@Override
Navigator filter(Map<String, Object> predicates, String selector) {
navigatorFor(dynamic(predicates)) {
contextElements.findAll {
CssSelector.matches(it, selector) && matches(it, predicates)
}
contextElements.findAll(matchingSelectorAndPredicates(selector, predicates))
}
}

Expand Down Expand Up @@ -486,10 +484,10 @@ class DefaultNavigator implements Navigator {
}

@Override
Navigator next(Map<String, Object> attributes = [:], String selector) {
navigatorFor(dynamic(attributes)) {
Navigator next(Map<String, Object> predicates = [:], String selector) {
navigatorFor(dynamic(predicates)) {
collectFollowingSiblings {
it.find { CssSelector.matches(it, selector) && matches(it, attributes) }
it.find(matchingSelectorAndPredicates(selector, predicates))
}
}
}
Expand All @@ -509,10 +507,10 @@ class DefaultNavigator implements Navigator {
}

@Override
Navigator nextAll(Map<String, Object> attributes = [:], String selector) {
navigatorFor(dynamic(attributes)) {
Navigator nextAll(Map<String, Object> predicates = [:], String selector) {
navigatorFor(dynamic(predicates)) {
collectFollowingSiblings {
it.findAll { CssSelector.matches(it, selector) && matches(it, attributes) }
it.findAll(matchingSelectorAndPredicates(selector, predicates))
}
}
}
Expand Down Expand Up @@ -552,10 +550,10 @@ class DefaultNavigator implements Navigator {
}

@Override
Navigator previous(Map<String, Object> attributes = [:], String selector) {
navigatorFor(dynamic(attributes)) {
Navigator previous(Map<String, Object> predicates = [:], String selector) {
navigatorFor(dynamic(predicates)) {
collectPreviousSiblings {
it.reverse().find { CssSelector.matches(it, selector) && matches(it, attributes) }
it.reverse().find(matchingSelectorAndPredicates(selector, predicates))
}
}
}
Expand All @@ -575,10 +573,10 @@ class DefaultNavigator implements Navigator {
}

@Override
Navigator prevAll(Map<String, Object> attributes = [:], String selector) {
navigatorFor(dynamic(attributes)) {
Navigator prevAll(Map<String, Object> predicates = [:], String selector) {
navigatorFor(dynamic(predicates)) {
collectPreviousSiblings {
it.reverse().findAll { CssSelector.matches(it, selector) && matches(it, attributes) }
it.reverse().findAll(matchingSelectorAndPredicates(selector, predicates))
}
}
}
Expand Down Expand Up @@ -616,10 +614,10 @@ class DefaultNavigator implements Navigator {
}

@Override
Navigator parent(Map<String, Object> attributes = [:], String selector) {
navigatorFor(dynamic(attributes)) {
Navigator parent(Map<String, Object> predicates = [:], String selector) {
navigatorFor(dynamic(predicates)) {
collectParents {
it.findAll { CssSelector.matches(it, selector) && matches(it, attributes) }
it.findAll(matchingSelectorAndPredicates(selector, predicates))
}
}
}
Expand All @@ -641,10 +639,10 @@ class DefaultNavigator implements Navigator {
}

@Override
Navigator parents(Map<String, Object> attributes = [:], String selector) {
navigatorFor(dynamic(attributes)) {
Navigator parents(Map<String, Object> predicates = [:], String selector) {
navigatorFor(dynamic(predicates)) {
collectAncestors {
it.reverse().findAll { CssSelector.matches(it, selector) && matches(it, attributes) }
it.reverse().findAll(matchingSelectorAndPredicates(selector, predicates))
}
}
}
Expand Down Expand Up @@ -677,10 +675,10 @@ class DefaultNavigator implements Navigator {
}

@Override
Navigator closest(Map<String, Object> attributes = [:], String selector) {
navigatorFor(dynamic(attributes)) {
Navigator closest(Map<String, Object> predicates = [:], String selector) {
navigatorFor(dynamic(predicates)) {
collectAncestors {
it.reverse().find { CssSelector.matches(it, selector) && matches(it, attributes) }
it.reverse().find(matchingSelectorAndPredicates(selector, predicates))
}
}
}
Expand All @@ -693,17 +691,17 @@ class DefaultNavigator implements Navigator {
@Override
Navigator children(Map<String, Object> attributes) {
navigatorFor(dynamic(attributes)) {
collectChildren().findAll {
matches(it, attributes)
collectChildren {
it.findAll { matches(it, attributes) }
}
}
}

@Override
Navigator children(Map<String, Object> attributes = [:], String selector) {
navigatorFor(dynamic(attributes)) {
collectChildren().findAll {
CssSelector.matches(it, selector) && matches(it, attributes)
Navigator children(Map<String, Object> predicates = [:], String selector) {
navigatorFor(dynamic(predicates)) {
collectChildren {
it.findAll(matchingSelectorAndPredicates(selector, predicates))
}
}
}
Expand All @@ -723,10 +721,10 @@ class DefaultNavigator implements Navigator {
}

@Override
Navigator siblings(Map<String, Object> attributes = [:], String selector) {
navigatorFor(dynamic(attributes)) {
Navigator siblings(Map<String, Object> predicates = [:], String selector) {
navigatorFor(dynamic(predicates)) {
collectSiblings {
it.findAll { CssSelector.matches(it, selector) && matches(it, attributes) }
it.findAll(matchingSelectorAndPredicates(selector, predicates))
}
}
}
Expand Down Expand Up @@ -1232,7 +1230,7 @@ class DefaultNavigator implements Navigator {
collectRelativeElements("ancestor::*", filter)
}

protected Collection<WebElement> collectChildren(Closure filter) {
protected Collection<WebElement> collectChildren(@ClosureParams(value = FromString, options = "java.util.List<org.openqa.selenium.WebElement>") Closure filter) {
collectRelativeElements("child::*", filter)
}

Expand All @@ -1247,6 +1245,10 @@ class DefaultNavigator implements Navigator {
element?.getAttribute("class")?.tokenize()?.unique()?.sort() ?: EMPTY_LIST
}

protected Closure<Boolean> matchingSelectorAndPredicates(String selector, Map<String, Object> predicates) {
{ WebElement element -> CssSelector.matches(element, selector) && matches(element, predicates) }
}

/**
* Iterator for looping over the context elements of a Navigator instance.
*/
Expand Down

0 comments on commit c5068ec

Please sign in to comment.