fixed a new prescene layout
This commit is contained in:
@@ -38,23 +38,20 @@ func TestParseEditionAndDemo(t *testing.T) {
|
||||
|
||||
func TestParseArtistWithHyphen(t *testing.T) {
|
||||
// Artist сам містить дефіс, але Ultra-Violence ще не в словнику:
|
||||
// модель [0]/[1] лишається, а All_My_Life (за ним ідуть словникові
|
||||
// маркери) — suspected title continuation, не unknown.
|
||||
// core контекстуальний — все між артистом і першим словниковим
|
||||
// маркером (EP) є назвою, зібраною назад через "-".
|
||||
r := Parse("Ultra-Violence-All_My_Life-EP-16BIT-WEB-FLAC-2026-MOONBLOOD")
|
||||
if r.Artist != "Ultra" || r.Title != "Violence" {
|
||||
t.Errorf("Artist/Title = %q/%q, want Ultra / Violence", r.Artist, r.Title)
|
||||
if r.Artist != "Ultra" {
|
||||
t.Errorf("Artist = %q, want Ultra", r.Artist)
|
||||
}
|
||||
if r.Title != "Violence" {
|
||||
t.Errorf("Title = %q, want Violence", r.Title)
|
||||
}
|
||||
if r.Edition != "EP" || r.BitDepth != "16BIT" || r.Source != "WEB" || r.Year != 2026 {
|
||||
t.Errorf("tail fields wrong: %+v", r)
|
||||
}
|
||||
if len(r.TitleExtra) != 1 || r.TitleExtra[0] != "All_My_Life" {
|
||||
t.Errorf("TitleExtra = %v, want [All_My_Life]", r.TitleExtra)
|
||||
}
|
||||
if !contains(r.Warnings, "suspected title continuation") {
|
||||
t.Errorf("Warnings = %v, want suspected title continuation", r.Warnings)
|
||||
}
|
||||
if len(r.UnknownTokens) != 0 {
|
||||
t.Errorf("UnknownTokens = %v, want empty", r.UnknownTokens)
|
||||
if len(r.UnknownTokens) != 1 || r.UnknownTokens[0] != "All_My_Life" {
|
||||
t.Errorf("UnknownTokens = %v, want [All_My_Life]", r.UnknownTokens)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,22 +144,23 @@ func TestParseUnknownTailTokenReported(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseSuspectedTitleContinuation(t *testing.T) {
|
||||
// Невідомий токен МІЖ title-зоною і хвостом (за ним далі йдуть
|
||||
// словникові маркери) → не UnknownTokens, а TitleExtra + warning.
|
||||
r := Parse("Artist-Some_Title-SPLIT-FOO-16BIT-WEB-FLAC-2025-MOONBLOOD")
|
||||
if len(r.TitleExtra) != 1 || r.TitleExtra[0] != "FOO" {
|
||||
t.Errorf("TitleExtra = %v, want [FOO]", r.TitleExtra)
|
||||
func TestParseContextualCoreAbsorbsTitleTail(t *testing.T) {
|
||||
// Права межа core контекстуальна (перший словниковий маркер), але
|
||||
// невідомі токени всередині core-зони — в UnknownTokens, не з'їдаються.
|
||||
r := Parse("Artist-Some_Title-Part_Two-Part_Three-16BIT-WEB-FLAC-2025-MOONBLOOD")
|
||||
if r.Artist != "Artist" {
|
||||
t.Errorf("Artist = %q, want Artist", r.Artist)
|
||||
}
|
||||
if len(r.UnknownTokens) != 0 {
|
||||
t.Errorf("UnknownTokens = %v, want empty", r.UnknownTokens)
|
||||
if r.Title != "Some_Title" {
|
||||
t.Errorf("Title = %q, want Some_Title", r.Title)
|
||||
}
|
||||
if !contains(r.Warnings, "suspected title continuation") {
|
||||
t.Errorf("Warnings = %v, want suspected title continuation", r.Warnings)
|
||||
}
|
||||
if r.Edition != "SPLIT" || r.BitDepth != "16BIT" || r.Source != "WEB" || r.Year != 2025 {
|
||||
if r.BitDepth != "16BIT" || r.Source != "WEB" || r.Format != "FLAC" || r.Year != 2025 {
|
||||
t.Errorf("tail fields wrong: %+v", r)
|
||||
}
|
||||
if len(r.UnknownTokens) != 2 || r.UnknownTokens[0] != "Part_Two" ||
|
||||
r.UnknownTokens[1] != "Part_Three" {
|
||||
t.Errorf("UnknownTokens = %v, want [Part_Two Part_Three]", r.UnknownTokens)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseCoreTokensNeverReported(t *testing.T) {
|
||||
@@ -282,9 +280,8 @@ func TestParseCatalogNumberWithDotAndRoman(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestParseSplitKeepsParensAndSplitsTitles(t *testing.T) {
|
||||
// [1]=Title (фіксовано), а Evolution — не словниковий токен у середині:
|
||||
// за ним ідуть словникові маркери → suspected title continuation.
|
||||
// (SMG409) — катало, залишається каталом.
|
||||
// Evolution — не словниковий токен у core-зоні → в UnknownTokens,
|
||||
// не з'їдається. (SMG409) — катало, перший відомий маркер.
|
||||
r := Parse("Ferosity-De-Evolution-(SMG409)-CD-FLAC-2025-86D")
|
||||
if r.CatalogNo != "SMG409" {
|
||||
t.Errorf("CatalogNo = %q, want SMG409", r.CatalogNo)
|
||||
@@ -292,11 +289,8 @@ func TestParseSplitKeepsParensAndSplitsTitles(t *testing.T) {
|
||||
if r.Artist != "Ferosity" || r.Title != "De" {
|
||||
t.Errorf("Artist/Title = %q/%q, want Ferosity / De", r.Artist, r.Title)
|
||||
}
|
||||
if len(r.TitleExtra) != 1 || r.TitleExtra[0] != "Evolution" {
|
||||
t.Errorf("TitleExtra = %v, want [Evolution]", r.TitleExtra)
|
||||
}
|
||||
if len(r.UnknownTokens) != 0 {
|
||||
t.Errorf("UnknownTokens = %v, want empty", r.UnknownTokens)
|
||||
if len(r.UnknownTokens) != 1 || r.UnknownTokens[0] != "Evolution" {
|
||||
t.Errorf("UnknownTokens = %v, want [Evolution]", r.UnknownTokens)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,18 +357,14 @@ func TestParseCompoundEditionRecognized(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestParseMixedCaseTitleNeverReported(t *testing.T) {
|
||||
// [1]=Title (один токен). Хвіст назви (_ і Sky_Burial) — не словник,
|
||||
// але за ним ідуть словникові маркери → suspected title continuation,
|
||||
// не UnknownTokens.
|
||||
// Хвіст назви (_Sky_Burial) — не словник, але він ДО першого маркера
|
||||
// (катало (RTM103)) → частина назви, не UnknownTokens.
|
||||
r := Parse("Enthrallment-Against_the_Will_to_Live_-_Sky_Burial-(RTM103)-CD-FLAC-2021-86D")
|
||||
if r.Artist != "Enthrallment" || r.Title != "Against_the_Will_to_Live_" {
|
||||
t.Errorf("Artist/Title = %q/%q", r.Artist, r.Title)
|
||||
}
|
||||
if len(r.UnknownTokens) != 0 {
|
||||
t.Errorf("UnknownTokens = %v, want empty", r.UnknownTokens)
|
||||
}
|
||||
if len(r.TitleExtra) != 1 || r.TitleExtra[0] != "_Sky_Burial" {
|
||||
t.Errorf("TitleExtra = %v, want [_Sky_Burial]", r.TitleExtra)
|
||||
if len(r.UnknownTokens) != 1 || r.UnknownTokens[0] != "_Sky_Burial" {
|
||||
t.Errorf("UnknownTokens = %v, want [_Sky_Burial]", r.UnknownTokens)
|
||||
}
|
||||
if r.CatalogNo != "RTM103" {
|
||||
t.Errorf("CatalogNo = %q, want RTM103", r.CatalogNo)
|
||||
@@ -426,10 +416,30 @@ func TestParseArtistDictionaryCoversReleases(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseArtistDictionaryMultiTokenArtist(t *testing.T) {
|
||||
// artists.txt: "Shadu-Nar-Mattaru" — артист з ТРЬОХ токенів.
|
||||
// Найдовший словниковий префікс виграє: Artist = 3 токени,
|
||||
// Title = наступний токен, хвіст парситься як завжди.
|
||||
r := Parse("Shadu-Nar-Mattaru-On_Pathways_Macabre-24BIT-WEB-FLAC-2023-MOONBLOOD")
|
||||
if r.Artist != "Shadu-Nar-Mattaru" {
|
||||
t.Errorf("Artist = %q, want Shadu-Nar-Mattaru", r.Artist)
|
||||
}
|
||||
if r.Title != "On_Pathways_Macabre" {
|
||||
t.Errorf("Title = %q, want On_Pathways_Macabre", r.Title)
|
||||
}
|
||||
if r.BitDepth != "24BIT" || r.Source != "WEB" || r.Format != "FLAC" || r.Year != 2023 {
|
||||
t.Errorf("tail fields wrong: %+v", r)
|
||||
}
|
||||
if len(r.UnknownTokens) != 0 || len(r.TitleExtra) != 0 || len(r.Warnings) != 0 {
|
||||
t.Errorf("Unknown=%v Extra=%v Warnings=%v, want empty",
|
||||
r.UnknownTokens, r.TitleExtra, r.Warnings)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseOverrideWinsOverPositionalModel(t *testing.T) {
|
||||
// overrides.txt (найвищий пріоритет): точний lookup по Raw
|
||||
// фіксує Artist/Title; хвіст парситься як завжди.
|
||||
raw := "Milicia_Oscura-Anti-Cristo-ES-16BIT-WEB-FLAC-2024-GRAVEWAVE"
|
||||
raw := "Milicia_Oscura-Anti-Cristo-ES-16BIT-WEB-FLAC-2013-MOONBLOOD"
|
||||
r := Parse(raw)
|
||||
if r.Artist != "Milicia_Oscura" {
|
||||
t.Errorf("Artist = %q, want Milicia_Oscura", r.Artist)
|
||||
@@ -438,7 +448,7 @@ func TestParseOverrideWinsOverPositionalModel(t *testing.T) {
|
||||
t.Errorf("Title = %q, want Anti-Cristo", r.Title)
|
||||
}
|
||||
if r.Language != "ES" || r.BitDepth != "16BIT" || r.Source != "WEB" ||
|
||||
r.Format != "FLAC" || r.Year != 2024 || r.Group != "GRAVEWAVE" {
|
||||
r.Format != "FLAC" || r.Year != 2013 || r.Group != "MOONBLOOD" {
|
||||
t.Errorf("tail fields wrong: %+v", r)
|
||||
}
|
||||
if len(r.UnknownTokens) != 0 || len(r.TitleExtra) != 0 || len(r.Warnings) != 0 {
|
||||
|
||||
Reference in New Issue
Block a user