mirror of
https://github.com/servo/servo.git
synced 2025-06-27 18:43:40 +01:00
186 lines
12 KiB
HTML
186 lines
12 KiB
HTML
<!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>
|