From e641c61b644056b77f8d1a2eeec491b20624533b Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Sun, 6 Jul 2025 18:00:48 -0700 Subject: [PATCH] Fixup winamp-eqf tests --- config/jest.unit.js | 2 + package.json | 4 +- packages/winamp-eqf/index.test.js | 94 ------------------- packages/winamp-eqf/package.json | 15 +++ .../src/__snapshots__/index.test.ts.snap | 23 +++++ packages/winamp-eqf/src/index.test.ts | 45 ++++++--- pnpm-lock.yaml | 3 + 7 files changed, 80 insertions(+), 106 deletions(-) delete mode 100644 packages/winamp-eqf/index.test.js create mode 100644 packages/winamp-eqf/src/__snapshots__/index.test.ts.snap diff --git a/config/jest.unit.js b/config/jest.unit.js index 9898a964..ccbb4860 100644 --- a/config/jest.unit.js +++ b/config/jest.unit.js @@ -8,6 +8,8 @@ module.exports = { "dist", // TODO: Add these as we can... "/packages/webamp/", + "/packages/ani-cursor/", + "/packages/winamp-eqf/", // TODO: Fix config import so that this can work. "/packages/webamp-modern/src/__tests__/integration*", ], diff --git a/package.json b/package.json index 4c2f89a6..73577c59 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,9 @@ }, "jest": { "projects": [ - "config/jest.*.js" + "config/jest.*.js", + "packages/ani-cursor", + "packages/winamp-eqf" ] }, "dependencies": {}, diff --git a/packages/winamp-eqf/index.test.js b/packages/winamp-eqf/index.test.js deleted file mode 100644 index 16bdf098..00000000 --- a/packages/winamp-eqf/index.test.js +++ /dev/null @@ -1,94 +0,0 @@ -const { join } = require("path"); -const { readFileSync } = require("fs"); -const { parser, creator } = require("./"); -var bufferToArrayBuffer = require("buffer-to-arraybuffer"); - -// TODO: Abstract this into its own library. -expect.extend({ - arrayBufferToEqual(received, argument) { - if (received.byteLength !== argument.byteLength) { - return { - message: `ArrayBuffers do not match. Expected length ${received.byteLength} but got ${argument.byteLenth}`, - pass: false, - }; - } - const a = new Uint8Array(received); - const b = new Uint8Array(argument); - for (var i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return { - message: `ArrayBuffers do not match. Expected ${a[i]} to equal ${b[i]} at index ${i}`, - pass: false, - }; - } - } - return { - message: `ArrayBuffers are equal.`, - pass: true, - }; - }, -}); - -const fixtures = [ - // All bands max, preamp mid - "max.EQF", - // All bands min, preamp mid - "min.EQF", - // All bands mid, preamp mid - "midline.EQF", - // All bands mid, preamp max - "preampMax.EQF", - // All bands mid, preamp min - "preampMin.EQF", - "random.EQF", - "winamp_sample.q1", - "winamp.q1", -]; - -describe("parser", () => { - fixtures.forEach((fileName) => { - const buffer = readFileSync(join(__dirname, "sample_data", fileName)); - const arrayBuffer = bufferToArrayBuffer(buffer); - it(`can parse ${fileName}`, () => { - const data = parser(arrayBuffer); - expect(data).toMatchSnapshot(); - }); - }); -}); - -describe("creator", () => { - fixtures.forEach((fileName) => { - const buffer = readFileSync(join(__dirname, "sample_data", fileName)); - const arrayBuffer = bufferToArrayBuffer(buffer); - const data = parser(arrayBuffer); - it(`can create and parse ${fileName}`, () => { - expect(parser(creator(data))).toEqual(data); - }); - }); -}); - -const eqfFixtures = [ - // All bands max, preamp mid - "max.EQF", - // All bands min, preamp mid - "min.EQF", - // All bands mid, preamp mid - "midline.EQF", - // All bands mid, preamp max - "preampMax.EQF", - // All bands mid, preamp min - "preampMin.EQF", - "random.EQF", -]; - -describe("creator", () => { - eqfFixtures.forEach((fileName) => { - const buffer = readFileSync(join(__dirname, "sample_data", fileName)); - const arrayBuffer = bufferToArrayBuffer(buffer); - const data = parser(arrayBuffer); - it(`can create ${fileName}`, () => { - data.type = "foo"; - expect(creator(data)).arrayBufferToEqual(arrayBuffer); - }); - }); -}); diff --git a/packages/winamp-eqf/package.json b/packages/winamp-eqf/package.json index 78bc8095..07522ec6 100644 --- a/packages/winamp-eqf/package.json +++ b/packages/winamp-eqf/package.json @@ -23,6 +23,7 @@ "scripts": { "build": "tsc", "prepublishOnly": "npm run build", + "test": "jest", "type-check": "tsc --noEmit" }, "files": [ @@ -42,9 +43,23 @@ "node": ">=14.0.0" }, "devDependencies": { + "@swc/jest": "^0.2.24", "@types/jest": "^30.0.0", "@types/node": "^24.0.10", "buffer-to-arraybuffer": "0.0.4", "typescript": "^5.3.3" + }, + "jest": { + "modulePathIgnorePatterns": [ + "built" + ], + "testEnvironment": "jsdom", + "extensionsToTreatAsEsm": [".ts"], + "moduleNameMapper": { + "^(\\.{1,2}/.*)\\.js$": "$1" + }, + "transform": { + "^.+\\.(t|j)sx?$": ["@swc/jest"] + } } } diff --git a/packages/winamp-eqf/src/__snapshots__/index.test.ts.snap b/packages/winamp-eqf/src/__snapshots__/index.test.ts.snap new file mode 100644 index 00000000..fdbce88c --- /dev/null +++ b/packages/winamp-eqf/src/__snapshots__/index.test.ts.snap @@ -0,0 +1,23 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`parser parsed file snapshot 1`] = ` +{ + "presets": [ + { + "hz1000": 33, + "hz12000": 15, + "hz14000": 47, + "hz16000": 33, + "hz170": 35, + "hz3000": 48, + "hz310": 1, + "hz60": 64, + "hz600": 33, + "hz6000": 33, + "name": "Entry1", + "preamp": 55, + }, + ], + "type": "Winamp EQ library file v1.1", +} +`; diff --git a/packages/winamp-eqf/src/index.test.ts b/packages/winamp-eqf/src/index.test.ts index cd1e4dcb..9cd1e6d1 100644 --- a/packages/winamp-eqf/src/index.test.ts +++ b/packages/winamp-eqf/src/index.test.ts @@ -1,7 +1,7 @@ import { join } from "path"; import { readFileSync } from "fs"; -import { parser, creator } from "../src"; -import * as bufferToArrayBuffer from "buffer-to-arraybuffer"; +import { parser, creator } from "./index.js"; +import bufferToArrayBuffer from "buffer-to-arraybuffer"; // TODO: Abstract this into its own library. declare global { @@ -75,10 +75,31 @@ describe("creator", () => { fixtures.forEach((fileName) => { const buffer = readFileSync(join(__dirname, "../sample_data", fileName)); const arrayBuffer = bufferToArrayBuffer(buffer); - test(`round trip: ${fileName}`, () => { - const data = parser(arrayBuffer); - const recreated = creator(data); - expect(recreated).arrayBufferToEqual(arrayBuffer); + const data = parser(arrayBuffer); + test(`functional round trip: ${fileName}`, () => { + // Test that parsing the created data returns the same logical data + expect(parser(creator(data))).toEqual(data); + }); + }); +}); + +// Only test byte-for-byte equality on .EQF files, not .q1 files +const eqfFixtures = [ + "max.EQF", + "min.EQF", + "midline.EQF", + "preampMax.EQF", + "preampMin.EQF", + "random.EQF", +]; + +describe("creator byte-for-byte", () => { + eqfFixtures.forEach((fileName) => { + const buffer = readFileSync(join(__dirname, "../sample_data", fileName)); + const arrayBuffer = bufferToArrayBuffer(buffer); + const data = parser(arrayBuffer); + test(`byte-for-byte round trip: ${fileName}`, () => { + expect(creator(data)).arrayBufferToEqual(arrayBuffer); }); }); }); @@ -90,12 +111,14 @@ describe("integration", () => { ); const arrayBuffer = bufferToArrayBuffer(buffer); const data = parser(arrayBuffer); - expect(data.presets).toHaveLength(3); - expect(data.presets[0].name).toEqual("Classical"); - expect(data.presets[1].name).toEqual("Club"); - expect(data.presets[2].name).toEqual("Dance"); + expect(data.presets).toHaveLength(4); + expect(data.presets[0].name).toEqual("Normal"); + expect(data.presets[1].name).toEqual("Clear"); + expect(data.presets[2].name).toEqual("Alex"); + expect(data.presets[3].name).toEqual("Tare"); + // Functional round-trip test for .q1 files (not byte-for-byte) const recreated = creator(data); - expect(recreated).arrayBufferToEqual(arrayBuffer); + expect(parser(recreated)).toEqual(data); }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e87299a..c261a2b1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -602,6 +602,9 @@ importers: packages/winamp-eqf: devDependencies: + '@swc/jest': + specifier: ^0.2.24 + version: 0.2.36(@swc/core@1.4.12(@swc/helpers@0.5.15)) '@types/jest': specifier: ^30.0.0 version: 30.0.0