From dfe8e0e788e9f7c02a269e4c0456c2ff0066c977 Mon Sep 17 00:00:00 2001 From: Borewit Date: Sun, 18 Apr 2021 12:40:01 +0200 Subject: [PATCH] Add unit test handling ID32.2 tag ID's in ID32.3 header --- test/samples/mp3/issue-795.mp3 | Bin 0 -> 11583 bytes test/test-id3v2.3.ts | 21 +++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 test/samples/mp3/issue-795.mp3 diff --git a/test/samples/mp3/issue-795.mp3 b/test/samples/mp3/issue-795.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6bc0d70c920a679168807fde954cb2ed074a367d GIT binary patch literal 11583 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 cGrX1Rl7Fq=Hmj)|W0~8kf3vIpe { }); + it('Handle ID32.2 tag ID\'s in ID32.3 header', async () => { + const filePath = path.join(samplePath, 'mp3', 'issue-795.mp3'); + + const {native, quality, common} = await mm.parseFile(filePath); + assert.isDefined(native['ID3v2.3'], 'native[\'ID3v2.3\']'); + const ids = native['ID3v2.3'].map(tag => { + return tag.id; + }); + assert.deepStrictEqual(ids, ['TP1\u0000', 'TP2\u0000', 'TAL\u0000', 'TEN\u0000', 'TIT2'], 'Decode id3v2.3 TAG names'); + + assert.includeDeepMembers(quality.warnings, [ + {message: 'Invalid ID3v2.3 frame-header-ID: TP1\u0000'}, + {message: 'Invalid ID3v2.3 frame-header-ID: TP2\u0000'}, + {message: 'Invalid ID3v2.3 frame-header-ID: TAL\u0000'}, + {message: 'Invalid ID3v2.3 frame-header-ID: TEN\u0000'} + ], 'Warning invalid ID: TP1\u0000, TP2\u0000, TAL\u0000 & TEN\u0000'); + + assert.strictEqual(common.title, 'FDP (Clean Edit)', 'common.title'); + }); + + }); });