summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/css-highlight-api/HighlightRegistry-iteration.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /testing/web-platform/tests/css/css-highlight-api/HighlightRegistry-iteration.html
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/css/css-highlight-api/HighlightRegistry-iteration.html')
-rw-r--r--testing/web-platform/tests/css/css-highlight-api/HighlightRegistry-iteration.html186
1 files changed, 186 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-highlight-api/HighlightRegistry-iteration.html b/testing/web-platform/tests/css/css-highlight-api/HighlightRegistry-iteration.html
new file mode 100644
index 0000000000..b1bc1afecb
--- /dev/null
+++ b/testing/web-platform/tests/css/css-highlight-api/HighlightRegistry-iteration.html
@@ -0,0 +1,186 @@
+<!doctype html>
+<title>HighlightRegistry iteration</title>
+<link rel="help" href="https://drafts.csswg.org/css-highlight-api-1/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ 'use strict';
+ let customHighlight1 = new Highlight();
+ let customHighlight2 = new Highlight();
+ let highlightName1 = "example1";
+ let highlightName2 = "example2";
+
+ function getIterator(iterationInitialization){
+ var iterator;
+ if(iterationInitialization === "CSS.highlights[Symbol.iterator]()"){
+ iterator = CSS.highlights[Symbol.iterator]();
+ }
+ else if(iterationInitialization === "CSS.highlights.entries()"){
+ iterator = CSS.highlights.entries();
+ }
+ else if(iterationInitialization === "CSS.highlights.values()"){
+ iterator = CSS.highlights.values();
+ }
+ else if(iterationInitialization === "CSS.highlights.keys()"){
+ iterator = CSS.highlights.keys();
+ }
+ return iterator;
+ }
+
+
+ // Test .keys()
+
+ let iterationInitialization = "CSS.highlights.keys()";
+ test(() => {
+ let iterator = getIterator(iterationInitialization);
+ let element = iterator.next();
+ assert_true(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===true when there are no more highlight names to iterate');
+ assert_equals(element.value, undefined, 'HighlightRegistry is iterable and .next() returns an element with .value undefined when there are no more highlight names to iterate.');
+ }, 'HighlightRegistry can be iterated when it\'s empty initializing the iterator with ' + iterationInitialization);
+
+ test(() => {
+ CSS.highlights.set(highlightName1, customHighlight1);
+ let iterator = getIterator(iterationInitialization);
+ let element = iterator.next();
+ assert_false(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===false when the iteration didn\'t go past the last highlight name');
+ assert_equals(element.value, highlightName1, '.next() returns an element with .value corresponding to the first highlight name added to the HighlightRegistry');
+ element = iterator.next();
+ assert_true(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===true when there are no more highlight names to iterate');
+ assert_equals(element.value, undefined, 'HighlightRegistry is iterable and .next() returns an element with .value undefined when there are no more highlight names to iterate.');
+ }, 'HighlightRegistry can be iterated over all of its highlight names after adding one of them initializing the iterator with ' + iterationInitialization);
+
+ test(() => {
+ CSS.highlights.set(highlightName2, customHighlight2);
+ let iterator = getIterator(iterationInitialization);
+ let element = iterator.next();
+ assert_false(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===false when the iteration didn\'t go past the last highlight');
+ assert_equals(element.value, highlightName1, '.next() returns an element with .value corresponding to the first highlight name added to the HighlightRegistry');
+ element = iterator.next();
+ assert_false(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===false when the iteration didn\'t go past the last highlight');
+ assert_equals(element.value, highlightName2, '.next() returns an element with .value corresponding to the second highlight name added to the HighlightRegistry');
+ element = iterator.next();
+ assert_true(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===true when there are no more highlight names to iterate');
+ assert_equals(element.value, undefined, 'HighlightRegistry is iterable and .next() returns an element with .value undefined when there are no more highlight names to iterate.');
+ }, 'HighlightRegistry can be iterated over all of its highlight names after adding two of them initializing the iterator with ' + iterationInitialization);
+
+ CSS.highlights.clear();
+
+
+ // Test .values()
+
+ iterationInitialization = "CSS.highlights.values()";
+ test(() => {
+ let iterator = getIterator(iterationInitialization);
+ let element = iterator.next();
+ assert_true(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===true when there are no more highlights to iterate');
+ assert_equals(element.value, undefined, 'HighlightRegistry is iterable and .next() returns an element with .value undefined when there are no more highlights to iterate.');
+ }, 'HighlightRegistry can be iterated when it\'s empty initializing the iterator with ' + iterationInitialization);
+
+ test(() => {
+ CSS.highlights.set(highlightName1, customHighlight1);
+ let iterator = getIterator(iterationInitialization);
+ let element = iterator.next();
+ assert_false(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===false when the iteration didn\'t go past the last highlight');
+ assert_equals(element.value, customHighlight1, '.next() returns an element with .value corresponding to the first Highlight added to the HighlightRegistry');
+ element = iterator.next();
+ assert_true(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===true when there are no more highlights to iterate');
+ assert_equals(element.value, undefined, 'HighlightRegistry is iterable and .next() returns an element with .value undefined when there are no more highlights to iterate.');
+ }, 'HighlightRegistry can be iterated over all of its Highlights after adding one of them initializing the iterator with ' + iterationInitialization);
+
+ test(() => {
+ CSS.highlights.set(highlightName2, customHighlight2);
+ let iterator = getIterator(iterationInitialization);
+ let element = iterator.next();
+ assert_false(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===false when the iteration didn\'t go past the last highlight');
+ assert_equals(element.value, customHighlight1, '.next() returns an element with .value corresponding to the first Highlight added to the HighlightRegistry');
+ element = iterator.next();
+ assert_false(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===false when the iteration didn\'t go past the last highlight');
+ assert_equals(element.value, customHighlight2, '.next() returns an element with .value corresponding to the second Highlight added to the HighlightRegistry');
+ element = iterator.next();
+ assert_true(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===true when there are no more highlights to iterate');
+ assert_equals(element.value, undefined, 'HighlightRegistry is iterable and .next() returns an element with .value undefined when there are no more highlights to iterate.');
+ }, 'HighlightRegistry can be iterated over all of its Highlights after adding two of them initializing the iterator with ' + iterationInitialization);
+
+ CSS.highlights.clear();
+
+
+ // Test [Symbol.iterator]() and .entries()
+
+ let iterationInitializationCollection = ["CSS.highlights[Symbol.iterator]()", "CSS.highlights.entries()"];
+ for(let iterationInitialization of iterationInitializationCollection){
+ test(() => {
+ let iterator = getIterator(iterationInitialization);
+ let element = iterator.next();
+ assert_true(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===true when there are no more highlights to iterate');
+ assert_equals(element.value, undefined, 'HighlightRegistry is iterable and .next() returns an element with .value undefined when there are no more highlights to iterate.');
+ }, 'HighlightRegistry can be iterated when it\'s empty initializing the iterator with ' + iterationInitialization);
+
+ test(() => {
+ CSS.highlights.set(highlightName1, customHighlight1);
+ let iterator = getIterator(iterationInitialization);
+ let element = iterator.next();
+ assert_false(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===false when the iteration didn\'t go past the last highlight');
+ assert_equals(element.value[0], highlightName1, '.next() returns an element with .value[0] corresponding to the first Highlight name added to the HighlightRegistry');
+ assert_equals(element.value[1], customHighlight1, '.next() returns an element with .value[1] corresponding to the first Highlight added to the HighlightRegistry');
+ element = iterator.next();
+ assert_true(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===true when there are no more highlights to iterate');
+ assert_equals(element.value, undefined, 'HighlightRegistry is iterable and .next() returns an element with .value undefined when there are no more highlights to iterate.');
+ }, 'HighlightRegistry can be iterated over all of its Highlights after adding one of them initializing the iterator with ' + iterationInitialization);
+
+ test(() => {
+ CSS.highlights.set(highlightName2, customHighlight2);
+ let iterator = getIterator(iterationInitialization);
+ let element = iterator.next();
+ assert_false(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===false when the iteration didn\'t go past the last highlight');
+ assert_equals(element.value[0], highlightName1, '.next() returns an element with .value[0] corresponding to the first Highlight name added to the HighlightRegistry');
+ assert_equals(element.value[1], customHighlight1, '.next() returns an element with .value[1] corresponding to the first Highlight added to the HighlightRegistry');
+ element = iterator.next();
+ assert_false(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===false when the iteration didn\'t go past the last highlight');
+ assert_equals(element.value[0], highlightName2, '.next() returns an element with .value[0] corresponding to the second Highlight name added to the HighlightRegistry');
+ assert_equals(element.value[1], customHighlight2, '.next() returns an element with .value[1] corresponding to the second Highlight added to the HighlightRegistry');
+ element = iterator.next();
+ assert_true(element.done, 'HighlightRegistry is iterable and .next() returns an element with .done===true when there are no more highlights to iterate');
+ assert_equals(element.value, undefined, 'HighlightRegistry is iterable and .next() returns an element with .value undefined when there are no more highlights to iterate.');
+ }, 'HighlightRegistry can be iterated over all of its Highlights after adding two of them initializing the iterator with ' + iterationInitialization);
+
+ CSS.highlights.clear();
+ }
+
+
+ // Test .forEach
+
+ function compareArrays(array1, array2){
+ if(array1.length != array2.length){
+ return false;
+ }
+ for(let index=0; index<array1.length; ++index){
+ if(array1[index] != array2[index])
+ return false;
+ }
+ return true;
+ }
+
+ let expectedResult = [];
+
+ test(() => {
+ let actualResult = [];
+ CSS.highlights.forEach((highlight) => {actualResult.push(highlight);});
+ assert_true(compareArrays(actualResult, expectedResult), 'The highlights seen match the highlights added');
+ }, 'HighlightRegistry can be iterated through when it\'s empty using forEach.');
+
+ test(() => {
+ CSS.highlights.set(highlightName1, customHighlight1);
+ expectedResult.push(customHighlight1);
+ let actualResult = [];
+ CSS.highlights.forEach((highlight) => {actualResult.push(highlight);});
+ assert_true(compareArrays(actualResult, expectedResult), 'The highlights seen match the highlights added');
+ }, 'HighlightRegistry can be iterated through when it has one Highlight using forEach.');
+
+ test(() => {
+ CSS.highlights.set(highlightName2, customHighlight2);
+ expectedResult.push(customHighlight2);
+ let actualResult = [];
+ CSS.highlights.forEach((highlight) => {actualResult.push(highlight);});
+ assert_true(compareArrays(actualResult, expectedResult), 'The highlights seen match the highlights added');
+ }, 'HighlightRegistry can be iterated through when it has two Highlights using forEach.');
+</script>