@Test public void shouldRemoveUnusedPredicates() { assertThat(expr.removeUnusedPredicates("/a/b[-1]/c"), is("/a/b/c")); assertThat(expr.removeUnusedPredicates("/a/b[@name='wacky']/c"), is("/a/b/c")); assertThat(expr.removeUnusedPredicates("/a/b[3][@name='wacky']/c"), is("/a/b[3]/c")); assertThat(expr.removeUnusedPredicates("/a/b[3][@name]/c"), is("/a/b[3]/c")); assertThat(expr.removeUnusedPredicates("/a/b[length(@name)=3]/c"), is("/a/b/c")); }
@Test public void shouldNotRemoveUsedPredicates() { assertThat(expr.removeUnusedPredicates("/a/b/c"), is("/a/b/c")); assertThat(expr.removeUnusedPredicates("/a/b[0]/c"), is("/a/b[0]/c")); assertThat(expr.removeUnusedPredicates("/a/b[1]/c"), is("/a/b[1]/c")); assertThat(expr.removeUnusedPredicates("/a/b[10]/c"), is("/a/b[10]/c")); assertThat(expr.removeUnusedPredicates("/a/b[100]/c"), is("/a/b[100]/c")); assertThat(expr.removeUnusedPredicates("/a/b[1000]/c"), is("/a/b[1000]/c")); assertThat(expr.removeUnusedPredicates("/a/b[]/c"), is("/a/b[]/c")); assertThat(expr.removeUnusedPredicates("/a/b[*]/c"), is("/a/b[*]/c")); assertThat(expr.removeUnusedPredicates("/a/b[1,2]/c"), is("/a/b[1,2]/c")); assertThat(expr.removeUnusedPredicates("/a/b[1,2,3,4,5]/c"), is("/a/b[1,2,3,4,5]/c")); assertThat(expr.removeUnusedPredicates("/a/b/c[@title]"), is("/a/b/c[@title]")); assertThat(expr.removeUnusedPredicates("/a/b/c[d/e/@title]"), is("/a/b/c[d/e/@title]")); assertThat(expr.removeUnusedPredicates("/a/(b/c)[(d|e)/(f|g)/@something]"), is("/a/(b/c)[(d|e)/(f|g)/@something]")); assertThat(expr.removeUnusedPredicates("/*"), is("/*")); assertThat(expr.removeUnusedPredicates("/*[]"), is("/*[]")); assertThat(expr.removeUnusedPredicates("/*[3]"), is("/*[3]")); // These are legal, but aren't really useful ... assertThat(expr.removeUnusedPredicates("/a/b[1][2][3]/c"), is("/a/b[1][2][3]/c")); }
matchString = removeUnusedPredicates(matchString); matchString = replaceXPathPatterns(matchString); this.matchPattern = Pattern.compile(matchString, Pattern.CASE_INSENSITIVE);