mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-06-23 15:30:34 -04:00
* Cleaned up some code. Fixed an issue on books with good table of contents not allowing line tracking (progress) from being saved. Changed Save to Defaults on light mode to be primary. * Fixed a bug where deleting reading items would not actually delete them * Fixed a bug where after ordering reading lists then deleting the order would be undone (develop) * Code cleanup
205 lines
12 KiB
C#
205 lines
12 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using API.Entities.Enums;
|
||
using API.Parser;
|
||
using Xunit;
|
||
using Xunit.Abstractions;
|
||
|
||
namespace API.Tests.Parser
|
||
{
|
||
public class ComicParserTests
|
||
{
|
||
private readonly ITestOutputHelper _testOutputHelper;
|
||
|
||
public ComicParserTests(ITestOutputHelper testOutputHelper)
|
||
{
|
||
_testOutputHelper = testOutputHelper;
|
||
}
|
||
|
||
[Theory]
|
||
[InlineData("04 - Asterix the Gladiator (1964) (Digital-Empire) (WebP by Doc MaKS)", "Asterix the Gladiator")]
|
||
[InlineData("The First Asterix Frieze (WebP by Doc MaKS)", "The First Asterix Frieze")]
|
||
[InlineData("Batman & Catwoman - Trail of the Gun 01", "Batman & Catwoman - Trail of the Gun")]
|
||
[InlineData("Batman & Daredevil - King of New York", "Batman & Daredevil - King of New York")]
|
||
[InlineData("Batman & Grendel (1996) 01 - Devil's Bones", "Batman & Grendel")]
|
||
[InlineData("Batman & Robin the Teen Wonder #0", "Batman & Robin the Teen Wonder")]
|
||
[InlineData("Batman & Wildcat (1 of 3)", "Batman & Wildcat")]
|
||
[InlineData("Batman And Superman World's Finest #01", "Batman And Superman World's Finest")]
|
||
[InlineData("Babe 01", "Babe")]
|
||
[InlineData("Scott Pilgrim 01 - Scott Pilgrim's Precious Little Life (2004)", "Scott Pilgrim")]
|
||
[InlineData("Teen Titans v1 001 (1966-02) (digital) (OkC.O.M.P.U.T.O.-Novus)", "Teen Titans")]
|
||
[InlineData("Scott Pilgrim 02 - Scott Pilgrim vs. The World (2005)", "Scott Pilgrim")]
|
||
[InlineData("Wolverine - Origins 003 (2006) (digital) (Minutemen-PhD)", "Wolverine - Origins")]
|
||
[InlineData("Invincible Vol 01 Family matters (2005) (Digital).cbr", "Invincible")]
|
||
[InlineData("Amazing Man Comics chapter 25", "Amazing Man Comics")]
|
||
[InlineData("Amazing Man Comics issue #25", "Amazing Man Comics")]
|
||
[InlineData("Teen Titans v1 038 (1972) (c2c).cbr", "Teen Titans")]
|
||
[InlineData("Batman Beyond 02 (of 6) (1999)", "Batman Beyond")]
|
||
[InlineData("Batman Beyond - Return of the Joker (2001)", "Batman Beyond - Return of the Joker")]
|
||
[InlineData("Invincible 033.5 - Marvel Team-Up 14 (2006) (digital) (Minutemen-Slayer)", "Invincible")]
|
||
[InlineData("Batman Wayne Family Adventures - Ep. 001 - Moving In", "Batman Wayne Family Adventures")]
|
||
[InlineData("Saga 001 (2012) (Digital) (Empire-Zone).cbr", "Saga")]
|
||
[InlineData("spawn-123", "spawn")]
|
||
[InlineData("spawn-chapter-123", "spawn")]
|
||
[InlineData("Spawn 062 (1997) (digital) (TLK-EMPIRE-HD).cbr", "Spawn")]
|
||
[InlineData("Batman Beyond 04 (of 6) (1999)", "Batman Beyond")]
|
||
[InlineData("Batman Beyond 001 (2012)", "Batman Beyond")]
|
||
[InlineData("Batman Beyond 2.0 001 (2013)", "Batman Beyond 2.0")]
|
||
[InlineData("Batman - Catwoman 001 (2021) (Webrip) (The Last Kryptonian-DCP)", "Batman - Catwoman")]
|
||
[InlineData("Chew v1 - Taster´s Choise (2012) (Digital) (1920) (Kingpin-Empire)", "Chew")]
|
||
[InlineData("Chew Script Book (2011) (digital-Empire) SP04", "Chew Script Book")]
|
||
[InlineData("Batman - Detective Comics - Rebirth Deluxe Edition Book 02 (2018) (digital) (Son of Ultron-Empire)", "Batman - Detective Comics - Rebirth Deluxe Edition Book")]
|
||
[InlineData("Cyberpunk 2077 - Your Voice #01", "Cyberpunk 2077 - Your Voice")]
|
||
[InlineData("Cyberpunk 2077 #01", "Cyberpunk 2077")]
|
||
[InlineData("Cyberpunk 2077 - Trauma Team #04.cbz", "Cyberpunk 2077 - Trauma Team")]
|
||
[InlineData("Batgirl Vol.2000 #57 (December, 2004)", "Batgirl")]
|
||
[InlineData("Batgirl V2000 #57", "Batgirl")]
|
||
[InlineData("Fables 021 (2004) (Digital) (Nahga-Empire)", "Fables")]
|
||
[InlineData("2000 AD 0366 [1984-04-28] (flopbie)", "2000 AD")]
|
||
public void ParseComicSeriesTest(string filename, string expected)
|
||
{
|
||
Assert.Equal(expected, API.Parser.Parser.ParseComicSeries(filename));
|
||
}
|
||
|
||
[Theory]
|
||
[InlineData("01 Spider-Man & Wolverine 01.cbr", "0")]
|
||
[InlineData("04 - Asterix the Gladiator (1964) (Digital-Empire) (WebP by Doc MaKS)", "0")]
|
||
[InlineData("The First Asterix Frieze (WebP by Doc MaKS)", "0")]
|
||
[InlineData("Batman & Catwoman - Trail of the Gun 01", "0")]
|
||
[InlineData("Batman & Daredevil - King of New York", "0")]
|
||
[InlineData("Batman & Grendel (1996) 01 - Devil's Bones", "0")]
|
||
[InlineData("Batman & Robin the Teen Wonder #0", "0")]
|
||
[InlineData("Batman & Wildcat (1 of 3)", "0")]
|
||
[InlineData("Batman And Superman World's Finest #01", "0")]
|
||
[InlineData("Babe 01", "0")]
|
||
[InlineData("Scott Pilgrim 01 - Scott Pilgrim's Precious Little Life (2004)", "0")]
|
||
[InlineData("Teen Titans v1 001 (1966-02) (digital) (OkC.O.M.P.U.T.O.-Novus)", "1")]
|
||
[InlineData("Scott Pilgrim 02 - Scott Pilgrim vs. The World (2005)", "0")]
|
||
[InlineData("Superman v1 024 (09-10 1943)", "1")]
|
||
[InlineData("Amazing Man Comics chapter 25", "0")]
|
||
[InlineData("Invincible 033.5 - Marvel Team-Up 14 (2006) (digital) (Minutemen-Slayer)", "0")]
|
||
[InlineData("Cyberpunk 2077 - Trauma Team 04.cbz", "0")]
|
||
[InlineData("spawn-123", "0")]
|
||
[InlineData("spawn-chapter-123", "0")]
|
||
[InlineData("Spawn 062 (1997) (digital) (TLK-EMPIRE-HD).cbr", "0")]
|
||
[InlineData("Batman Beyond 04 (of 6) (1999)", "0")]
|
||
[InlineData("Batman Beyond 001 (2012)", "0")]
|
||
[InlineData("Batman Beyond 2.0 001 (2013)", "0")]
|
||
[InlineData("Batman - Catwoman 001 (2021) (Webrip) (The Last Kryptonian-DCP)", "0")]
|
||
[InlineData("Chew v1 - Taster´s Choise (2012) (Digital) (1920) (Kingpin-Empire)", "1")]
|
||
[InlineData("Chew Script Book (2011) (digital-Empire) SP04", "0")]
|
||
[InlineData("Batgirl Vol.2000 #57 (December, 2004)", "2000")]
|
||
[InlineData("Batgirl V2000 #57", "2000")]
|
||
[InlineData("Fables 021 (2004) (Digital) (Nahga-Empire).cbr", "0")]
|
||
[InlineData("Cyberpunk 2077 - Trauma Team 04.cbz", "0")]
|
||
[InlineData("2000 AD 0366 [1984-04-28] (flopbie)", "0")]
|
||
public void ParseComicVolumeTest(string filename, string expected)
|
||
{
|
||
Assert.Equal(expected, API.Parser.Parser.ParseComicVolume(filename));
|
||
}
|
||
|
||
[Theory]
|
||
[InlineData("01 Spider-Man & Wolverine 01.cbr", "1")]
|
||
[InlineData("04 - Asterix the Gladiator (1964) (Digital-Empire) (WebP by Doc MaKS)", "0")]
|
||
[InlineData("The First Asterix Frieze (WebP by Doc MaKS)", "0")]
|
||
[InlineData("Batman & Catwoman - Trail of the Gun 01", "1")]
|
||
[InlineData("Batman & Daredevil - King of New York", "0")]
|
||
[InlineData("Batman & Grendel (1996) 01 - Devil's Bones", "1")]
|
||
[InlineData("Batman & Robin the Teen Wonder #0", "0")]
|
||
[InlineData("Batman & Wildcat (1 of 3)", "1")]
|
||
[InlineData("Batman & Wildcat (2 of 3)", "2")]
|
||
[InlineData("Batman And Superman World's Finest #01", "1")]
|
||
[InlineData("Babe 01", "1")]
|
||
[InlineData("Scott Pilgrim 01 - Scott Pilgrim's Precious Little Life (2004)", "1")]
|
||
[InlineData("Teen Titans v1 001 (1966-02) (digital) (OkC.O.M.P.U.T.O.-Novus)", "1")]
|
||
[InlineData("Superman v1 024 (09-10 1943)", "24")]
|
||
[InlineData("Invincible 070.5 - Invincible Returns 1 (2010) (digital) (Minutemen-InnerDemons).cbr", "70.5")]
|
||
[InlineData("Amazing Man Comics chapter 25", "25")]
|
||
[InlineData("Invincible 033.5 - Marvel Team-Up 14 (2006) (digital) (Minutemen-Slayer)", "33.5")]
|
||
[InlineData("Batman Wayne Family Adventures - Ep. 014 - Moving In", "14")]
|
||
[InlineData("Saga 001 (2012) (Digital) (Empire-Zone)", "1")]
|
||
[InlineData("spawn-123", "123")]
|
||
[InlineData("spawn-chapter-123", "123")]
|
||
[InlineData("Spawn 062 (1997) (digital) (TLK-EMPIRE-HD).cbr", "62")]
|
||
[InlineData("Batman Beyond 04 (of 6) (1999)", "4")]
|
||
[InlineData("Invincible 052 (c2c) (2008) (Minutemen-TheCouple)", "52")]
|
||
[InlineData("Y - The Last Man #001", "1")]
|
||
[InlineData("Batman Beyond 001 (2012)", "1")]
|
||
[InlineData("Batman Beyond 2.0 001 (2013)", "1")]
|
||
[InlineData("Batman - Catwoman 001 (2021) (Webrip) (The Last Kryptonian-DCP)", "1")]
|
||
[InlineData("Chew v1 - Taster´s Choise (2012) (Digital) (1920) (Kingpin-Empire)", "0")]
|
||
[InlineData("Chew Script Book (2011) (digital-Empire) SP04", "0")]
|
||
[InlineData("Batgirl Vol.2000 #57 (December, 2004)", "57")]
|
||
[InlineData("Batgirl V2000 #57", "57")]
|
||
[InlineData("Fables 021 (2004) (Digital) (Nahga-Empire).cbr", "21")]
|
||
[InlineData("Cyberpunk 2077 - Trauma Team #04.cbz", "4")]
|
||
[InlineData("2000 AD 0366 [1984-04-28] (flopbie)", "366")]
|
||
public void ParseComicChapterTest(string filename, string expected)
|
||
{
|
||
Assert.Equal(expected, API.Parser.Parser.ParseComicChapter(filename));
|
||
}
|
||
|
||
|
||
[Theory]
|
||
[InlineData("Batman - Detective Comics - Rebirth Deluxe Edition Book 02 (2018) (digital) (Son of Ultron-Empire)", true)]
|
||
[InlineData("Zombie Tramp vs. Vampblade TPB (2016) (Digital) (TheArchivist-Empire)", true)]
|
||
[InlineData("Baldwin the Brave & Other Tales Special SP1.cbr", true)]
|
||
[InlineData("Mouse Guard Specials - Spring 1153 - Fraggle Rock FCBD 2010", true)]
|
||
public void ParseComicSpecialTest(string input, bool expected)
|
||
{
|
||
Assert.Equal(expected, !string.IsNullOrEmpty(API.Parser.Parser.ParseComicSpecial(input)));
|
||
}
|
||
|
||
[Fact]
|
||
public void ParseInfoTest()
|
||
{
|
||
const string rootPath = @"E:/Comics/";
|
||
var expected = new Dictionary<string, ParserInfo>();
|
||
var filepath = @"E:/Comics/Teen Titans/Teen Titans v1 Annual 01 (1967) SP01.cbr";
|
||
expected.Add(filepath, new ParserInfo
|
||
{
|
||
Series = "Teen Titans", Volumes = "0",
|
||
Chapters = "0", Filename = "Teen Titans v1 Annual 01 (1967) SP01.cbr", Format = MangaFormat.Archive,
|
||
FullFilePath = filepath
|
||
});
|
||
|
||
// Fallback test with bad naming
|
||
filepath = @"E:\Comics\Comics\Babe\Babe Vol.1 #1-4\Babe 01.cbr";
|
||
expected.Add(filepath, new ParserInfo
|
||
{
|
||
Series = "Babe", Volumes = "0", Edition = "",
|
||
Chapters = "1", Filename = "Babe 01.cbr", Format = MangaFormat.Archive,
|
||
FullFilePath = filepath, IsSpecial = false
|
||
});
|
||
|
||
foreach (var file in expected.Keys)
|
||
{
|
||
var expectedInfo = expected[file];
|
||
var actual = API.Parser.Parser.Parse(file, rootPath);
|
||
if (expectedInfo == null)
|
||
{
|
||
Assert.Null(actual);
|
||
return;
|
||
}
|
||
Assert.NotNull(actual);
|
||
_testOutputHelper.WriteLine($"Validating {file}");
|
||
Assert.Equal(expectedInfo.Format, actual.Format);
|
||
_testOutputHelper.WriteLine("Format ✓");
|
||
Assert.Equal(expectedInfo.Series, actual.Series);
|
||
_testOutputHelper.WriteLine("Series ✓");
|
||
Assert.Equal(expectedInfo.Chapters, actual.Chapters);
|
||
_testOutputHelper.WriteLine("Chapters ✓");
|
||
Assert.Equal(expectedInfo.Volumes, actual.Volumes);
|
||
_testOutputHelper.WriteLine("Volumes ✓");
|
||
Assert.Equal(expectedInfo.Edition, actual.Edition);
|
||
_testOutputHelper.WriteLine("Edition ✓");
|
||
Assert.Equal(expectedInfo.Filename, actual.Filename);
|
||
_testOutputHelper.WriteLine("Filename ✓");
|
||
Assert.Equal(expectedInfo.FullFilePath, actual.FullFilePath);
|
||
_testOutputHelper.WriteLine("FullFilePath ✓");
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|