From f4f7818ca98780bedb7c162de4a96eb450cefa95 Mon Sep 17 00:00:00 2001 From: ushiboy Date: Sun, 17 Mar 2024 21:47:55 +0900 Subject: [PATCH] feat: [#1315] Fixed handling of empty characters in headers --- packages/happy-dom/src/fetch/Headers.ts | 10 ++++++++-- packages/happy-dom/test/fetch/Headers.test.ts | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/happy-dom/src/fetch/Headers.ts b/packages/happy-dom/src/fetch/Headers.ts index 408b9ec6..41ecc7d6 100644 --- a/packages/happy-dom/src/fetch/Headers.ts +++ b/packages/happy-dom/src/fetch/Headers.ts @@ -74,7 +74,7 @@ export default class Headers implements IHeaders { * @returns Value. */ public get(name: string): string | null { - return this[PropertySymbol.entries][name.toLowerCase()]?.value || null; + return this[PropertySymbol.entries][name.toLowerCase()]?.value ?? null; } /** @@ -96,7 +96,13 @@ export default class Headers implements IHeaders { * @returns An array of strings representing the values of all the different Set-Cookie headers. */ public getSetCookie(): string[] { - return CookieStringUtility.splitCookiesString(this.get('Set-Cookie') || ''); + const cookiesString = this.get('Set-Cookie'); + if (cookiesString === null) { + return []; + } else if (cookiesString === '') { + return ['']; + } + return CookieStringUtility.splitCookiesString(cookiesString); } /** diff --git a/packages/happy-dom/test/fetch/Headers.test.ts b/packages/happy-dom/test/fetch/Headers.test.ts index 58aeb1c1..6fb7cdc7 100644 --- a/packages/happy-dom/test/fetch/Headers.test.ts +++ b/packages/happy-dom/test/fetch/Headers.test.ts @@ -76,6 +76,14 @@ describe('Headers', () => { expect(headers.get('Content-Type')).toBe('application/json, x-www-form-urlencoded'); }); + + it('Returns the value of Header as it is, set with an empty string.', () => { + const headers = new Headers(); + + headers.append('X-A', ''); + + expect(headers.get('X-A')).toBe(''); + }); }); describe('set()', () => { @@ -106,6 +114,13 @@ describe('Headers', () => { expect(headers.getSetCookie()).toEqual([]); }); + it('Returns as a list of empty characters if the Set-Cookie header is set to an empty string.', () => { + const headers = new Headers(); + headers.append('Set-Cookie', ''); + + expect(headers.getSetCookie()).toEqual(['']); + }); + it('Returns an array of strings representing the values of all the different Set-Cookie headers.', () => { const headers = new Headers();