From fb2f1cb95ee4991214b2d09e355d1c72ba53ff0c Mon Sep 17 00:00:00 2001 From: silverwind Date: Mon, 25 Mar 2024 22:39:02 +0100 Subject: [PATCH] fix: [#1342] Make `DOMTokenList` iterable --- packages/happy-dom/src/dom-token-list/DOMTokenList.ts | 7 +++++++ .../happy-dom/test/dom-token-list/DOMTokenList.test.ts | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/packages/happy-dom/src/dom-token-list/DOMTokenList.ts b/packages/happy-dom/src/dom-token-list/DOMTokenList.ts index df482b55..4bb73382 100644 --- a/packages/happy-dom/src/dom-token-list/DOMTokenList.ts +++ b/packages/happy-dom/src/dom-token-list/DOMTokenList.ts @@ -51,6 +51,13 @@ export default class DOMTokenList { return this.#ownerElement.getAttribute(this.#attributeName); } + /** + * Returns an iterator, allowing you to go through all values of the key/value pairs contained in this object. + */ + public [Symbol.iterator](): IterableIterator { + return this.#getTokenList().values(); + } + /** * Get ClassName. * diff --git a/packages/happy-dom/test/dom-token-list/DOMTokenList.test.ts b/packages/happy-dom/test/dom-token-list/DOMTokenList.test.ts index 15d4c35a..ddc8c717 100644 --- a/packages/happy-dom/test/dom-token-list/DOMTokenList.test.ts +++ b/packages/happy-dom/test/dom-token-list/DOMTokenList.test.ts @@ -155,10 +155,19 @@ describe('DOMTokenList', () => { describe('values()', () => { it('A stringifier property that returns the value of the list as a string.', () => { element.className = 'class1 class2 class3'; + expect(typeof classList.values()[Symbol.iterator]).toEqual('function'); expect(Array.from(classList.values())).toEqual(['class1', 'class2', 'class3']); }); }); + describe('Iterator', () => { + it('A stringifier property that returns the value of the list as a string.', () => { + element.className = 'class1 class2 class3'; + expect(typeof classList[Symbol.iterator]).toEqual('function'); + expect(Array.from(classList)).toEqual(['class1', 'class2', 'class3']); + }); + }); + describe('entries()', () => { it('Returns an iterator, allowing you to go through all key/value pairs contained in this object.', () => { element.className = 'class1 class2 class3';