mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-27 10:07:15 +02:00
LibWeb: Add WPT tests related to XPath evaluation
This commit is contained in:
committed by
Jelle Raaijmakers
parent
d2030a5377
commit
e9e58d83b3
Notes:
github-actions[bot]
2025-10-03 11:17:25 +00:00
Author: https://github.com/johannesg Commit: https://github.com/LadybirdBrowser/ladybird/commit/e9e58d83b36 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6342 Reviewed-by: https://github.com/AtkinsSJ Reviewed-by: https://github.com/gmta ✅
@@ -0,0 +1,146 @@
|
||||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<title>XPathNSResolver implements callback interface</title>
|
||||
<link rel="help" href="https://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator">
|
||||
<link rel="help" href="https://webidl.spec.whatwg.org/#call-a-user-objects-operation">
|
||||
<script src="../resources/testharness.js"></script>
|
||||
<script src="../resources/testharnessreport.js"></script>
|
||||
<script src="resources/invalid_namespace_test.js"></script>
|
||||
<div id=log></div>
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
test(() => {
|
||||
let resolverCalls = 0;
|
||||
document.evaluate("/foo:bar", document.documentElement, () => {
|
||||
resolverCalls++;
|
||||
return "";
|
||||
});
|
||||
|
||||
assert_equals(resolverCalls, 1);
|
||||
}, "callable resolver");
|
||||
|
||||
test(() => {
|
||||
let resolverCalls = 0;
|
||||
const resolver = () => {
|
||||
resolverCalls++;
|
||||
return "";
|
||||
};
|
||||
|
||||
document.evaluate("/foo:bar", document.documentElement, resolver);
|
||||
document.evaluate("/foo:bar", document.documentElement, resolver);
|
||||
|
||||
assert_equals(resolverCalls, 2);
|
||||
}, "callable resolver: result is not cached");
|
||||
|
||||
promise_test(t => {
|
||||
const testError = { name: "test" };
|
||||
const resolver = () => {
|
||||
throw testError;
|
||||
};
|
||||
|
||||
return promise_rejects_exactly(t, testError,
|
||||
invalid_namespace_test(t, resolver)
|
||||
);
|
||||
}, "callable resolver: abrupt completion from Call");
|
||||
|
||||
test(() => {
|
||||
let resolverCalls = 0;
|
||||
const resolver = () => {
|
||||
resolverCalls++;
|
||||
return "";
|
||||
};
|
||||
|
||||
let resolverGets = 0;
|
||||
Object.defineProperty(resolver, "lookupNamespaceURI", {
|
||||
get() {
|
||||
resolverGets++;
|
||||
},
|
||||
});
|
||||
|
||||
document.evaluate("/foo:bar", document.documentElement, resolver);
|
||||
|
||||
assert_equals(resolverCalls, 1);
|
||||
assert_equals(resolverGets, 0);
|
||||
}, "callable resolver: no 'lookupNamespaceURI' lookups");
|
||||
|
||||
test(() => {
|
||||
let resolverCalls = 0;
|
||||
document.evaluate("/foo:bar", document.documentElement, {
|
||||
lookupNamespaceURI() {
|
||||
resolverCalls++;
|
||||
return "";
|
||||
},
|
||||
});
|
||||
|
||||
assert_equals(resolverCalls, 1);
|
||||
}, "object resolver");
|
||||
|
||||
test(() => {
|
||||
let thisValue, prefixArg;
|
||||
const resolver = {
|
||||
lookupNamespaceURI(prefix) {
|
||||
thisValue = this;
|
||||
prefixArg = prefix;
|
||||
return "";
|
||||
},
|
||||
};
|
||||
|
||||
document.evaluate("/foo:bar", document.documentElement, resolver);
|
||||
|
||||
assert_equals(thisValue, resolver);
|
||||
assert_equals(prefixArg, "foo");
|
||||
}, "object resolver: this value and `prefix` argument");
|
||||
|
||||
test(() => {
|
||||
let resolverCalls = 0;
|
||||
const lookupNamespaceURI = () => {
|
||||
resolverCalls++;
|
||||
return "";
|
||||
};
|
||||
|
||||
let resolverGets = 0;
|
||||
const resolver = {
|
||||
get lookupNamespaceURI() {
|
||||
resolverGets++;
|
||||
return lookupNamespaceURI;
|
||||
},
|
||||
};
|
||||
|
||||
document.evaluate("/foo:bar", document.documentElement, resolver);
|
||||
document.evaluate("/foo:bar", document.documentElement, resolver);
|
||||
|
||||
assert_equals(resolverCalls, 2);
|
||||
assert_equals(resolverGets, 2);
|
||||
}, "object resolver: 'lookupNamespaceURI' is not cached");
|
||||
|
||||
promise_test(t => {
|
||||
const testError = { name: "test" };
|
||||
const resolver = {
|
||||
get lookupNamespaceURI() {
|
||||
throw testError;
|
||||
},
|
||||
};
|
||||
|
||||
return promise_rejects_exactly(t, testError,
|
||||
invalid_namespace_test(t, resolver)
|
||||
);
|
||||
}, "object resolver: abrupt completion from Get");
|
||||
|
||||
promise_test(t => {
|
||||
const resolver = {
|
||||
lookupNamespaceURI: {},
|
||||
};
|
||||
|
||||
return promise_rejects_js(t, TypeError,
|
||||
invalid_namespace_test(t, resolver)
|
||||
);
|
||||
}, "object resolver: 'lookupNamespaceURI' is thruthy and not callable");
|
||||
|
||||
promise_test(t => {
|
||||
return promise_rejects_js(t, TypeError,
|
||||
invalid_namespace_test(t, {})
|
||||
);
|
||||
}, "object resolver: 'lookupNamespaceURI' is falsy and not callable");
|
||||
</script>
|
||||
</body>
|
||||
Reference in New Issue
Block a user