Files
Termind/TFMTests/TerminalPathDragTests.swift

59 lines
2.7 KiB
Swift

// SPDX-FileCopyrightText: 2026 Kaede Akino
// SPDX-License-Identifier: GPL-3.0-only
import AppKit
import Testing
import UniformTypeIdentifiers
@testable import Termind
@Suite @MainActor
struct TerminalPathDragTests {
@Test
func providerCarriesTheFullEscapedPathWithoutAdvertisingAFile() async throws {
let path = "/home/user/中文/my files/it's live"
let provider = TerminalPathDrag.provider(for: path)
let data: Data = try await withCheckedThrowingContinuation { continuation in
_ = provider.loadDataRepresentation(forTypeIdentifier: TerminalPathDrag.type.identifier) { data, error in
if let data {
continuation.resume(returning: data)
} else {
continuation.resume(throwing: error ?? CocoaError(.fileReadUnknown))
}
}
}
let pasteboard = NSPasteboard.withUniqueName()
defer { pasteboard.releaseGlobally() }
pasteboard.setData(data, forType: TerminalPathDrag.pasteboardType)
#expect(TerminalPathDrag.text(from: pasteboard) == #"/home/user/中文/my\ files/it\'s\ live"#)
#expect(provider.hasItemConformingToTypeIdentifier(UTType.utf8PlainText.identifier))
#expect(!provider.hasItemConformingToTypeIdentifier(UTType.fileURL.identifier))
#expect(FileURLDropNSView.payload(from: pasteboard).restricted(to: [.files, .sftpItems]).preferredKind == nil)
}
@Test
func plainTextFileURLsAndInvalidDataAreNotPathInsertions() {
let pasteboard = NSPasteboard.withUniqueName()
defer { pasteboard.releaseGlobally() }
pasteboard.setString("/srv/plain text", forType: .string)
pasteboard.setString("file:///srv/file", forType: .fileURL)
#expect(TerminalPathDrag.text(from: pasteboard) == nil)
pasteboard.setData(Data([0xFF]), forType: TerminalPathDrag.pasteboardType)
#expect(TerminalPathDrag.text(from: pasteboard) == nil)
pasteboard.setData(Data(), forType: TerminalPathDrag.pasteboardType)
#expect(TerminalPathDrag.text(from: pasteboard) == nil)
}
@Test
func unmountedTerminalRefusesPathDrops() {
let pasteboard = NSPasteboard.withUniqueName()
defer { pasteboard.releaseGlobally() }
pasteboard.setString("/srv/path", forType: TerminalPathDrag.pasteboardType)
let view = TermindTerminalView(frame: .zero)
view.setSurfaceVisible(true)
#expect(!view.registeredDraggedTypes.contains(TerminalPathDrag.pasteboardType))
#expect(view.pathDropOperation(from: pasteboard, sourceOperations: .copy).isEmpty)
#expect(!view.receivePathDrop(from: pasteboard, sourceOperations: .copy))
}
}