mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-02 22:37:50 +00:00
Bug 1444909 part 2. Change DOMTokenList.replace() to return a boolean and pull in the corresponding web platform test updates. r=qdot
The wpt changes come from https://github.com/w3c/web-platform-tests/pull/9920 and are needed to keep Element-classlist.html passing. The change to testing/web-platform/mozilla/tests/dom/classList.html is pulling those changes into our weird forked version of that test... MozReview-Commit-ID: CvQlBRuieUY
This commit is contained in:
parent
cbabf9ebea
commit
c35649f885
@ -314,7 +314,7 @@ nsDOMTokenList::Toggle(const nsAString& aToken,
|
||||
return isPresent;
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
nsDOMTokenList::Replace(const nsAString& aToken,
|
||||
const nsAString& aNewToken,
|
||||
ErrorResult& aError)
|
||||
@ -324,28 +324,28 @@ nsDOMTokenList::Replace(const nsAString& aToken,
|
||||
// SyntaxError, not an InvalidCharacterError.
|
||||
if (aNewToken.IsEmpty()) {
|
||||
aError.Throw(NS_ERROR_DOM_SYNTAX_ERR);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
aError = CheckToken(aToken);
|
||||
if (aError.Failed()) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
aError = CheckToken(aNewToken);
|
||||
if (aError.Failed()) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
const nsAttrValue* attr = GetParsedAttr();
|
||||
if (!attr) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
ReplaceInternal(attr, aToken, aNewToken);
|
||||
return ReplaceInternal(attr, aToken, aNewToken);
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
nsDOMTokenList::ReplaceInternal(const nsAttrValue* aAttr,
|
||||
const nsAString& aToken,
|
||||
const nsAString& aNewToken)
|
||||
@ -363,7 +363,7 @@ nsDOMTokenList::ReplaceInternal(const nsAttrValue* aAttr,
|
||||
}
|
||||
if (!haveOld) {
|
||||
// Make sure to not touch the attribute value in this case.
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool sawIt = false;
|
||||
@ -390,6 +390,7 @@ nsDOMTokenList::ReplaceInternal(const nsAttrValue* aAttr,
|
||||
|
||||
MOZ_ASSERT(sawIt, "How could we not have found our token this time?");
|
||||
mElement->SetAttr(kNameSpaceID_None, mAttrAtom, resultStr, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -75,7 +75,7 @@ public:
|
||||
void Remove(const nsAString& aToken, mozilla::ErrorResult& aError);
|
||||
void Remove(const nsTArray<nsString>& aTokens,
|
||||
mozilla::ErrorResult& aError);
|
||||
void Replace(const nsAString& aToken,
|
||||
bool Replace(const nsAString& aToken,
|
||||
const nsAString& aNewToken,
|
||||
mozilla::ErrorResult& aError);
|
||||
bool Toggle(const nsAString& aToken,
|
||||
@ -99,7 +99,7 @@ protected:
|
||||
const nsTArray<nsString>& aTokens);
|
||||
void RemoveInternal(const nsAttrValue* aAttr,
|
||||
const nsTArray<nsString>& aTokens);
|
||||
void ReplaceInternal(const nsAttrValue* aAttr,
|
||||
bool ReplaceInternal(const nsAttrValue* aAttr,
|
||||
const nsAString& aToken,
|
||||
const nsAString& aNewToken);
|
||||
inline const nsAttrValue* GetParsedAttr();
|
||||
|
@ -19,7 +19,7 @@ interface DOMTokenList {
|
||||
[CEReactions, Throws]
|
||||
void remove(DOMString... tokens);
|
||||
[CEReactions, Throws]
|
||||
void replace(DOMString token, DOMString newToken);
|
||||
boolean replace(DOMString token, DOMString newToken);
|
||||
[CEReactions, Throws]
|
||||
boolean toggle(DOMString token, optional boolean force);
|
||||
[Throws]
|
||||
|
@ -426,68 +426,66 @@ function testClassList(e, desc) {
|
||||
|
||||
|
||||
// replace() method
|
||||
function checkReplace(before, token, newToken, after, expectedException) {
|
||||
checkModification(e, "replace", [token, newToken], undefined, before,
|
||||
function checkReplace(before, token, newToken, expectedRes, after, expectedException) {
|
||||
checkModification(e, "replace", [token, newToken], expectedRes, before,
|
||||
after, expectedException, desc);
|
||||
}
|
||||
|
||||
checkReplace(null, "", "a", null, "SyntaxError");
|
||||
checkReplace(null, "", " ", null, "SyntaxError");
|
||||
checkReplace(null, " ", "a", null, "InvalidCharacterError");
|
||||
checkReplace(null, "\ta", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\t", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "\na", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\n", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "\fa", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\f", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "\ra", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\r", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, " a", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "a ", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "", "a", null, null, "SyntaxError");
|
||||
checkReplace(null, "", " ", null, null, "SyntaxError");
|
||||
checkReplace(null, " ", "a", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "\ta", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\t", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "\na", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\n", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "\fa", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\f", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "\ra", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\r", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, " a", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "a ", "b", null, null, "InvalidCharacterError");
|
||||
|
||||
checkReplace(null, "a", "", null, "SyntaxError");
|
||||
checkReplace(null, " ", "", null, "SyntaxError");
|
||||
checkReplace(null, "a", " ", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\ta", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\t", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\na", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\n", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\fa", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\f", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\ra", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\r", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", " a", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a ", null, "InvalidCharacterError");
|
||||
checkReplace(null, "a", "", null, null, "SyntaxError");
|
||||
checkReplace(null, " ", "", null, null, "SyntaxError");
|
||||
checkReplace(null, "a", " ", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\ta", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\t", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\na", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\n", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\fa", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\f", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\ra", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\r", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", " a", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a ", null, null, "InvalidCharacterError");
|
||||
|
||||
checkReplace("a", "a", "a", "a");
|
||||
checkReplace("a", "a", "b", "b");
|
||||
checkReplace("a", "A", "b", "a");
|
||||
checkReplace("a b", "b", "A", "a A");
|
||||
checkReplace("a b c", "d", "e", "a b c");
|
||||
checkReplace("a", "a", "a", true, "a");
|
||||
checkReplace("a", "a", "b", true, "b");
|
||||
checkReplace("a", "A", "b", false, "a");
|
||||
checkReplace("a b", "b", "A", true, "a A");
|
||||
checkReplace("a b", "c", "a", false, "a b");
|
||||
checkReplace("a b c", "d", "e", false, "a b c");
|
||||
// https://github.com/whatwg/dom/issues/443
|
||||
checkReplace("a a a b", "a", "a", "a b");
|
||||
checkReplace("a a a b", "c", "d", "a a a b");
|
||||
checkReplace(null, "a", "b", null);
|
||||
checkReplace("", "a", "b", "");
|
||||
checkReplace(" ", "a", "b", " ");
|
||||
checkReplace(" a \f", "a", "b", "b");
|
||||
checkReplace("a b c", "b", "d", "a d c");
|
||||
// https://github.com/whatwg/dom/issues/442
|
||||
// Implementations agree on the first one here, so I test it, but disagree on
|
||||
// the second, so no test until the spec decides what to say.
|
||||
checkReplace("a b c", "c", "a", "a b");
|
||||
//checkReplace("c b a", "c", "a", ???);
|
||||
checkReplace("a b a", "a", "c", "c b");
|
||||
checkReplace("a b a", "b", "c", "a c");
|
||||
checkReplace(" a a b", "a", "c", "c b");
|
||||
checkReplace(" a a b", "b", "c", "a c");
|
||||
checkReplace("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "a", "c", "c b");
|
||||
checkReplace("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "b", "c", "a c");
|
||||
checkReplace("a a a b", "a", "a", true, "a b");
|
||||
checkReplace("a a a b", "c", "d", false, "a a a b");
|
||||
checkReplace(null, "a", "b", false, null);
|
||||
checkReplace("", "a", "b", false, "");
|
||||
checkReplace(" ", "a", "b", false, " ");
|
||||
checkReplace(" a \f", "a", "b", true, "b");
|
||||
checkReplace("a b c", "b", "d", true, "a d c");
|
||||
checkReplace("a b c", "c", "a", true, "a b");
|
||||
checkReplace("c b a", "c", "a", true, "a b");
|
||||
checkReplace("a b a", "a", "c", true, "c b");
|
||||
checkReplace("a b a", "b", "c", true, "a c");
|
||||
checkReplace(" a a b", "a", "c", true, "c b");
|
||||
checkReplace(" a a b", "b", "c", true, "a c");
|
||||
checkReplace("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "a", "c", true, "c b");
|
||||
checkReplace("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "b", "c", true, "a c");
|
||||
|
||||
checkReplace("a null", null, "b", "a b");
|
||||
checkReplace("a b", "a", null, "null b");
|
||||
checkReplace("a undefined", undefined, "b", "a b");
|
||||
checkReplace("a b", "a", undefined, "undefined b");
|
||||
checkReplace("a null", null, "b", true, "a b");
|
||||
checkReplace("a b", "a", null, true, "null b");
|
||||
checkReplace("a undefined", undefined, "b", true, "a b");
|
||||
checkReplace("a b", "a", undefined, true, "undefined b");
|
||||
}
|
||||
|
||||
var content = document.getElementById("content");
|
||||
|
@ -370,65 +370,66 @@ function testClassList(e, desc) {
|
||||
|
||||
|
||||
// replace() method
|
||||
function checkReplace(before, token, newToken, after, expectedException) {
|
||||
checkModification(e, "replace", [token, newToken], undefined, before,
|
||||
function checkReplace(before, token, newToken, expectedRes, after, expectedException) {
|
||||
checkModification(e, "replace", [token, newToken], expectedRes, before,
|
||||
after, expectedException, desc);
|
||||
}
|
||||
|
||||
checkReplace(null, "", "a", null, "SyntaxError");
|
||||
checkReplace(null, "", " ", null, "SyntaxError");
|
||||
checkReplace(null, " ", "a", null, "InvalidCharacterError");
|
||||
checkReplace(null, "\ta", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\t", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "\na", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\n", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "\fa", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\f", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "\ra", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\r", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, " a", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "a ", "b", null, "InvalidCharacterError");
|
||||
checkReplace(null, "", "a", null, null, "SyntaxError");
|
||||
checkReplace(null, "", " ", null, null, "SyntaxError");
|
||||
checkReplace(null, " ", "a", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "\ta", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\t", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "\na", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\n", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "\fa", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\f", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "\ra", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "a\r", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, " a", "b", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "a ", "b", null, null, "InvalidCharacterError");
|
||||
|
||||
checkReplace(null, "a", "", null, "SyntaxError");
|
||||
checkReplace(null, " ", "", null, "SyntaxError");
|
||||
checkReplace(null, "a", " ", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\ta", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\t", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\na", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\n", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\fa", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\f", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\ra", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\r", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", " a", null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a ", null, "InvalidCharacterError");
|
||||
checkReplace(null, "a", "", null, null, "SyntaxError");
|
||||
checkReplace(null, " ", "", null, null, "SyntaxError");
|
||||
checkReplace(null, "a", " ", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\ta", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\t", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\na", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\n", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\fa", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\f", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "\ra", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a\r", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", " a", null, null, "InvalidCharacterError");
|
||||
checkReplace(null, "b", "a ", null, null, "InvalidCharacterError");
|
||||
|
||||
checkReplace("a", "a", "a", "a");
|
||||
checkReplace("a", "a", "b", "b");
|
||||
checkReplace("a", "A", "b", "a");
|
||||
checkReplace("a b", "b", "A", "a A");
|
||||
checkReplace("a b c", "d", "e", "a b c");
|
||||
checkReplace("a", "a", "a", true, "a");
|
||||
checkReplace("a", "a", "b", true, "b");
|
||||
checkReplace("a", "A", "b", false, "a");
|
||||
checkReplace("a b", "b", "A", true, "a A");
|
||||
checkReplace("a b", "c", "a", false, "a b");
|
||||
checkReplace("a b c", "d", "e", false, "a b c");
|
||||
// https://github.com/whatwg/dom/issues/443
|
||||
checkReplace("a a a b", "a", "a", "a b");
|
||||
checkReplace("a a a b", "c", "d", "a a a b");
|
||||
checkReplace(null, "a", "b", null);
|
||||
checkReplace("", "a", "b", "");
|
||||
checkReplace(" ", "a", "b", " ");
|
||||
checkReplace(" a \f", "a", "b", "b");
|
||||
checkReplace("a b c", "b", "d", "a d c");
|
||||
checkReplace("a b c", "c", "a", "a b");
|
||||
checkReplace("c b a", "c", "a", "a b");
|
||||
checkReplace("a b a", "a", "c", "c b");
|
||||
checkReplace("a b a", "b", "c", "a c");
|
||||
checkReplace(" a a b", "a", "c", "c b");
|
||||
checkReplace(" a a b", "b", "c", "a c");
|
||||
checkReplace("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "a", "c", "c b");
|
||||
checkReplace("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "b", "c", "a c");
|
||||
checkReplace("a a a b", "a", "a", true, "a b");
|
||||
checkReplace("a a a b", "c", "d", false, "a a a b");
|
||||
checkReplace(null, "a", "b", false, null);
|
||||
checkReplace("", "a", "b", false, "");
|
||||
checkReplace(" ", "a", "b", false, " ");
|
||||
checkReplace(" a \f", "a", "b", true, "b");
|
||||
checkReplace("a b c", "b", "d", true, "a d c");
|
||||
checkReplace("a b c", "c", "a", true, "a b");
|
||||
checkReplace("c b a", "c", "a", true, "a b");
|
||||
checkReplace("a b a", "a", "c", true, "c b");
|
||||
checkReplace("a b a", "b", "c", true, "a c");
|
||||
checkReplace(" a a b", "a", "c", true, "c b");
|
||||
checkReplace(" a a b", "b", "c", true, "a c");
|
||||
checkReplace("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "a", "c", true, "c b");
|
||||
checkReplace("\t\n\f\r a\t\n\f\r b\t\n\f\r ", "b", "c", true, "a c");
|
||||
|
||||
checkReplace("a null", null, "b", "a b");
|
||||
checkReplace("a b", "a", null, "null b");
|
||||
checkReplace("a undefined", undefined, "b", "a b");
|
||||
checkReplace("a b", "a", undefined, "undefined b");
|
||||
checkReplace("a null", null, "b", true, "a b");
|
||||
checkReplace("a b", "a", null, true, "null b");
|
||||
checkReplace("a undefined", undefined, "b", true, "a b");
|
||||
checkReplace("a b", "a", undefined, true, "undefined b");
|
||||
}
|
||||
|
||||
var content = document.getElementById("content");
|
||||
|
@ -548,7 +548,7 @@ interface DOMTokenList {
|
||||
[CEReactions] void add(DOMString... tokens);
|
||||
[CEReactions] void remove(DOMString... tokens);
|
||||
[CEReactions] boolean toggle(DOMString token, optional boolean force);
|
||||
[CEReactions] void replace(DOMString token, DOMString newToken);
|
||||
[CEReactions] boolean replace(DOMString token, DOMString newToken);
|
||||
boolean supports(DOMString token);
|
||||
[CEReactions] stringifier attribute DOMString value;
|
||||
// iterable<DOMString>;
|
||||
|
Loading…
x
Reference in New Issue
Block a user