Files
claude-code-haha/native/cu-helper/Tests/CuHelperTests/CoordinateClickRoutingTests.swift
T
程序员阿江(Relakkes) 8336cd8cc9 feat(computer-use): finalize native input and global app consent
Route coordinate clicks through the exact AX hit, reuse render-local
attributes and keep keyboard macros within validated native boundaries.
Preserve lossless capture evidence while returning bounded model images,
and propagate cancellation through daemon and lock acquisition.

Remove legacy per-app restrictions after feature-wide consent on both
platforms while retaining global disablement and target validation.
Include native helpers, regression tests and a stable receiver fixture.

Validation: 224 focused TypeScript tests, 516 XCTest cases and 15 Swift
Testing cases passed. Local sidecar and Electron builds, development
package creation and package smoke checks passed.
2026-09-10 20:58:39 +08:00

64 lines
2.5 KiB
Swift

import CoreGraphics
import XCTest
@testable import cc_haha_computer_use
final class CoordinateClickRoutingTests: XCTestCase {
private enum Element { case canvasWindow, closeButton, contentButton }
@MainActor
func testCanvasWindowHitUsesExactCoordinateInsteadOfPressingItsCloseButton() async throws {
let point = CGPoint(x: 1020, y: 710)
var pressed: [Element] = []
var clicked: [CGPoint] = []
var settled = false
let route = try await CoordinateClickRouting.click(
point: point, preferAccessibility: true,
hitTest: { _ in Element.canvasWindow },
press: { element in
pressed.append(element)
return element == .closeButton ? "press" : nil
},
settle: { settled = true },
syntheticClick: { clicked.append($0) }
)
XCTAssertEqual(pressed, [.canvasWindow], "a canvas click must never press the window's close control")
XCTAssertEqual(clicked, [point])
XCTAssertFalse(settled)
XCTAssertEqual(route, "synthetic:point")
}
@MainActor
func testExactActionableHitKeepsAccessibilityPath() async throws {
var pressed: [Element] = []
var settled = false
let route = try await CoordinateClickRouting.click(
point: CGPoint(x: 50, y: 60), preferAccessibility: true,
hitTest: { _ in Element.contentButton },
press: { pressed.append($0); return "press" },
settle: { settled = true },
syntheticClick: { _ in XCTFail("exact actionable hit needs no synthetic input") }
)
XCTAssertEqual(pressed, [.contentButton])
XCTAssertTrue(settled)
XCTAssertEqual(route, "ax:point:press")
}
@MainActor
func testNonLeftClickSkipsAccessibilityAndPropagatesSyntheticFailure() async {
enum Failure: Error { case refused }
do {
_ = try await CoordinateClickRouting.click(
point: .zero, preferAccessibility: false,
hitTest: { _ -> Element? in XCTFail("non-left button must skip AX"); return nil },
press: { _ in XCTFail("must not press"); return nil },
settle: { XCTFail("must not settle") },
syntheticClick: { _ in throw Failure.refused }
)
XCTFail("synthetic target guards must remain authoritative")
} catch {
XCTAssertTrue(error is Failure)
}
}
}