diff --git a/packages/happy-dom/src/query-selector/QuerySelector.ts b/packages/happy-dom/src/query-selector/QuerySelector.ts index e0bd1f163..9798babe3 100644 --- a/packages/happy-dom/src/query-selector/QuerySelector.ts +++ b/packages/happy-dom/src/query-selector/QuerySelector.ts @@ -42,6 +42,11 @@ export default class QuerySelector { return new NodeList(); } + 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[] = []; @@ -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 diff --git a/packages/happy-dom/test/query-selector/QuerySelector.test.ts b/packages/happy-dom/test/query-selector/QuerySelector.test.ts index de5c15bbd..98a8e1bc2 100644 --- a/packages/happy-dom/test/query-selector/QuerySelector.test.ts +++ b/packages/happy-dom/test/query-selector/QuerySelector.test.ts @@ -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.' + ); + }); }); });