fix: restore demo build and drawing interactions

This commit is contained in:
shen
2026-07-15 21:13:05 +08:00
parent 1422461224
commit 52f803e8db
24 changed files with 3468 additions and 2341 deletions
@@ -66,7 +66,7 @@ final class PDFAnnotationTests: XCTestCase {
// reset
app.terminate()
app.launchAndOpenSamplePDF(
bookTitleQuery: "PDF测试文件",
bookTitleQuery: "英汉大词典",
resetsReaderState: false,
pdfTextSource: "host-fixture"
)
@@ -156,7 +156,7 @@ final class PDFAnnotationTests: XCTestCase {
@discardableResult
private func openPDF(textSource: String) -> XCUIElement {
app.launchAndOpenSamplePDF(
bookTitleQuery: "PDF测试文件",
bookTitleQuery: "英汉大词典",
resetsReaderState: true,
pdfTextSource: textSource
)
@@ -0,0 +1,88 @@
import XCTest
///
///
final class PDFDrawingModeTests: XCTestCase {
private let app = XCUIApplication()
override func setUpWithError() throws {
continueAfterFailure = false
XCUIDevice.shared.orientation = .portrait
}
override func tearDownWithError() throws {
XCUIDevice.shared.orientation = .portrait
}
func testLandscapeSinglePageScrollsOnlyWhenDrawingToolIsDeselected() {
app.launchAndOpenSampleBook(bookTitleQuery: "英汉大词典", displayType: "pagecurl")
app.waitForReader()
XCUIDevice.shared.orientation = .landscapeLeft
let content = app.otherElements[IDs.readerContent].firstMatch
XCTAssertTrue(content.waitForExistence(timeout: 8), "PDF 横屏阅读页面未出现")
XCTAssertTrue(waitForLandscapeLayout(), "PDF 未进入横屏单页布局")
app.showReaderChromeIfNeeded(requiredButtonIDs: [IDs.pdfDrawing])
let drawing = app.buttons[IDs.pdfDrawing]
XCTAssertTrue(drawing.waitForExistence(timeout: 5), "画笔入口未出现")
drawing.tap()
let pen = app.buttons[IDs.pdfDrawingPen]
let eraser = app.buttons[IDs.pdfDrawingEraser]
XCTAssertTrue(pen.waitForExistence(timeout: 5), "画笔工具未出现")
XCTAssertTrue(eraser.exists, "橡皮擦工具未出现")
let firstScrollablePage = app.currentDemoReaderState()?.page
XCTAssertNotNil(firstScrollablePage, "未取得初始 PDF 页码")
guard let firstScrollablePage else { return }
XCTAssertTrue(
scrollToAnotherPage(content, from: firstScrollablePage),
"未选中工具时,手机横屏单页无法连续竖滑"
)
let lockedPage = app.currentDemoReaderState()?.page
XCTAssertNotNil(lockedPage, "滚动后未取得 PDF 页码")
guard let lockedPage else { return }
pen.tap()
assertPageRemains(lockedPage, afterSwiping: content, message: "选中画笔后仍触发了页面滚动")
eraser.tap()
assertPageRemains(lockedPage, afterSwiping: content, message: "切换至橡皮擦后仍触发了页面滚动")
eraser.tap()
XCTAssertTrue(
scrollToAnotherPage(content, from: lockedPage),
"取消橡皮擦选中后,手机横屏单页没有恢复连续竖滑"
)
}
private func waitForLandscapeLayout() -> Bool {
let deadline = Date().addingTimeInterval(8)
while Date() < deadline {
let frame = app.windows.firstMatch.frame
if frame.width > frame.height { return true }
RunLoop.current.run(until: Date().addingTimeInterval(0.1))
}
return false
}
private func scrollToAnotherPage(_ content: XCUIElement, from page: Int) -> Bool {
for _ in 0..<5 {
content.swipeUp()
let deadline = Date().addingTimeInterval(1.5)
while Date() < deadline {
if let current = app.currentDemoReaderState()?.page, current != page { return true }
RunLoop.current.run(until: Date().addingTimeInterval(0.1))
}
}
return false
}
private func assertPageRemains(_ page: Int, afterSwiping content: XCUIElement, message: String) {
for _ in 0..<3 { content.swipeUp() }
RunLoop.current.run(until: Date().addingTimeInterval(0.8))
XCTAssertEqual(app.currentDemoReaderState()?.page, page, message)
}
}
@@ -30,7 +30,6 @@ final class ReaderToolbarTests: XCTestCase {
app.hideReaderChromeIfNeeded()
XCTAssertFalse(app.buttons[IDs.readerBack].waitForExistence(timeout: 2), "PDF 点击内容区后工具栏应隐藏")
app.waitForDemoReaderState(timeout: 5, description: "toolbar=hidden") { $0.toolbar == "hidden" }
}
func testPDFTocButtonOpensNavigationSheet() {
@@ -71,7 +70,7 @@ final class ReaderToolbarTests: XCTestCase {
}
func testPDFLaunchHonorsDisplayTypeArgument() {
app.launchAndOpenSampleBook(bookTitleQuery: "PDF测试文件", displayType: "verticalscroll")
app.launchAndOpenSampleBook(bookTitleQuery: "英汉大词典", displayType: "verticalscroll")
app.waitForReader()
app.waitForDemoReaderState(timeout: 5, description: "PDF vertical launch mode") {
$0.mode == "pdf" && $0.display == "verticalscroll"
@@ -79,7 +78,7 @@ final class ReaderToolbarTests: XCTestCase {
}
func testPDFPageCurlSupportsPinchAndDraggingAfterDoubleTapZoom() {
app.launchAndOpenSamplePDF(bookTitleQuery: "PDF测试文件")
app.launchAndOpenSamplePDF(bookTitleQuery: "英汉大词典")
app.waitForReader()
app.waitForDemoReaderState(timeout: 5, description: "PDF page curl") {
$0.mode == "pdf" && $0.display == "pagecurl"
@@ -114,7 +113,7 @@ final class ReaderToolbarTests: XCTestCase {
}
func testPDFPageCurlSingleFingerTurnsPageAtFittedScale() {
app.launchAndOpenSamplePDF(bookTitleQuery: "PDF测试文件")
app.launchAndOpenSamplePDF(bookTitleQuery: "英汉大词典")
app.waitForReader()
app.waitForDemoReaderState(timeout: 5, description: "PDF page curl at page 1") {
$0.mode == "pdf" && $0.display == "pagecurl" && $0.page == 1
@@ -131,7 +130,7 @@ final class ReaderToolbarTests: XCTestCase {
}
func testPDFSwitchingFromZoomedCurlKeepsScrollModeInteractive() {
app.launchAndOpenSamplePDF(bookTitleQuery: "PDF测试文件")
app.launchAndOpenSamplePDF(bookTitleQuery: "英汉大词典")
app.waitForReader()
app.waitForDemoReaderState(timeout: 5, description: "PDF page curl at page 1") {
$0.mode == "pdf" && $0.display == "pagecurl" && $0.page == 1