Files
tubestation/testing/web-platform/tests/scroll-to-text-fragment/non-html-documents.html
Jan-Niklas Jaeschke d19576419c Bug 1907901 - Text Fragments: Separate json test case to let others pass. r=dom-core,sefeng
The test to check if scrolling is allowed in non-html documents times out for JSON,
because it depends on the `onload` event, which Gecko is not firing for JSON (Bug 1905106).

Additionally, other test cases in that file can time out on CI as well.

With this patch, the JSON test case is separated into its own file and is expected to `TIMEOUT`. The other test cases get a longer timeout so that they pass in all configurations.

Differential Revision: https://phabricator.services.mozilla.com/D216565
2024-07-16 07:08:55 +00:00

77 lines
2.0 KiB
HTML

<!doctype html>
<title>Allow text fragments in HTML documents only</title>
<meta charset=utf-8>
<meta name="timeout" content="long">
<link rel="help" href="https://wicg.github.io/ScrollToTextFragment/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/common/utils.js"></script>
<script src="stash.js"></script>
<script>
function rAF(win) {
return new Promise((resolve) => {
win.requestAnimationFrame(resolve);
});
}
function openPopup(url) {
return new Promise((resolve) => {
test_driver.bless('Open a URL with a text fragment directive', () => {
const popup = window.open(url, '_blank', 'width=300,height=300');
popup.onload = () => resolve(popup);
});
});
}
const test_cases = [
{
filename: 'text-html.html',
expected: 'allowed',
},
{
filename: 'text-css.css',
expected: 'blocked',
},
{
filename: 'text-javascript.js',
expected: 'blocked',
},
{
filename: 'text-plain.txt',
expected: 'allowed',
},
{
filename: 'application-xml.xml',
expected: 'blocked',
},
];
for (let test_case of test_cases) {
const filename = test_case.filename;
const expected = test_case.expected;
const mediaType = filename.split('.')[0].replace('-', '/');
promise_test(async function (t) {
const popup = await openPopup(`resources/${filename}#:~:text=target`);
// The WPT server should provide the correct content-type header from the
// file extension.
assert_equals(popup.document.contentType, mediaType);
// rAF twice in case there is any asynchronicity in scrolling to the target.
await rAF(popup);
await rAF(popup);
const did_scroll = popup.scrollY > 0;
const expected_scroll = expected == 'allowed';
assert_equals(did_scroll, expected_scroll, 'scrolled to fragment');
popup.close();
}, `Text directive ${expected} in ${mediaType}`);
}
</script>