import AppKit import ClawdbotProtocol import Foundation import Testing @testable import Clawdbot @Suite(.serialized) struct LowCoverageHelperTests { private typealias ProtoAnyCodable = ClawdbotProtocol.AnyCodable @Test func anyCodableHelperAccessors() throws { let payload: [String: ProtoAnyCodable] = [ "title": ProtoAnyCodable("Hello"), "flag": ProtoAnyCodable(true), "count": ProtoAnyCodable(3), "ratio": ProtoAnyCodable(1.25), "list": ProtoAnyCodable([ProtoAnyCodable("a"), ProtoAnyCodable(2)]), ] let any = ProtoAnyCodable(payload) let dict = try #require(any.dictionaryValue) #expect(dict["title"]?.stringValue == "Hello") #expect(dict["flag"]?.boolValue == true) #expect(dict["count"]?.intValue == 3) #expect(dict["ratio"]?.doubleValue == 1.25) #expect(dict["list"]?.arrayValue?.count == 2) let foundation = any.foundationValue as? [String: Any] #expect((foundation?["title"] as? String) == "Hello") } @Test func attributedStringStripsForegroundColor() { let text = NSMutableAttributedString(string: "Test") text.addAttribute(.foregroundColor, value: NSColor.red, range: NSRange(location: 0, length: 4)) let stripped = text.strippingForegroundColor() let color = stripped.attribute(.foregroundColor, at: 0, effectiveRange: nil) #expect(color == nil) } @Test func viewMetricsReduceWidth() { let value = ViewMetricsTesting.reduceWidth(current: 120, next: 180) #expect(value == 180) } @Test func shellExecutorHandlesEmptyCommand() async { let result = await ShellExecutor.runDetailed(command: [], cwd: nil, env: nil, timeout: nil) #expect(result.success == false) #expect(result.errorMessage != nil) } @Test func shellExecutorRunsCommand() async { let result = await ShellExecutor.runDetailed(command: ["/bin/echo", "ok"], cwd: nil, env: nil, timeout: 2) #expect(result.success == true) #expect(result.stdout.contains("ok") || result.stderr.contains("ok")) } @Test func shellExecutorTimesOut() async { let result = await ShellExecutor.runDetailed(command: ["/bin/sleep", "1"], cwd: nil, env: nil, timeout: 0.05) #expect(result.timedOut == true) } @Test func shellExecutorDrainsStdoutAndStderr() async { let script = """ i=0 while [ $i -lt 2000 ]; do echo "stdout-$i" echo "stderr-$i" 1>&2 i=$((i+1)) done """ let result = await ShellExecutor.runDetailed( command: ["/bin/sh", "-c", script], cwd: nil, env: nil, timeout: 2) #expect(result.success == true) #expect(result.stdout.contains("stdout-1999")) #expect(result.stderr.contains("stderr-1999")) } @Test func nodeInfoCodableRoundTrip() throws { let info = NodeInfo( nodeId: "node-1", displayName: "Node One", platform: "macOS", version: "1.0", coreVersion: "1.0-core", uiVersion: "1.0-ui", deviceFamily: "Mac", modelIdentifier: "MacBookPro", remoteIp: "192.168.1.2", caps: ["chat"], commands: ["send"], permissions: ["send": true], paired: true, connected: false) let data = try JSONEncoder().encode(info) let decoded = try JSONDecoder().decode(NodeInfo.self, from: data) #expect(decoded.nodeId == "node-1") #expect(decoded.isPaired == true) #expect(decoded.isConnected == false) } @Test @MainActor func presenceReporterHelpers() { let summary = PresenceReporter._testComposePresenceSummary(mode: "local", reason: "test") #expect(summary.contains("mode local")) #expect(!PresenceReporter._testAppVersionString().isEmpty) #expect(!PresenceReporter._testPlatformString().isEmpty) _ = PresenceReporter._testLastInputSeconds() _ = PresenceReporter._testPrimaryIPv4Address() } @Test func portGuardianParsesListenersAndBuildsReports() { let output = """ p123 cnode uuser p456 cssh uroot """ let listeners = PortGuardian._testParseListeners(output) #expect(listeners.count == 2) #expect(listeners[0].command == "node") #expect(listeners[1].command == "ssh") let okReport = PortGuardian._testBuildReport( port: 18789, mode: .local, listeners: [(pid: 1, command: "node", fullCommand: "node", user: "me")]) #expect(okReport.offenders.isEmpty) let badReport = PortGuardian._testBuildReport( port: 18789, mode: .local, listeners: [(pid: 2, command: "python", fullCommand: "python", user: "me")]) #expect(!badReport.offenders.isEmpty) let emptyReport = PortGuardian._testBuildReport(port: 18789, mode: .local, listeners: []) #expect(emptyReport.summary.contains("Nothing is listening")) } @Test @MainActor func canvasSchemeHandlerResolvesFilesAndErrors() throws { let root = FileManager().temporaryDirectory .appendingPathComponent("canvas-\(UUID().uuidString)", isDirectory: true) defer { try? FileManager().removeItem(at: root) } try FileManager().createDirectory(at: root, withIntermediateDirectories: true) let session = root.appendingPathComponent("main", isDirectory: true) try FileManager().createDirectory(at: session, withIntermediateDirectories: true) let index = session.appendingPathComponent("index.html") try "