Files
PageScribe/app/src/test/java/com/bm/pagescribe/ocr/PageNumberResolverTest.kt
2026-10-18 19:01:01 -07:00

76 lines
2.4 KiB
Kotlin

// Copyright 2026 Umbra Tools (umbratools.com)
// SPDX-License-Identifier: Apache-2.0
package com.bm.pagescribe.ocr
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
class PageNumberResolverTest {
@Test
fun `uses both folios as printed`() {
val result = PageNumberResolver.resolve(emptyList(), 12, 13)
assertEquals(12, result.left)
assertEquals(13, result.right)
assertFalse(result.derived)
assertTrue(result.notes.isEmpty())
}
@Test
fun `keeps both folios even when they are not consecutive`() {
val result = PageNumberResolver.resolve(emptyList(), 12, 14)
assertEquals(12, result.left)
assertEquals(14, result.right)
assertEquals(1, result.notes.size)
}
@Test
fun `fills the right page from the left folio`() {
val result = PageNumberResolver.resolve(emptyList(), 20, null)
assertEquals(20, result.left)
assertEquals(21, result.right)
assertTrue(result.derived)
}
@Test
fun `fills the left page from the right folio`() {
val result = PageNumberResolver.resolve(emptyList(), null, 21)
assertEquals(20, result.left)
assertEquals(21, result.right)
assertTrue(result.derived)
}
@Test
fun `a book with no folios at all starts at the beginning`() {
val result = PageNumberResolver.resolve(emptyList(), null, null)
assertEquals(1, result.left)
assertEquals(2, result.right)
assertTrue(result.derived)
}
@Test
fun `continues after the highest known page`() {
// Last stored spread ended on 21 (odd) -> next spread starts at 22.
assertEquals(22, PageNumberResolver.resolve(listOf(4, 5, 20, 21), null, null).left)
// Highest known page is even (an odd page was never shot) -> skip to 24.
assertEquals(24, PageNumberResolver.resolve(listOf(22), null, null).left)
}
@Test
fun `an overwrite of an existing page is reported`() {
val result = PageNumberResolver.resolve(listOf(12, 13), 12, 13)
assertTrue(result.notes.any { it.contains("before") })
}
@Test
fun `an unusual parity is reported but honoured`() {
val result = PageNumberResolver.resolve(emptyList(), 5, 6)
assertEquals(5, result.left)
assertEquals(6, result.right)
assertTrue(result.notes.any { it.contains("odd") })
}
}