feat: align with upstream 1.5.9.9

This commit is contained in:
2026-09-12 18:21:11 +08:00
commit 34f0679117
805 changed files with 376275 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
import test from 'node:test'
import assert from 'node:assert/strict'
import { normalizeForMatch, toSimplifiedChinese } from '../../app/utils/song-name-normalize.ts'
test('繁体标题与简体库存归一化后相等', () => {
assert.equal(normalizeForMatch('海闊天空'), normalizeForMatch('海阔天空'))
})
test('繁体歌手名归一化后相等', () => {
assert.equal(normalizeForMatch('周杰倫'), normalizeForMatch('周杰伦'))
assert.equal(normalizeForMatch('陳奕迅'), normalizeForMatch('陈奕迅'))
})
test('归一化移除 feat./ft. 词条与空白标点', () => {
// 口径沿用现网版本:仅移除 feat/ft 词条本体,其后标点由标点规则处理
assert.equal(normalizeForMatch('一首歌 ft. 某人'), '一首歌.某人')
assert.equal(
normalizeForMatch('晴天 (feat. 周杰伦)'),
normalizeForMatch('晴天.周杰伦')
)
assert.equal(normalizeForMatch('《红玫瑰》'), normalizeForMatch('红玫瑰'))
})
test('&/& 统一为 and', () => {
assert.equal(normalizeForMatch('A&B'), normalizeForMatch('A&B'))
assert.equal(normalizeForMatch('A&B'), 'aandb')
})
test('弯引号被视为可去除标点', () => {
assert.equal(normalizeForMatch('“回忆”'), normalizeForMatch('回忆'))
})
test('大小写不敏感', () => {
assert.equal(normalizeForMatch('LOVE Story'), normalizeForMatch('love story'))
})
test('回归: 含 feat 字母的普通英文单词不被误删', () => {
// 旧实现使用字符类 [feat\.?|ft\.?] 会删掉所有 f/e/a/t 字母
assert.equal(toSimplifiedChinese(normalizeForMatch('Coffee')), 'coffee')
assert.equal(toSimplifiedChinese(normalizeForMatch('Eason Chan')), 'easonchan')
})
test('空值与原样返回', () => {
assert.equal(normalizeForMatch(''), '')
assert.equal(toSimplifiedChinese(''), '')
})