Skip to content

Commit

Permalink
#0@patch: Matches a partially invalid selector and throws an error.
Browse files Browse the repository at this point in the history
  • Loading branch information
btea committed Nov 29, 2023
1 parent 9a0062b commit 00e63aa
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
10 changes: 10 additions & 0 deletions packages/happy-dom/src/query-selector/QuerySelector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ export default class QuerySelector {
return new NodeList<IElement>();
}

if (/^[.#\[]?\d/.test(selector)) {
throw new Error(
"Failed to execute 'querySelectorAll' on 'Element': '" + selector +"' is not a valid selector.");
}

const groups = SelectorParser.getSelectorGroups(selector);
let matches: IDocumentPositionAndElement[] = [];

Expand Down Expand Up @@ -89,6 +94,11 @@ export default class QuerySelector {
return null;
}

if (/^[.#\[]?\d/.test(selector)) {
throw new Error(
"Failed to execute 'querySelector' on 'Element': '" + selector +"' is not a valid selector.");
}

for (const items of SelectorParser.getSelectorGroups(selector)) {
const match =
node.nodeType === NodeTypeEnum.elementNode
Expand Down
32 changes: 32 additions & 0 deletions packages/happy-dom/test/query-selector/QuerySelector.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1126,5 +1126,37 @@ describe('QuerySelector', () => {
expect(element === div.children[0]).toBe(true);
expect(element2 === div.children[0]).toBe(true);
});

it('querySelector Trhow an error when provide selector is a invalid value', () => {
const div = document.createElement('div');
expect(() => div.querySelector('1')).toThrowError(
'Failed to execute \'querySelector\' on \'Element\': \'1\' is not a valid selector.'
);
expect(() => div.querySelector('[1')).toThrowError(
'Failed to execute \'querySelector\' on \'Element\': \'[1\' is not a valid selector.'
);
expect(() => div.querySelector('.1')).toThrowError(
'Failed to execute \'querySelector\' on \'Element\': \'.1\' is not a valid selector.'
);
expect(() => div.querySelector('#1')).toThrowError(
'Failed to execute \'querySelector\' on \'Element\': \'#1\' is not a valid selector.'
);
});

it('querySelectorAll Trhow an error when provide selector is a invalid value', () => {
const div = document.createElement('div');
expect(() => div.querySelectorAll('1')).toThrowError(
'Failed to execute \'querySelectorAll\' on \'Element\': \'1\' is not a valid selector.'
);
expect(() => div.querySelectorAll('[1')).toThrowError(
'Failed to execute \'querySelectorAll\' on \'Element\': \'[1\' is not a valid selector.'
);
expect(() => div.querySelectorAll('.1')).toThrowError(
'Failed to execute \'querySelectorAll\' on \'Element\': \'.1\' is not a valid selector.'
);
expect(() => div.querySelectorAll('#1')).toThrowError(
'Failed to execute \'querySelectorAll\' on \'Element\': \'#1\' is not a valid selector.'
);
});
});
});

0 comments on commit 00e63aa

Please sign in to comment.