Skip to content

Commit

Permalink
chore(merge-results): deal with invalid nodeIndexes
Browse files Browse the repository at this point in the history
  • Loading branch information
WilcoFiers committed Jun 10, 2021
1 parent c08955c commit cfb80fc
Show file tree
Hide file tree
Showing 2 changed files with 156 additions and 2 deletions.
12 changes: 10 additions & 2 deletions lib/core/utils/merge-results.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,16 +114,24 @@ function mergeResults(frameResults, options) {
}

function nodeIndexSort(nodeIndexesA, nodeIndexesB) {
for (let i = 0; i <= nodeIndexesA.length; i++) {
for (let i = 0; i <= nodeIndexesA?.length; i++) {
const indexA = nodeIndexesA[i];
const indexB = nodeIndexesB[i];
const indexB = nodeIndexesB?.[i];
if (typeof indexB === 'undefined') {
return 1;
}
if (indexA !== indexB) {
return indexA - indexB;
}
}

if (
!Array.isArray(nodeIndexesA) || nodeIndexesA.length === 0 ||
!Array.isArray(nodeIndexesB) || nodeIndexesB.length === 0
) {
return 0
}

return -1;
}

Expand Down
146 changes: 146 additions & 0 deletions test/core/utils/merge-results.js
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,150 @@ describe('axe.utils.mergeResults', function() {
});
assert.deepEqual(ids, ['h1', 'iframe1 >> h2', 'iframe1 >> h3', 'h4']);
});

it('sorts nested iframes', function() {
var result = axe.utils.mergeResults([
{
results: [
{
id: 'heading-order',
result: true,
nodes: [
{
node: {
selector: ['h1'],
nodeIndexes: [1]
}
},
{
node: {
selector: ['h5'],
nodeIndexes: [3]
}
}
]
},
{
id: 'heading-order',
result: true,
nodes: [
{
node: {
selector: ['iframe1', 'h2'],
nodeIndexes: [2, 1],
fromFrame: true
}
},
{
node: {
selector: ['iframe1', 'h4'],
nodeIndexes: [2, 3],
fromFrame: true
}
}
]
},
{
id: 'heading-order',
result: true,
nodes: [
{
node: {
selector: ['iframe1', 'iframe2', 'h3'],
nodeIndexes: [2, 2, 1],
fromFrame: true
}
}
]
}
]
}
]);

var ids = result[0].nodes.map(function(el) {
return el.node.selector.join(' >> ');
});
assert.deepEqual(ids, [
'h1',
'iframe1 >> h2',
'iframe1 >> iframe2 >> h3',
'iframe1 >> h4',
'h5'
]);
});

it('sorts results even if nodeIndexes are missing', function () {
var result = axe.utils.mergeResults([
{
results: [
{
id: 'heading-order',
result: true,
nodes: [
{
node: {
selector: ['h1'],
nodeIndexes: [1]
}
},
{
node: {
selector: ['nill1']
}
},
{
node: {
selector: ['h3'],
nodeIndexes: [3]
}
},
]
},
{
id: 'heading-order',
result: true,
nodes: [
{
node: {
selector: ['nill0']
}
}
]
},
{
id: 'heading-order',
result: true,
nodes: [
{
node: {
selector: ['iframe1', 'h2'],
nodeIndexes: [2, 1],
fromFrame: true
}
},
{
node: {
selector: ['nill2']
}
}
]
}
]
}
]);

var ids = result[0].nodes.map(function(el) {
return el.node.selector.join(' >> ');
});
console.log(ids)
assert.deepEqual(ids, [
'nill0',
'h1',
'nill1',
'iframe1 >> h2',
'nill2',
'h3'
]);

})
});

0 comments on commit cfb80fc

Please sign in to comment.