blob: a1abb0a8268528bed9fcacd71f8eed8ad796881e [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(() => {
80 let resolverCalls = 0;
81 const lookupNamespaceURI = () => {
82 resolverCalls++;
83 return "";
84 };
85
86 let resolverGets = 0;
87 const resolver = {
88 get lookupNamespaceURI() {
89 resolverGets++;
90 return lookupNamespaceURI;
91 },
92 };
93
94 document.evaluate("/foo:bar", document.documentElement, resolver);
95 document.evaluate("/foo:bar", document.documentElement, resolver);
96
97 assert_equals(resolverCalls, 2);
98 assert_equals(resolverGets, 2);
99}, "object resolver: 'lookupNamespaceURI' is not cached");
100
101promise_test(t => {
102 const testError = { name: "test" };
103 const resolver = {
104 get lookupNamespaceURI() {
105 throw testError;
106 },
107 };
108
109 return promise_rejects_exactly(t, testError,
Alexey Shvayka09265412020-06-29 03:47:18110 invalid_namespace_test(t, resolver)
Alexey Shvaykaee44ef02020-03-22 16:49:46111 );
112}, "object resolver: abrupt completion from Get");
113
114promise_test(t => {
115 const resolver = {
116 lookupNamespaceURI: {},
117 };
118
119 return promise_rejects_js(t, TypeError,
Alexey Shvayka09265412020-06-29 03:47:18120 invalid_namespace_test(t, resolver)
Alexey Shvaykaee44ef02020-03-22 16:49:46121 );
122}, "object resolver: 'lookupNamespaceURI' is thruthy and not callable");
123
124promise_test(t => {
125 return promise_rejects_js(t, TypeError,
Alexey Shvayka09265412020-06-29 03:47:18126 invalid_namespace_test(t, {})
Alexey Shvaykaee44ef02020-03-22 16:49:46127 );
128}, "object resolver: 'lookupNamespaceURI' is falsy and not callable");
129</script>
130</body>