Files
openclaw/apps/shared/OpenClawKit/Tests/OpenClawKitTests/ChatComposerPasteSupportTests.swift
Peter Steinberger d15b6af77b fix: land contributor PR #39516 from @Imhermes1
macOS app/chat/browser/cron/permissions fixes.

Co-authored-by: ImHermes1 <lukeforn@gmail.com>
2026-03-08 06:11:20 +00:00

63 lines
2.3 KiB
Swift

#if os(macOS)
import AppKit
import Foundation
import Testing
@testable import OpenClawChatUI
@Suite(.serialized)
@MainActor
struct ChatComposerPasteSupportTests {
@Test func extractsImageDataFromPNGClipboardPayload() throws {
let pasteboard = NSPasteboard(name: NSPasteboard.Name("test-\(UUID().uuidString)"))
let item = NSPasteboardItem()
let pngData = try self.samplePNGData()
pasteboard.clearContents()
item.setData(pngData, forType: .png)
#expect(pasteboard.writeObjects([item]))
let attachments = ChatComposerPasteSupport.imageAttachments(from: pasteboard)
#expect(attachments.count == 1)
#expect(attachments[0].data == pngData)
#expect(attachments[0].fileName == "pasted-image-1.png")
#expect(attachments[0].mimeType == "image/png")
}
@Test func extractsImageDataFromFileURLClipboardPayload() throws {
let pasteboard = NSPasteboard(name: NSPasteboard.Name("test-\(UUID().uuidString)"))
let pngData = try self.samplePNGData()
let fileURL = FileManager.default.temporaryDirectory
.appendingPathComponent("chat-composer-paste-\(UUID().uuidString).png")
try pngData.write(to: fileURL)
defer { try? FileManager.default.removeItem(at: fileURL) }
pasteboard.clearContents()
#expect(pasteboard.writeObjects([fileURL as NSURL]))
let references = ChatComposerPasteSupport.imageFileReferences(from: pasteboard)
let attachments = ChatComposerPasteSupport.loadImageAttachments(from: references)
#expect(references.count == 1)
#expect(references[0].url == fileURL)
#expect(attachments.count == 1)
#expect(attachments[0].data == pngData)
#expect(attachments[0].fileName == fileURL.lastPathComponent)
#expect(attachments[0].mimeType == "image/png")
}
private func samplePNGData() throws -> Data {
let image = NSImage(size: NSSize(width: 4, height: 4))
image.lockFocus()
NSColor.systemBlue.setFill()
NSBezierPath(rect: NSRect(x: 0, y: 0, width: 4, height: 4)).fill()
image.unlockFocus()
let tiffData = try #require(image.tiffRepresentation)
let bitmap = try #require(NSBitmapImageRep(data: tiffData))
return try #require(bitmap.representation(using: .png, properties: [:]))
}
}
#endif