| <!DOCTYPE html> |
| <meta charset=utf-8> |
| <title>XPathNSResolver non-string return value</title> |
| <link rel="help" href="https://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator"> |
| <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"; |
| |
| promise_test(t => { |
| return invalid_namespace_test(t, () => undefined); |
| }, "undefined"); |
| |
| promise_test(t => { |
| return invalid_namespace_test(t, () => null); |
| }, "null"); |
| |
| test(t => { |
| let resolverCalls = 0; |
| |
| document.evaluate("/foo:bar", document.documentElement, () => { |
| resolverCalls++; |
| return 0; |
| }); |
| |
| assert_equals(resolverCalls, 1); |
| }, "number"); |
| |
| test(t => { |
| let resolverCalls = 0; |
| |
| document.evaluate("/foo:bar", document.documentElement, () => { |
| resolverCalls++; |
| return false; |
| }); |
| |
| assert_equals(resolverCalls, 1); |
| }, "boolean"); |
| |
| promise_test(t => { |
| return promise_rejects_js(t, TypeError, |
| invalid_namespace_test(t, () => Symbol()) |
| ); |
| }, "symbol"); |
| |
| promise_test(t => { |
| const testError = { name: "test" }; |
| const resolverResult = { |
| toString: () => { throw testError; }, |
| valueOf: t.unreached_func("`valueOf` should not be called."), |
| }; |
| |
| return promise_rejects_exactly(t, testError, |
| invalid_namespace_test(t, () => resolverResult) |
| ); |
| }, "object coercion (abrupt completion)"); |
| </script> |
| </body> |