59 lines
2.7 KiB
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))
|
|
}
|
|
}
|