mirror of
https://github.com/NanmiCoder/claude-code-haha.git
synced 2026-10-10 03:43:11 +08:00
8336cd8cc9
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.
51 lines
2.4 KiB
Swift
51 lines
2.4 KiB
Swift
import XCTest
|
|
@testable import cc_haha_computer_use
|
|
|
|
@MainActor
|
|
final class RendererAttributeReuseTests: XCTestCase {
|
|
func testKnownFingerprintScalarsAndSuccessfulSettableAvoidBackendRepeats() {
|
|
var reads = 0
|
|
func read(_ value: String) -> String { reads += 1; return value }
|
|
let observation = RendererAttributeReuse(
|
|
title: read("Title"), description: read("Description"), role: read("AXButton")
|
|
)
|
|
XCTAssertEqual(observation.title { read("Title") }, "Title")
|
|
XCTAssertEqual(observation.description { read("Description") }, "Description")
|
|
XCTAssertEqual(observation.role { read("AXButton") }, "AXButton")
|
|
for _ in 0..<2 {
|
|
XCTAssertEqual(observation.settable { reads += 1; return false }, false)
|
|
}
|
|
XCTAssertEqual(reads, 4, "three fingerprint reads plus one settable query, instead of eight")
|
|
}
|
|
|
|
func testMissingScalarsRetryAndCacheOnlyLaterSuccess() {
|
|
let observation = RendererAttributeReuse(title: nil, description: nil, role: nil)
|
|
var reads = 0
|
|
for get in [observation.title, observation.description, observation.role] {
|
|
XCTAssertNil(get { reads += 1; return nil })
|
|
XCTAssertEqual(get { reads += 1; return "recovered" }, "recovered")
|
|
XCTAssertEqual(get { reads += 1; return "changed" }, "recovered")
|
|
}
|
|
XCTAssertEqual(reads, 6)
|
|
}
|
|
|
|
func testSettableFailureRetriesButSuccessfulFalseDoesNot() {
|
|
let observation = RendererAttributeReuse(title: nil, description: nil, role: nil)
|
|
var reads = 0
|
|
XCTAssertNil(observation.settable { reads += 1; return nil })
|
|
XCTAssertEqual(observation.settable { reads += 1; return false }, false)
|
|
XCTAssertEqual(observation.settable { reads += 1; return true }, false)
|
|
XCTAssertEqual(reads, 2)
|
|
}
|
|
|
|
func testSeparateNodesAndRenderPassesNeverShareObservations() {
|
|
let first = RendererAttributeReuse(title: "Same", description: nil, role: "AXButton")
|
|
let duplicate = RendererAttributeReuse(title: "Same", description: nil, role: "AXButton")
|
|
XCTAssertEqual(first.settable { true }, true)
|
|
XCTAssertEqual(duplicate.settable { false }, false)
|
|
let nextPass = RendererAttributeReuse(title: "Changed", description: nil, role: "AXButton")
|
|
XCTAssertEqual(nextPass.title { "wrong" }, "Changed")
|
|
XCTAssertEqual(nextPass.settable { false }, false)
|
|
}
|
|
}
|