302 lines
14 KiB
C#
302 lines
14 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using Jellyfin.Plugin.MetaShark.Api;
|
||
using Jellyfin.Plugin.MetaShark.Core;
|
||
using Jellyfin.Plugin.MetaShark.Model;
|
||
using Jellyfin.Plugin.MetaShark.Providers;
|
||
using Microsoft.Extensions.Logging;
|
||
|
||
|
||
namespace Jellyfin.Plugin.MetaShark.Test
|
||
{
|
||
[TestClass]
|
||
public class ParseNameTest
|
||
{
|
||
ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
|
||
builder.AddSimpleConsole(options =>
|
||
{
|
||
options.IncludeScopes = true;
|
||
options.SingleLine = true;
|
||
options.TimestampFormat = "hh:mm:ss ";
|
||
}));
|
||
|
||
|
||
|
||
[TestMethod]
|
||
public void TestMovieParse()
|
||
{
|
||
// 混合中英文
|
||
var fileName = "新世界.New.World.2013.BluRay.1080p.x265.10bit.MNHD-FRDS";
|
||
var parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, "新世界");
|
||
Assert.AreEqual(parseResult.Name, "New World");
|
||
Assert.AreEqual(parseResult.Year, 2013);
|
||
|
||
fileName = "V字仇杀队.V.for.Vendetta.2006";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, "V字仇杀队");
|
||
Assert.AreEqual(parseResult.Name, "V for Vendetta");
|
||
Assert.AreEqual(parseResult.Year, 2006);
|
||
|
||
|
||
fileName = "罗马假日.Roman.Holiday.1953.WEB-DL.1080p.x265.AAC.2Audios.GREENOTEA";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, "罗马假日");
|
||
Assert.AreEqual(parseResult.Name, "Roman Holiday");
|
||
Assert.AreEqual(parseResult.Year, 1953);
|
||
|
||
fileName = "【更多蓝光电影访问】红辣椒[简繁中文字幕].Paprika.2006.RERiP.1080p.BluRay.x264.DTS-WiKi";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, "红辣椒");
|
||
Assert.AreEqual(parseResult.Name, "Paprika");
|
||
Assert.AreEqual(parseResult.Year, 2006);
|
||
|
||
// 只英文
|
||
fileName = "A.Chinese.Odyssey.Part.1.1995.BluRay.1080p.x265.10bit.2Audio-MiniHD";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, null);
|
||
Assert.AreEqual(parseResult.Name, "A Chinese Odyssey Part 1");
|
||
Assert.AreEqual(parseResult.Year, 1995);
|
||
|
||
fileName = "New.World.2013.BluRay.1080p.x265.10bit.MNHD-FRDS";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, null);
|
||
Assert.AreEqual(parseResult.Name, "New World");
|
||
Assert.AreEqual(parseResult.Year, 2013);
|
||
|
||
fileName = "Who.Am.I.1998.1080p.BluRay.x264.DTS-FGT";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, null);
|
||
Assert.AreEqual(parseResult.Name, "Who Am I");
|
||
Assert.AreEqual(parseResult.Year, 1998);
|
||
|
||
// 只中文
|
||
fileName = "机动战士高达 逆袭的夏亚";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, null);
|
||
Assert.AreEqual(parseResult.Name, "机动战士高达 逆袭的夏亚");
|
||
Assert.AreEqual(parseResult.Year, null);
|
||
|
||
fileName = "秒速5厘米";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, null);
|
||
Assert.AreEqual(parseResult.Name, "秒速5厘米");
|
||
Assert.AreEqual(parseResult.Year, null);
|
||
|
||
|
||
// 标题加年份
|
||
fileName = "V字仇杀队 (2006)";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, null);
|
||
Assert.AreEqual(parseResult.Name, "V字仇杀队");
|
||
Assert.AreEqual(parseResult.Year, 2006);
|
||
|
||
|
||
// anime
|
||
fileName = "[SAIO-Raws] もののけ姫 Mononoke Hime [BD 1920x1036 HEVC-10bit OPUSx2 AC3].mp4";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, "もののけ姫");
|
||
Assert.AreEqual(parseResult.Name, "Mononoke Hime");
|
||
Assert.AreEqual(parseResult.Year, null);
|
||
}
|
||
|
||
[TestMethod]
|
||
public void TestTVSeriesParse()
|
||
{
|
||
// 混合中英文
|
||
var fileName = "航海王:狂热行动.One.Piece.Stampede.2019.BD720P.X264.AAC.Japanese&Mandarin.CHS.Mp4Ba";
|
||
var parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, "航海王:狂热行动");
|
||
Assert.AreEqual(parseResult.Name, "One Piece Stampede");
|
||
Assert.AreEqual(parseResult.Year, 2019);
|
||
|
||
// 混合中英文带副标题
|
||
|
||
// 只英文
|
||
fileName = "She-Hulk.Attorney.at.Law.S01.1080p.WEBRip.x265-RARBG";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "She-Hulk Attorney at Law");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, 1);
|
||
Assert.AreEqual(parseResult.Year, null);
|
||
|
||
fileName = "Bright.Future.S01.2022.2160p.HDR.WEB-DL.H265.AAC-BlackTV[BTBTT]";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "Bright Future");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, 1);
|
||
Assert.AreEqual(parseResult.Year, 2022);
|
||
|
||
fileName = "Back.to.the.Future.Part.II.1989.BluRay.1080p.x265.10bit.2Audio-MiniHD[BTBTT]";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "Back to the Future Part II");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, null);
|
||
Assert.AreEqual(parseResult.Year, 1989);
|
||
|
||
|
||
|
||
// anime混合中日文
|
||
fileName = "[异域-11番小队][罗马浴场 THERMAE_ROMAE][1-6+SP][BDRIP][720P][X264-10bit_AAC]";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, "罗马浴场");
|
||
Assert.AreEqual(parseResult.Name, "THERMAE ROMAE");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, null);
|
||
Assert.AreEqual(parseResult.Year, null);
|
||
|
||
|
||
// anime
|
||
fileName = "[Nekomoe kissaten][Shin Ikkitousen][01-03][720p][CHT]";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "Shin Ikkitousen");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, null);
|
||
Assert.AreEqual(parseResult.Year, null);
|
||
|
||
fileName = "[SAIO-Raws] Fullmetal Alchemist Brotherhood [BD 1920x1080 HEVC-10bit OPUS][2009]";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "Fullmetal Alchemist Brotherhood");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, null);
|
||
Assert.AreEqual(parseResult.Year, 2009);
|
||
}
|
||
|
||
[TestMethod]
|
||
public void TestEposideParse()
|
||
{
|
||
// 混合中英文
|
||
var fileName = "新世界.New.World.2013.BluRay.1080p.x265.10bit.MNHD-FRDS";
|
||
var parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.ChineseName, "新世界");
|
||
Assert.AreEqual(parseResult.Name, "New World");
|
||
Assert.AreEqual(parseResult.Year, 2013);
|
||
|
||
// 只英文S01E01
|
||
fileName = "She-Hulk.Attorney.At.Law.S01E01.1080p.WEBRip.x265-RARBG";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "She-Hulk Attorney At Law");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, 1);
|
||
Assert.AreEqual(parseResult.IndexNumber, 1);
|
||
|
||
// 只英文S01EP01
|
||
fileName = "Detective.Dee.S01EP18.2004.1080p.WEB-DL.x264.AAC-HQCS";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "Detective Dee");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, 1);
|
||
Assert.AreEqual(parseResult.IndexNumber, 18);
|
||
|
||
|
||
// 日文
|
||
fileName = "プロポーズ大作戦Ep05_x264.mp4";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "プロポーズ大作戦Ep05");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, null);
|
||
Assert.AreEqual(parseResult.IndexNumber, 5);
|
||
|
||
fileName = "[01] [ANK-Raws] あっちこっち 01 (BDrip 1920x1080 HEVC-YUV420P10 FLAC)";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "あっちこっち 01");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, null);
|
||
Assert.AreEqual(parseResult.IndexNumber, 1);
|
||
|
||
// 只中文
|
||
fileName = "齊天大聖 第02集";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "齊天大聖 第02集");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, null);
|
||
Assert.AreEqual(parseResult.IndexNumber, 2);
|
||
|
||
fileName = "齊天大聖 第 02 期";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "齊天大聖");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, null);
|
||
Assert.AreEqual(parseResult.IndexNumber, 2);
|
||
|
||
|
||
// anime
|
||
fileName = "[YYDM-11FANS][THERMAE_ROMAE][02][BDRIP][720P][X264-10bit_AAC][7FF2269F]";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "THERMAE ROMAE");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, null);
|
||
Assert.AreEqual(parseResult.IndexNumber, 2);
|
||
|
||
// anime带季数
|
||
fileName = "[WMSUB][Detective Conan - Zero‘s Tea Time ][S01][E06][BIG5][1080P].mp4";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "Detective Conan - Zero‘s Tea Time");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, 1);
|
||
Assert.AreEqual(parseResult.IndexNumber, 6);
|
||
|
||
fileName = "[KTXP][Machikado_Mazoku_S2][01][BIG5][1080p]";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "Machikado Mazoku");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, null);
|
||
Assert.AreEqual(parseResult.IndexNumber, 1);
|
||
|
||
fileName = "[異域字幕組][她和她的貓 - Everything Flows -][She and Her Cat - Everything Flows -][01][720p][繁體]";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.AreEqual(parseResult.Name, "她和她的貓 - Everything Flows");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, null);
|
||
Assert.AreEqual(parseResult.IndexNumber, 1);
|
||
|
||
// anime特典
|
||
fileName = "[KissSub][Steins;Gate][SP][GB_BIG5_JP][BDrip][1080P][HEVC] 边界曲面的缺失之环";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.IsTrue(parseResult.IsSpecial);
|
||
Assert.AreEqual(parseResult.Name, "边界曲面的缺失之环");
|
||
Assert.AreEqual(parseResult.ParentIndexNumber, null);
|
||
Assert.AreEqual(parseResult.IndexNumber, null);
|
||
|
||
}
|
||
|
||
|
||
[TestMethod]
|
||
public void TestCheckExtra()
|
||
{
|
||
var fileName = "[VCB-Studio] Spice and Wolf [CM02][Ma10p_1080p][x265_flac]";
|
||
var parseResult = NameParser.Parse(fileName);
|
||
Assert.IsTrue(parseResult.IsExtra);
|
||
|
||
fileName = "[VCB-Studio] Spice and Wolf [Menu01_2][Ma10p_1080p][x265_flac]";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.IsTrue(parseResult.IsExtra);
|
||
|
||
fileName = "[VCB-Studio] Spice and Wolf [NCED][Ma10p_1080p][x265_flac]";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.IsTrue(parseResult.IsExtra);
|
||
|
||
fileName = "[VCB-Studio] Spice and Wolf [NCOP][Ma10p_1080p][x265_flac]";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.IsTrue(parseResult.IsExtra);
|
||
|
||
fileName = "[VCB-Studio] Spice and Wolf II [Drama02][Ma10p_1080p][x265_flac].mp4";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.IsTrue(parseResult.IsExtra);
|
||
|
||
|
||
fileName = "Evangelion 3.0+1.11 Thrice Upon a Time - Voice Message01 In Shin Evangelion No All Night Nippo (BDRIP 1920x1080 x265 10bit ac3)";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.IsTrue(parseResult.IsExtra);
|
||
|
||
fileName = "Evangelion 3.0+1.11 Thrice Upon a Time - Message1 In Kinyoubi Roadshow (BDRIP 1920x1080 x265 10bit ac3)";
|
||
parseResult = NameParser.Parse(fileName);
|
||
Assert.IsTrue(parseResult.IsExtra);
|
||
|
||
// fileName = "Evangelion 3.0+1.11 Thrice Upon a Time - CM (BDRIP 1920x1080 x265 10bit ac3)";
|
||
// parseResult = NameParser.Parse(fileName);
|
||
// Assert.IsTrue(parseResult.IsExtra);
|
||
|
||
// fileName = "Evangelion 3.0+1.11 Thrice Upon a Time - Logo (BDRIP 1920x1080 x265 10bit ac3)";
|
||
// parseResult = NameParser.Parse(fileName);
|
||
// Assert.IsTrue(parseResult.IsExtra);
|
||
|
||
// fileName = "Evangelion 3.0+1.11 Thrice Upon a Time - Audio Guide (BDRIP 1920x1080 x265 10bit ac3)";
|
||
// parseResult = NameParser.Parse(fileName);
|
||
// Assert.IsTrue(parseResult.IsExtra);
|
||
|
||
// fileName = "Evangelion 3.0+1.11 Thrice Upon a Time - BD&DVD PV (BDRIP 1920x1080 x265 10bit ac3).mkv";
|
||
// parseResult = NameParser.Parse(fileName);
|
||
// Assert.IsTrue(parseResult.IsExtra);
|
||
|
||
}
|
||
|
||
}
|
||
} |