Skip to content

Commit

Permalink
Annotate tests for JavaScript and XPath syntax highlighting in Intell…
Browse files Browse the repository at this point in the history
…iJ (#1730)
  • Loading branch information
labkey-tchad authored Nov 20, 2023
1 parent dfdfc5e commit 374dd91
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 19 deletions.
19 changes: 12 additions & 7 deletions src/org/labkey/test/Locator.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.mutable.MutableObject;
import org.intellij.lang.annotations.Language;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.labkey.test.selenium.LazyWebElement;
Expand Down Expand Up @@ -59,15 +60,19 @@ public abstract class Locator extends By
private String _description;

// XPATH fragments
@Language("XPath")
public static final String HIDDEN = "ancestor-or-self::*[" +
"contains(@style,'display: none') or " +
"contains(@style,'visibility: hidden') or " +
"contains(@class, 'x-hide-display') or " +
"contains(@class, 'x4-hide-offsets') or " +
"contains(@class, 'x-hide-offsets')] or " +
"(@type = 'hidden')";
@Language("XPath")
public static final String NOT_HIDDEN = "not(" + HIDDEN + ")";
@Language("XPath")
public static final String DISABLED = "ancestor-or-self::*[contains(@class, 'disabled')]";
@Language("XPath")
public static final String ENABLED = "not(" + DISABLED + ")";
public static final String NBSP = "\u00A0";

Expand Down Expand Up @@ -574,7 +579,7 @@ public static CssLocator css(String selector)
return new CssLocator(selector);
}

public static XPathLocator xpath(String xpathExpr)
public static XPathLocator xpath(@Language("XPath") String xpathExpr)
{
return new XPathLocator(xpathExpr);
}
Expand Down Expand Up @@ -1176,7 +1181,7 @@ protected By getRelativeBy()

public static class XPathLocator extends Locator
{
protected XPathLocator(String loc)
protected XPathLocator(@Language("XPath") String loc)
{
super(loc);
}
Expand Down Expand Up @@ -1229,7 +1234,7 @@ public XPathLocator withoutText(String text)

public XPathLocator withoutText()
{
return this.withPredicate("string-length() == 0");
return this.withPredicate("string-length() = 0");
}

public XPathLocator withTextMatching(String regex)
Expand Down Expand Up @@ -1321,7 +1326,7 @@ public XPathLocator last()
return withPredicate("last()");
}

public XPathLocator append(String clause)
public XPathLocator append(@Language("XPath") String clause)
{
return new XPathLocator(getLoc() + clause);
}
Expand Down Expand Up @@ -1357,12 +1362,12 @@ public XPathLocator withPredicate(XPathLocator descendant)
return this.withPredicate(descendant.getLoc());
}

public XPathLocator withPredicate(String predicate)
public XPathLocator withPredicate(@Language("XPath") String predicate)
{
return this.append("[" + getRelativeXPath(predicate) + "]");
}

public XPathLocator withoutPredicate(String predicate)
public XPathLocator withoutPredicate(@Language("XPath") String predicate)
{
return this.append("[not(" + getRelativeXPath(predicate) + ")]");
}
Expand Down Expand Up @@ -1525,7 +1530,7 @@ private String getRelativeXPath()
return getRelativeXPath(getLoc());
}

private String getRelativeXPath(String xpath)
private String getRelativeXPath(@Language("XPath") String xpath)
{
if (xpath.startsWith("//") || xpath.startsWith("(//"))
xpath = xpath.replaceFirst("//", ".//");
Expand Down
26 changes: 14 additions & 12 deletions src/org/labkey/test/WebDriverWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.apache.commons.lang3.mutable.MutableInt;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.intellij.lang.annotations.Language;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand Down Expand Up @@ -452,7 +453,7 @@ public boolean isFirefox()
return getDriver().getClass().isAssignableFrom(FirefoxDriver.class);
}

public Object executeScript(String script, Object... arguments)
public Object executeScript(@Language("JavaScript") String script, Object... arguments)
{
return ((JavascriptExecutor) getDriver()).executeScript(script, arguments);
}
Expand All @@ -461,7 +462,7 @@ public Object executeScript(String script, Object... arguments)
* Wrapper for executing JavaScript through WebDriver and verifying return type.
* @param <T> See {@link JavascriptExecutor#executeScript(java.lang.String, java.lang.Object...)} for valid return types
*/
public <T> T executeScript(String script, Class<T> expectedResultType, Object... arguments)
public <T> T executeScript(@Language("JavaScript") String script, Class<T> expectedResultType, Object... arguments)
{
Object o = executeScript(script, arguments);
if (o != null && !expectedResultType.isAssignableFrom(o.getClass()))
Expand All @@ -474,7 +475,7 @@ public <T> T executeScript(String script, Class<T> expectedResultType, Object...
* Wrapper for synchronous execution of asynchronous JavaScript. This wrapper extracts the 'callback' from the argument list
* See {@link JavascriptExecutor#executeAsyncScript(java.lang.String, java.lang.Object...)} for details
*/
public Object executeAsyncScript(String script, Object... arguments)
public Object executeAsyncScript(@Language("XPath") String script, Object... arguments)
{
script = "var callback = arguments[arguments.length - 1];\n" + // See WebDriver documentation for details on injected callback
"try {" +
Expand Down Expand Up @@ -1475,15 +1476,16 @@ public void fireEvent(Locator l, SeleniumEvent event)
*/
public void fireEvent(WebElement el, SeleniumEvent event)
{
executeScript("var element = arguments[0];" +
"var eventType = arguments[1];" +
"var myEvent = document.createEvent('UIEvent');" +
"myEvent.initEvent(" +
" eventType, /* event type */" +
" true, /* can bubble? */" +
" true /* cancelable? */" +
");" +
"element.dispatchEvent(myEvent);", el, event.toString());
executeScript("""
var element = arguments[0];
var eventType = arguments[1];
var myEvent = document.createEvent('UIEvent');
myEvent.initEvent(
eventType, /* event type */
true, /* can bubble? */
true /* cancelable? */
);
element.dispatchEvent(myEvent);""", el, event.toString());
}

public void assertTitleEquals(String match)
Expand Down

0 comments on commit 374dd91

Please sign in to comment.