import XCTest final class ReaderAnnotationTests: XCTestCase { private let app = XCUIApplication() override func setUpWithError() throws { continueAfterFailure = false } func testSelectionMenuCreatesHighlight() throws { app.launchAndOpenSampleBook() app.waitForReader() app.hideReaderChromeIfNeeded() let content = try app.requireSelectionText() app.waitForDemoReaderState(timeout: 5, description: "toolbar=hidden") { $0.toolbar == "hidden" } let start = content.coordinate(withNormalizedOffset: CGVector(dx: 0.2, dy: 0.5)) let end = content.coordinate(withNormalizedOffset: CGVector(dx: 0.8, dy: 0.5)) start.press(forDuration: 0.8, thenDragTo: end) app.waitForDemoReaderState(timeout: 5, description: "selection=1") { $0.selection == 1 } let highlightMenuItem = app.menuItems["高亮"] let highlightButton = app.buttons[IDs.readerSelectionHighlight] if highlightMenuItem.waitForExistence(timeout: 3) { highlightMenuItem.tap() } else if highlightButton.waitForExistence(timeout: 3) { highlightButton.tap() } else { XCTFail("选中文本后未出现高亮菜单") } app.waitForDemoReaderState(timeout: 8, description: "highlights=1") { $0.highlights == 1 } } func testLongPressSelectionDoesNotShowToolbars() throws { app.launchAndOpenSampleBook() app.waitForReader() app.hideReaderChromeIfNeeded() let content = try app.requireSelectionText() app.waitForDemoReaderState(timeout: 5, description: "toolbar=hidden") { $0.toolbar == "hidden" } let start = content.coordinate(withNormalizedOffset: CGVector(dx: 0.2, dy: 0.5)) let end = content.coordinate(withNormalizedOffset: CGVector(dx: 0.8, dy: 0.5)) start.press(forDuration: 0.8, thenDragTo: end) app.waitForDemoReaderState(timeout: 8, description: "selection=1") { $0.selection == 1 } app.waitForDemoReaderState(timeout: 3, description: "toolbar=hidden") { $0.toolbar == "hidden" } } func testSelectionMenuAnnotateCreatesHighlight() throws { app.launchAndOpenSampleBook() app.waitForReader() app.hideReaderChromeIfNeeded() let content = try app.requireSelectionText() let start = content.coordinate(withNormalizedOffset: CGVector(dx: 0.25, dy: 0.5)) let end = content.coordinate(withNormalizedOffset: CGVector(dx: 0.7, dy: 0.5)) start.press(forDuration: 0.8, thenDragTo: end) app.waitForDemoReaderState(timeout: 5, description: "selection=1") { $0.selection == 1 } let annotateMenuItem = app.menuItems["批注"] XCTAssertTrue(annotateMenuItem.waitForExistence(timeout: 3), "选中文本后未出现批注菜单") annotateMenuItem.tap() app.waitForDemoReaderState(timeout: 8, description: "highlights=1 after annotate") { $0.highlights == 1 } } }