blob: 48da7264eac496215fe73dfaf6f87b9b63ec8d23 [file] [log] [blame]
Alexey Shvaykaee44ef02020-03-22 16:49:461<!DOCTYPE html>
2<meta charset=utf-8>
3<title>XPathNSResolver implements callback interface</title>
Alexey Shvayka09265412020-06-29 03:47:184<link rel="help" href="https://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator">
5<link rel="help" href="https://heycam.github.io/webidl/#call-a-user-objects-operation">
Alexey Shvaykaee44ef02020-03-22 16:49:466<script src="/resources/testharness.js"></script>
7<script src="/resources/testharnessreport.js"></script>
Alexey Shvayka09265412020-06-29 03:47:188<script src="resources/invalid_namespace_test.js"></script>
Alexey Shvaykaee44ef02020-03-22 16:49:469<div id=log></div>
10<script>
11"use strict";
Alexey Shvaykaee44ef02020-03-22 16:49:4612
13test(() => {
14 let resolverCalls = 0;
15 document.evaluate("/foo:bar", document.documentElement, () => {
16 resolverCalls++;
17 return "";
18 });
19
20 assert_equals(resolverCalls, 1);
21}, "callable resolver");
22
23test(() => {
24 let resolverCalls = 0;
25 const resolver = () => {
26 resolverCalls++;
27 return "";
28 };
29
30 document.evaluate("/foo:bar", document.documentElement, resolver);
31 document.evaluate("/foo:bar", document.documentElement, resolver);
32
33 assert_equals(resolverCalls, 2);
34}, "callable resolver: result is not cached");
35
Alexey Shvaykaee44ef02020-03-22 16:49:4636promise_test(t => {
37 const testError = { name: "test" };
38 const resolver = () => {
39 throw testError;
40 };
41
42 return promise_rejects_exactly(t, testError,
Alexey Shvayka09265412020-06-29 03:47:1843 invalid_namespace_test(t, resolver)
Alexey Shvaykaee44ef02020-03-22 16:49:4644 );
45}, "callable resolver: abrupt completion from Call");
46
47test(() => {
48 let resolverCalls = 0;
49 const resolver = () => {
50 resolverCalls++;
51 return "";
52 };
53
54 let resolverGets = 0;
55 Object.defineProperty(resolver, "lookupNamespaceURI", {
56 get() {
57 resolverGets++;
58 },
59 });
60
61 document.evaluate("/foo:bar", document.documentElement, resolver);
62
63 assert_equals(resolverCalls, 1);
64 assert_equals(resolverGets, 0);
65}, "callable resolver: no 'lookupNamespaceURI' lookups");
66
67test(() => {
68 let resolverCalls = 0;
69 document.evaluate("/foo:bar", document.documentElement, {
70 lookupNamespaceURI() {
71 resolverCalls++;
72 return "";
73 },
74 });
75
76 assert_equals(resolverCalls, 1);
77}, "object resolver");
78
79test(() => {
Alexey Shvaykae3d418b2020-06-29 14:15:0480 let thisValue, prefixArg;
81 const resolver = {
82 lookupNamespaceURI(prefix) {
83 thisValue = this;
84 prefixArg = prefix;
85 return "";
86 },
87 };
88
89 document.evaluate("/foo:bar", document.documentElement, resolver);
90
91 assert_equals(thisValue, resolver);
92 assert_equals(prefixArg, "foo");
93}, "object resolver: this value and `prefix` argument");
94
95test(() => {
Alexey Shvaykaee44ef02020-03-22 16:49:4696 let resolverCalls = 0;
97 const lookupNamespaceURI = () => {
98 resolverCalls++;
99 return "";
100 };
101
102 let resolverGets = 0;
103 const resolver = {
104 get lookupNamespaceURI() {
105 resolverGets++;
106 return lookupNamespaceURI;
107 },
108 };
109
110 document.evaluate("/foo:bar", document.documentElement, resolver);
111 document.evaluate("/foo:bar", document.documentElement, resolver);
112
113 assert_equals(resolverCalls, 2);
114 assert_equals(resolverGets, 2);
115}, "object resolver: 'lookupNamespaceURI' is not cached");
116
117promise_test(t => {
118 const testError = { name: "test" };
119 const resolver = {
120 get lookupNamespaceURI() {
121 throw testError;
122 },
123 };
124
125 return promise_rejects_exactly(t, testError,
Alexey Shvayka09265412020-06-29 03:47:18126 invalid_namespace_test(t, resolver)
Alexey Shvaykaee44ef02020-03-22 16:49:46127 );
128}, "object resolver: abrupt completion from Get");
129
130promise_test(t => {
131 const resolver = {
132 lookupNamespaceURI: {},
133 };
134
135 return promise_rejects_js(t, TypeError,
Alexey Shvayka09265412020-06-29 03:47:18136 invalid_namespace_test(t, resolver)
Alexey Shvaykaee44ef02020-03-22 16:49:46137 );
138}, "object resolver: 'lookupNamespaceURI' is thruthy and not callable");
139
140promise_test(t => {
141 return promise_rejects_js(t, TypeError,
Alexey Shvayka09265412020-06-29 03:47:18142 invalid_namespace_test(t, {})
Alexey Shvaykaee44ef02020-03-22 16:49:46143 );
144}, "object resolver: 'lookupNamespaceURI' is falsy and not callable");
145</script>
146</body>