Rewrote ChapterRecognition to Kotlin. (#293)

This commit is contained in:
Bram van de Kerkhof
2016-05-11 15:33:14 +02:00
committed by inorichi
parent c64bd81339
commit a6df745daa
4 changed files with 561 additions and 403 deletions

View File

@@ -1,198 +0,0 @@
package eu.kanade.tachiyomi;
import org.junit.Before;
import org.junit.Test;
import eu.kanade.tachiyomi.data.database.models.Chapter;
import eu.kanade.tachiyomi.data.database.models.Manga;
import eu.kanade.tachiyomi.util.ChapterRecognition;
import static org.assertj.core.api.Assertions.assertThat;
public class ChapterRecognitionTest {
Manga randomManga;
private Chapter createChapter(String title) {
Chapter chapter = Chapter.create();
chapter.name = title;
return chapter;
}
@Before
public void setUp() {
randomManga = new Manga();
randomManga.title = "Something";
}
@Test
public void testWithOneDigit() {
Chapter c = createChapter("Ch.3: Self-proclaimed Genius");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(3f);
}
@Test
public void testWithVolumeBefore() {
Chapter c = createChapter("Vol.1 Ch.4: Misrepresentation");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(4f);
}
@Test
public void testWithVolumeAndVersionNumber() {
Chapter c = createChapter("Vol.1 Ch.3 (v2) Read Online");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(3f);
}
@Test
public void testWithVolumeAndNumberInTitle() {
Chapter c = createChapter("Vol.15 Ch.90: Here Blooms the Daylily, Part 4");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(90f);
}
@Test
public void testWithVolumeAndSpecialChapter() {
Chapter c = createChapter("Vol.10 Ch.42.5: Homecoming (Beginning)");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(42.5f);
}
@Test
public void testWithJustANumber() {
Chapter c = createChapter("Homecoming (Beginning) 42");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(42f);
}
@Test
public void testWithJustASpecialChapter() {
Chapter c = createChapter("Homecoming (Beginning) 42.5");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(42.5f);
}
@Test
public void testWithNumberinMangaTitle() {
Chapter c = createChapter("3x3 Eyes 96");
Manga m = new Manga();
m.title = "3x3 Eyes";
ChapterRecognition.parseChapterNumber(c, m);
assertThat(c.chapter_number).isEqualTo(96f);
}
@Test
public void testWithColonAtTheEnd() {
Chapter c = createChapter("Chapter 5: 365 days");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(5f);
}
@Test
public void testWithZeros() {
Chapter c = createChapter("Vol.001 Ch.003: Kaguya Doesn't Know Much");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(3f);
}
@Test
public void testRange() {
Chapter c = createChapter("Ch.191-200 Read Online");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(191f);
}
@Test
public void testWithKeywordChAtTheEndOfTheManga() {
// It should be 567, not 67 (ch is a keyword to get the chapter number)
Chapter c = createChapter("Bleach 567: Down With Snowwhite");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(567f);
}
@Test
public void testWithVersionBefore() {
// It should be 84, not 2084
Chapter c = createChapter("Onepunch-Man Punch Ver002 084 : Creeping Darkness");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(84f);
}
@Test
public void testWithVersionBeforeAndAnotherNumber() {
Chapter c = createChapter("Onepunch-Man Punch Ver002 086 : Creeping Darkness [3]");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(86f);
}
@Test
public void testWithVolumeAfterChapter() {
Chapter c = createChapter("Solanin 028 Vol. 2");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(28f);
}
@Test
public void testWithVolumeAttachedToChapter() {
Chapter c = createChapter("Ansatsu Kyoushitsu 011v002: Assembly Time");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(11f);
}
@Test
public void testWithNumberInChapterTitle() {
Chapter c = createChapter("Ansatsu Kyoushitsu 099 Present Time - 2nd Hour");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(99f);
}
@Test
public void testAlphaSubChapters() {
Chapter c = createChapter("Asu No Yoichi 19a");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(19.1f);
c = createChapter("Asu No Yoichi 19b");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(19.2f);
}
@Test
public void testChapterWithArcNumber() {
Chapter c = createChapter("Manga title 123 - Vol 016 Arc title 002");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(123f);
}
@Test
public void testChapterWithChapterPrefixAfterPart() {
Chapter c = createChapter("Tokyo ESP 027: Part 002: Chapter 001");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(027f);
}
@Test
public void testUnparsable() {
Chapter c = createChapter("Foo");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(-1f);
}
@Test
public void testChapterWithTime() {
Chapter c = createChapter("Fairy Tail 404: 00:00");
ChapterRecognition.parseChapterNumber(c, randomManga);
assertThat(c.chapter_number).isEqualTo(404f);
}
@Test
public void testPlainNumberInTitle() {
Chapter c = createChapter("Kuroko no Basket 002 Monday at 840 on the Rooftop");
Manga manga = new Manga();
manga.title = "Kuroko no Basket";
ChapterRecognition.parseChapterNumber(c, manga);
assertThat(c.chapter_number).isEqualTo(2f);
}
}

View File

@@ -0,0 +1,421 @@
package eu.kanade.tachiyomi
import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.util.ChapterRecognition
import org.assertj.core.api.Assertions.assertThat
import org.junit.Before
import org.junit.Test
class ChapterRecognitionTest {
/**
* The manga containing manga title
*/
lateinit var manga: Manga
/**
* The chapter containing chapter name
*/
lateinit var chapter: Chapter
/**
* Set chapter title
* @param name name of chapter
* @return chapter object
*/
private fun createChapter(name: String): Chapter {
chapter = Chapter.create()
chapter.name = name
return chapter
}
/**
* Set manga title
* @param title title of manga
* @return manga object
*/
private fun createManga(title: String): Manga {
manga.title = title
return manga
}
/**
* Called before test
*/
@Before fun setup() {
manga = Manga().apply { title = "random" }
chapter = Chapter.create()
}
/**
* Ch.xx base case
*/
@Test fun ChCaseBase() {
createManga("Mokushiroku Alice")
createChapter("Mokushiroku Alice Vol.1 Ch.4: Misrepresentation")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(4f)
}
/**
* Ch.xx.x base case
*/
@Test fun ChCaseDecimal() {
createManga("Mokushiroku Alice")
createChapter("Mokushiroku Alice Vol.1 Ch.4.1: Misrepresentation")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(4.1f)
createChapter("Mokushiroku Alice Vol.1 Ch.4.4: Misrepresentation")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(4.4f)
}
/**
* Ch.xx.a base case
*/
@Test fun ChCaseAlpha() {
createManga("Mokushiroku Alice")
createChapter("Mokushiroku Alice Vol.1 Ch.4.a: Misrepresentation")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(4.1f)
createChapter("Mokushiroku Alice Vol.1 Ch.4.b: Misrepresentation")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(4.2f)
createChapter("Mokushiroku Alice Vol.1 Ch.4.extra: Misrepresentation")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(4.99f)
}
/**
* Name containing one number base case
*/
@Test fun OneNumberCaseBase() {
createManga("Bleach")
createChapter("Bleach 567 Down With Snowwhite")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(567f)
}
/**
* Name containing one number and decimal case
*/
@Test fun OneNumberCaseDecimal() {
createManga("Bleach")
createChapter("Bleach 567.1 Down With Snowwhite")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(567.1f)
createChapter("Bleach 567.4 Down With Snowwhite")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(567.4f)
}
/**
* Name containing one number and alpha case
*/
@Test fun OneNumberCaseAlpha() {
createManga("Bleach")
createChapter("Bleach 567.a Down With Snowwhite")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(567.1f)
createChapter("Bleach 567.b Down With Snowwhite")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(567.2f)
createChapter("Bleach 567.extra Down With Snowwhite")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(567.99f)
}
/**
* Chapter containing manga title and number base case
*/
@Test fun MangaTitleCaseBase() {
createManga("Solanin")
createChapter("Solanin 028 Vol. 2")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(28f)
}
/**
* Chapter containing manga title and number decimal case
*/
@Test fun MangaTitleCaseDecimal() {
createManga("Solanin")
createChapter("Solanin 028.1 Vol. 2")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(28.1f)
createChapter("Solanin 028.4 Vol. 2")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(28.4f)
}
/**
* Chapter containing manga title and number alpha case
*/
@Test fun MangaTitleCaseAlpha() {
createManga("Solanin")
createChapter("Solanin 028.a Vol. 2")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(28.1f)
createChapter("Solanin 028.b Vol. 2")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(28.2f)
createChapter("Solanin 028.extra Vol. 2")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(28.99f)
}
/**
* Extreme base case
*/
@Test fun ExtremeCaseBase() {
createManga("Onepunch-Man")
createChapter("Onepunch-Man Punch Ver002 028")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(28f)
}
/**
* Extreme base case decimal
*/
@Test fun ExtremeCaseDecimal() {
createManga("Onepunch-Man")
createChapter("Onepunch-Man Punch Ver002 028.1")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(28.1f)
createChapter("Onepunch-Man Punch Ver002 028.4")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(28.4f)
}
/**
* Extreme base case alpha
*/
@Test fun ExtremeCaseAlpha() {
createManga("Onepunch-Man")
createChapter("Onepunch-Man Punch Ver002 028.a")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(28.1f)
createChapter("Onepunch-Man Punch Ver002 028.b")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(28.2f)
createChapter("Onepunch-Man Punch Ver002 028.extra")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(28.99f)
}
/**
* Chapter containing .v2
*/
@Test fun dotV2Case() {
createChapter("Vol.1 Ch.5v.2: Alones")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(5f)
}
/**
* Check for case with number in manga title
*/
@Test fun numberInMangaTitleCase() {
createManga("Ayame 14")
createChapter("Ayame 14 1 - The summer of 14")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(1f)
}
/**
* Case with space between ch. x
*/
@Test fun spaceAfterChapterCase() {
createManga("Mokushiroku Alice")
createChapter("Mokushiroku Alice Vol.1 Ch. 4: Misrepresentation")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(4f)
}
/**
* Chapter containing mar(ch)
*/
@Test fun marchInChapterCase() {
createManga("Ayame 14")
createChapter("Vol.1 Ch.1: March 25 (First Day Cohabiting)")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(1f)
}
/**
* Chapter containing range
*/
@Test fun rangeInChapterCase() {
createChapter("Ch.191-200 Read Online")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(191f)
}
/**
* Chapter containing multiple zeros
*/
@Test fun multipleZerosCase() {
createChapter("Vol.001 Ch.003: Kaguya Doesn't Know Much")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(3f)
}
/**
* Chapter with version before number
*/
@Test fun chapterBeforeNumberCase() {
createManga("Onepunch-Man")
createChapter("Onepunch-Man Punch Ver002 086 : Creeping Darkness [3]")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(86f)
}
/**
* Case with version attached to chapter number
*/
@Test fun vAttachedToChapterCase() {
createManga("Ansatsu Kyoushitsu")
createChapter("Ansatsu Kyoushitsu 011v002: Assembly Time")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(11f)
}
/**
* Case where the chapter title contains the chapter
* But wait it's not actual the chapter number.
*/
@Test fun NumberAfterMangaTitleWithChapterInChapterTitleCase() {
createChapter("Tokyo ESP 027: Part 002: Chapter 001")
createManga("Tokyo ESP")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(027f)
}
/**
* unParsable chapter
*/
@Test fun unParsableCase() {
createChapter("Foo")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(-1f)
}
/**
* chapter with time in title
*/
@Test fun timeChapterCase() {
createChapter("Fairy Tail 404: 00:00")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(404f)
}
/**
* chapter with alpha without dot
*/
@Test fun alphaWithoutDotCase() {
createChapter("Asu No Yoichi 19a")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(19.1f)
}
/**
* Chapter title containing extra and vol
*/
@Test fun chapterContainingExtraCase() {
createManga("Fairy Tail")
createChapter("Fairy Tail 404.extravol002")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(404.99f)
createChapter("Fairy Tail 404 extravol002")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(404.99f)
createChapter("Fairy Tail 404.evol002")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(404.5f)
}
/**
* Chapter title containing omake (japanese extra) and vol
*/
@Test fun chapterContainingOmakeCase() {
createManga("Fairy Tail")
createChapter("Fairy Tail 404.omakevol002")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(404.98f)
createChapter("Fairy Tail 404 omakevol002")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(404.98f)
createChapter("Fairy Tail 404.ovol002")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(404.15f)
}
/**
* Chapter title containing special and vol
*/
@Test fun chapterContainingSpecialCase() {
createManga("Fairy Tail")
createChapter("Fairy Tail 404.specialvol002")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(404.97f)
createChapter("Fairy Tail 404 specialvol002")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(404.97f)
createChapter("Fairy Tail 404.svol002")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(404.19f)
}
/**
* Chapter title containing comma's
*/
@Test fun chapterContainingCommasCase() {
createManga("One Piece")
createChapter("One Piece 300,a")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(300.1f)
createChapter("One Piece Ch,123,extra")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(123.99f)
createChapter("One Piece the sunny, goes swimming 024,005")
ChapterRecognition.parseChapterNumber(chapter, manga)
assertThat(chapter.chapter_number).isEqualTo(24.005f)
}
}