HighlightRegistry-maplike.html (5887B)
1 <!doctype html> 2 <title>HighlightRegistry has a maplike interface</title> 3 <link rel="help" href="https://drafts.csswg.org/css-highlight-api-1/"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script> 7 'use strict'; 8 9 test(() => { 10 assert_not_equals(window.HighlightRegistry, undefined, 'HighlightRegistry is in window'); 11 assert_equals(typeof HighlightRegistry, 'function', 'HighlightRegistry is a function'); 12 assert_throws_js(TypeError, function () { var x = new HighlightRegistry(); }, 13 'HighlightRegistry constructor throws'); 14 15 assert_not_equals(CSS.highlights, undefined, 'CSS.highlights exists'); 16 assert_equals(CSS.highlights.__proto__, window.HighlightRegistry.prototype, 17 'CSS.highlights and window.HighlightRegistry have same prototype'); 18 19 assert_equals(CSS.highlights.size, 0, 'HighlightRegistry starts empty'); 20 }, 'HighlightRegistry initializes as it should.'); 21 22 test(() => { 23 let name1 = "example1"; 24 let name2 = "example2"; 25 let h1 = new Highlight(); 26 let h2 = new Highlight(); 27 28 assert_false(CSS.highlights.has(name1), 'HighlightRegistry.has returns false when it doesn\'t have the key which is called with as argument.'); 29 CSS.highlights.set(name1, h1); 30 assert_true(CSS.highlights.has(name1), 'HighlightRegistry.has returns true when it has the key which is called with as argument.'); 31 assert_equals(CSS.highlights.size, 1, 'HighlightRegistry.size is 1 after only inserting 1 key.'); 32 33 assert_false(CSS.highlights.delete(name2), 'HighlightRegistry.delete returns false when trying to delete an key that is not in the map.'); 34 assert_equals(CSS.highlights.size, 1, 'HighlightRegistry.size stays the same after trying to delete a non-existing key.'); 35 36 CSS.highlights.set(name2, h2); 37 assert_true(CSS.highlights.has(name1), 'HighlightRegistry.has returns true when it is called with the key inserted first'); 38 assert_true(CSS.highlights.has(name2), 'HighlightRegistry.has returns true when it is called with the key inserted second'); 39 assert_equals(CSS.highlights.get(name1), h1, 'HighlightRegistry.get returns the first Highlight when it is called with the key inserted first'); 40 assert_equals(CSS.highlights.get(name2), h2, 'HighlightRegistry.get returns the second Highlight when it is called with the key inserted second'); 41 assert_equals(CSS.highlights.size, 2, 'HighlightRegistry.size is 2 after only inserting two different keys.'); 42 43 assert_true(CSS.highlights.delete(name2), 'HighlightRegistry.delete returns true when trying to delete a key that is in the group.'); 44 assert_true(CSS.highlights.has(name1), 'HighlightRegistry.has returns true when it is called with the key inserted first'); 45 assert_false(CSS.highlights.has(name2), 'HighlightRegistry.has returns true when it is called with the key that was deleted'); 46 assert_equals(CSS.highlights.get(name1), h1, 'HighlightRegistry.get still returns the first Highlight when it is called with the key inserted first'); 47 assert_equals(CSS.highlights.get(name2), undefined, 'HighlightRegistry.get returns undefined when it is called with a key that was deleted'); 48 assert_equals(CSS.highlights.size, 1, 'HighlightRegistry.size decreases in 1 after deleting an existing key.'); 49 50 assert_false(CSS.highlights.delete(name2), 'HighlightRegistry.delete returns false when trying to delete a key that was already deleted.'); 51 assert_true(CSS.highlights.has(name1), 'HighlightRegistry.has returns true when it is called with the key inserted first'); 52 assert_false(CSS.highlights.has(name2), 'HighlightRegistry.has returns false when it is called with a key that was deleted twice'); 53 assert_equals(CSS.highlights.get(name1), h1, 'HighlightRegistry.get still returns the first Highlight when it is called with the key inserted first'); 54 assert_equals(CSS.highlights.get(name2), undefined, 'HighlightRegistry.get still returns undefined when it is called with a key that was deleted'); 55 assert_equals(CSS.highlights.size, 1, 'HighlightRegistry.size stays the same after trying to delete the same key for a second time.'); 56 57 assert_true(CSS.highlights.delete(name1), 'HighlightRegistry.delete returns true when trying to delete the remaining key'); 58 assert_false(CSS.highlights.has(name1), 'HighlightRegistry.has returns false when it is called with the key inserted first and then deleted'); 59 assert_false(CSS.highlights.has(name2), 'HighlightRegistry.has returns false when it is called with the key inserted second and then deleted'); 60 assert_equals(CSS.highlights.get(name1), undefined, 'HighlightRegistry.get returns undefined when it is called with a key that was deleted'); 61 assert_equals(CSS.highlights.get(name2), undefined, 'HighlightRegistry.get returns undefined when it is called with a key that was deleted'); 62 assert_equals(CSS.highlights.size, 0, 'HighlightRegistry.size decreases in 1 after deleting an existing key.'); 63 64 CSS.highlights.set(name1, h1); 65 CSS.highlights.set(name1, h2); 66 assert_equals(CSS.highlights.size, 1, 'HighlightRegistry.size keeps the same after an insertion of a Highlight with an existing name'); 67 assert_equals(CSS.highlights.get(name1), h2, 'The Highlight inserted with the same name as an existing one was effectively inserted into the registry'); 68 69 CSS.highlights.clear(); 70 assert_equals(CSS.highlights.size, 0, 'HighlightRegistry.clear empties the map.'); 71 CSS.highlights.clear(); 72 assert_equals(CSS.highlights.size, 0, 'HighlightRegistry.clear called with an empty registry keeps it empty.'); 73 74 CSS.highlights.set(name1, h1).set(name2, h2); 75 assert_equals(CSS.highlights.size, 2, 'HighlightRegistry.size is 2 after inserting two different Highlights by chaining the set method.'); 76 }, 'HighlightRegistry has a maplike interface.'); 77 78 </script>