Files
Termind/TFITests/MobileSFTPEditPreviewTests.swift

58 lines
2.7 KiB
Swift

// SPDX-FileCopyrightText: 2026 Kaede Akino
// SPDX-License-Identifier: GPL-3.0-only
import Foundation
import QuickLook
import TermindApplication
import Testing
import UIKit
@testable import TermindIOS
@Suite(.serialized) @MainActor
struct MobileSFTPEditPreviewTests {
@Test func previewEnablesSystemEditingAndReceivesInPlaceChanges() {
let url = URL(filePath: "/tmp/document.pdf")
var changes = 0
let preview = MobileSFTPEditPreview(
url: url, allowsEditing: true, changed: { changes += 1 }, export: { _ in }, failed: { _ in }, dismiss: {})
let delegate = preview.makeCoordinator()
let controller = QLPreviewController()
#expect(delegate.previewController(controller, editingModeFor: url as NSURL) == .updateContents)
delegate.previewController(controller, didUpdateContentsOf: url as NSURL)
#expect(changes == 1)
delegate.parent = MobileSFTPEditPreview(
url: url, allowsEditing: false, changed: {}, export: { _ in }, failed: { _ in }, dismiss: {})
#expect(delegate.previewController(controller, editingModeFor: url as NSURL) == .disabled)
}
@Test func editedCopiesAreOwnedBeforeCallbackReturnsAndDifferentFormatsAreExported() throws {
let directory = FileManager.default.temporaryDirectory.appending(path: UUID().uuidString)
try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true)
defer { try? FileManager.default.removeItem(at: directory) }
let original = directory.appending(path: "original.pdf")
let sameType = directory.appending(path: "edited.pdf")
let differentType = directory.appending(path: "edited.png")
try Data([1]).write(to: original)
try Data([2]).write(to: sameType)
try Data([3]).write(to: differentType)
var changes = 0
var exported: URL?
let delegate = MobileSFTPEditPreview(
url: original, allowsEditing: true, changed: { changes += 1 },
export: { exported = $0 }, failed: { Issue.record("\($0)") }, dismiss: {}
).makeCoordinator()
let controller = QLPreviewController()
delegate.previewController(controller, didSaveEditedCopyOf: original as NSURL, at: sameType)
try FileManager.default.removeItem(at: sameType)
#expect(try Data(contentsOf: original) == Data([2]))
#expect(changes == 1)
delegate.previewController(controller, didSaveEditedCopyOf: original as NSURL, at: differentType)
try FileManager.default.removeItem(at: differentType)
#expect(try Data(contentsOf: original) == Data([2]))
#expect(try Data(contentsOf: #require(exported)) == Data([3]))
#expect(changes == 1)
}
}