76 lines
2.4 KiB
Kotlin
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") })
|
|
}
|
|
}
|