53 lines
1.9 KiB
Swift
53 lines
1.9 KiB
Swift
import XCTest
|
|
@testable import IHatePDFsCore
|
|
|
|
final class PDFDocumentBookmarksTests: XCTestCase {
|
|
func testUpsertReplacesExistingBookmark() {
|
|
let first = PDFDocumentBookmark(id: "first", pageIndex: 4, pageLabel: "5", title: "Old")
|
|
let second = PDFDocumentBookmark(id: "second", pageIndex: 1, pageLabel: "2", title: "Second")
|
|
let replacement = PDFDocumentBookmark(id: "replacement", pageIndex: 4, pageLabel: "5", title: "New")
|
|
|
|
let result = PDFDocumentBookmarks.upsert(replacement, in: [first, second])
|
|
|
|
XCTAssertEqual(result.map(\.id), ["replacement"])
|
|
XCTAssertEqual(result.first?.title, "New")
|
|
}
|
|
|
|
func testRemovingBookmarkCollapsesDirtyMultipleBookmarkData() {
|
|
let first = PDFDocumentBookmark(id: "first", pageIndex: 0, pageLabel: "1", title: "First")
|
|
let second = PDFDocumentBookmark(id: "second", pageIndex: 1, pageLabel: "2", title: "Second")
|
|
|
|
let result = PDFDocumentBookmarks.removing(id: "first", from: [first, second])
|
|
|
|
XCTAssertEqual(result.map(\.id), ["second"])
|
|
}
|
|
|
|
func testClampedDropsInvalidBookmarksAndKeepsOneBookmark() {
|
|
let older = PDFDocumentBookmark(
|
|
id: "older",
|
|
pageIndex: 0,
|
|
pageLabel: "1",
|
|
title: "Older",
|
|
createdAt: Date(timeIntervalSince1970: 100)
|
|
)
|
|
let newer = PDFDocumentBookmark(
|
|
id: "newer",
|
|
pageIndex: 1,
|
|
pageLabel: "2",
|
|
title: "Newer",
|
|
createdAt: Date(timeIntervalSince1970: 200)
|
|
)
|
|
let invalid = PDFDocumentBookmark(
|
|
id: "invalid",
|
|
pageIndex: 4,
|
|
pageLabel: "5",
|
|
title: "Invalid",
|
|
createdAt: Date(timeIntervalSince1970: 300)
|
|
)
|
|
|
|
let result = PDFDocumentBookmarks.clamped([invalid, older, newer], pageCount: 2)
|
|
|
|
XCTAssertEqual(result.map(\.id), ["newer"])
|
|
}
|
|
}
|