EchoUITests/ScanAndDrawUITests.swift
Rama main · réplica de lectura del repositorio original.
import XCTest
/// Add → Drawing, with no server: the menu offers it, a stroke drawn with a finger enables Done,
/// and Done leaves the drawing in the strip above the field. (Add → Scan Document needs a real
/// camera: the simulator has none, so the menu leaves it out there.) With `TEST_RUNNER_SHOT_DIR`
/// set, the menu and the canvas are also saved there as pictures.
@MainActor
final class ScanAndDrawUITests: XCTestCase {
private func launch() -> XCUIApplication {
let app = XCUIApplication()
app.launchArguments = XCUIApplication.straightToChat + XCUIApplication.chatsSection
+ ["-transport", "chatCompletions", "-fastLaneURL", "http://127.0.0.1:9", "-fastLaneModel", "test", "-echo.clearDrafts"]
app.launch()
return app
}
private func save(_ name: String) {
let shot = XCUIScreen.main.screenshot()
let keep = XCTAttachment(screenshot: shot)
keep.name = name
keep.lifetime = .keepAlways
add(keep)
guard let dir = ProcessInfo.processInfo.environment["SHOT_DIR"] else { return }
try? shot.pngRepresentation.write(to: URL(fileURLWithPath: dir).appending(path: name + ".png"))
}
func testADrawingIsAttached() {
let app = launch()
let tag = ProcessInfo.processInfo.environment["SHOT_TAG"] ?? "light"
let add = app.buttons["Add"]
XCTAssertTrue(add.waitForExistence(timeout: 20), "No Add button")
add.tap()
let drawing = app.buttons["Drawing"]
XCTAssertTrue(drawing.waitForExistence(timeout: 5), "No Drawing in the Add menu")
save("add-menu-\(tag)")
drawing.tap()
let done = app.buttons["Done"]
XCTAssertTrue(done.waitForExistence(timeout: 5), "The drawing didn't open")
XCTAssertFalse(done.isEnabled, "Done before anything was drawn")
let window = app.windows.firstMatch
let strokes: [((CGFloat, CGFloat), (CGFloat, CGFloat))] = [((0.25, 0.30), (0.75, 0.32)), ((0.30, 0.45), (0.70, 0.55)),
((0.50, 0.25), (0.48, 0.60))]
for (from, to) in strokes {
window.coordinate(withNormalizedOffset: CGVector(dx: from.0, dy: from.1))
.press(forDuration: 0.05, thenDragTo: window.coordinate(withNormalizedOffset: CGVector(dx: to.0, dy: to.1)))
}
XCTAssertTrue(done.isEnabled, "Done stayed off after drawing")
save("drawing-canvas-\(tag)")
done.tap()
let tile = app.buttons.matching(NSPredicate(format: "label BEGINSWITH %@", "Remove Drawing")).firstMatch
XCTAssertTrue(tile.waitForExistence(timeout: 5), "No drawing in the strip")
save("drawing-attached-\(tag)")
}
}