Skip to content

Commit

Permalink
DOMTokenList toggle() method got some fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
rbri committed Aug 15, 2024
1 parent ac8eef4 commit a3c4e15
Show file tree
Hide file tree
Showing 3 changed files with 345 additions and 64 deletions.
3 changes: 3 additions & 0 deletions src/changes/changes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
<action type="add" dev="RhinoTeam">
core-js: Symbol.unscopables for arrays implemented.
</action>
<action type="fix" dev="rbri">
DOMTokenList toggle() method got some fixes.
</action>
<action type="add" dev="rbri">
DOMTokenList value property added.
</action>
Expand Down
31 changes: 25 additions & 6 deletions src/main/java/org/htmlunit/javascript/host/dom/DOMTokenList.java
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,11 @@ public void remove(final String token) {
throw JavaScriptEngine.reportRuntimeError("Empty input not allowed");
}

final List<String> parts = split(getValue());
final String value = getValue();
if (value == null) {
return;
}
final List<String> parts = split(value);
parts.remove(token);
updateAttribute(String.join(" ", parts));
}
Expand Down Expand Up @@ -195,7 +199,11 @@ public boolean replace(final String oldToken, final String newToken) {
throw JavaScriptEngine.reportRuntimeError("newToken contains whitespace");
}

final List<String> parts = split(getValue());
final String value = getValue();
if (value == null) {
return false;
}
final List<String> parts = split(value);
final int pos = parts.indexOf(oldToken);
while (pos == -1) {
return false;
Expand All @@ -213,11 +221,22 @@ public boolean replace(final String oldToken, final String newToken) {
*/
@JsxFunction
public boolean toggle(final String token) {
if (contains(token)) {
remove(token);
if (StringUtils.isEmpty(token)) {
throw JavaScriptEngine.reportRuntimeError("Empty input not allowed");
}
if (StringUtils.containsAny(token, WHITESPACE_CHARS)) {
throw JavaScriptEngine.reportRuntimeError("token contains whitespace");
}

final List<String> parts = split(getValue());
if (parts.contains(token)) {
parts.remove(token);
updateAttribute(String.join(" ", parts));
return false;
}
add(token);

parts.add(token);
updateAttribute(String.join(" ", parts));
return true;
}

Expand All @@ -236,7 +255,7 @@ public boolean contains(final String token) {
throw JavaScriptEngine.reportRuntimeError("Empty input not allowed");
}
if (StringUtils.containsAny(token, WHITESPACE_CHARS)) {
throw JavaScriptEngine.reportRuntimeError("Empty input not allowed");
throw JavaScriptEngine.reportRuntimeError("token contains whitespace");
}

final List<String> parts = split(getValue());
Expand Down
Loading

0 comments on commit a3c4e15

Please sign in to comment.