script: Added missing spec step in Location::SetHash (#33380)

* Implement missing spec step in Location::SetHash

Signed-off-by: crbrz <cristianb@gmail.com>

* Fixed wrong URL fragment when hash set to empty string

Signed-off-by: crbrz <cristianb@gmail.com>

* Add WPT tests

Signed-off-by: crbrz <cristianb@gmail.com>

---------

Signed-off-by: crbrz <cristianb@gmail.com>
This commit is contained in:
Cristian Brinza 2024-09-09 19:58:26 +03:00 committed by GitHub
parent cc3c69b953
commit 2993577ac0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 64 additions and 6 deletions

View file

@ -641539,6 +641539,20 @@
{}
]
],
"location_hash_set_empty_string.html": [
"bfde4e638290c0ef1b4068b399e7428d090544b2",
[
null,
{}
]
],
"location_hashchange_infinite_loop.html": [
"694c619ecabdb8b8e2f69fc6144e59f5a8279818",
[
null,
{}
]
],
"location_host.html": [
"d93bf47e506f131e29f2009e1f4446bc5844aee5",
[

View file

@ -0,0 +1,17 @@
<!doctype html>
<meta charset="utf-8">
<title>Set window.location.hash to an empty string</title>
<link rel="author" href="mailto:cristianb@gmail.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-location-hash">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
const orig_location = window.location.href;
window.location.hash = '';
test(() => {
assert_true(window.location.hash === '');
assert_true(window.location.href === orig_location + '#');
}, 'window.location.hash is an empty string');
</script>

View file

@ -0,0 +1,21 @@
<!doctype html>
<meta charset="utf-8">
<title>Set window.location.hash to same value while handling event hashchange</title>
<link rel="author" href="mailto:cristianb@gmail.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-location-hash">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
let count = 0;
window.onhashchange = () => {
count += 1;
window.location.hash = 'running';
}
promise_test(async t => {
window.location.hash = 'running';
await t.step_wait(() => count === 1);
}, 'Setting window.location.hash to same value while handling hashchange event shouldn\'t cause an infinite loop.');
</script>