← All repositories

listless

A simple list app for Apple platforms

git clone https://code.inqk.net/listless.git


commit 55ee1373530f1bdcb08649d139d37e17fed37e7a
parent 3260eac5182505530cdfebba420c572da70c6071
Author: Michael Camilleri <[email protected]>
Date:   Sat, 14 Mar 2026 18:37:38 +0900

Use stable identifiers for accessibility identifiers on macOS

Diffstat

MListlessMac/Views/TaskRowView.swift | 2+-
MTests/UI/ListlessMacUITests.swift | 14+++++++-------

2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/ListlessMac/Views/TaskRowView.swift b/ListlessMac/Views/TaskRowView.swift

@@ -99,7 +99,7 @@ struct TaskRowView: View {
             .focused($focusedField, equals: .task(taskID))
             .frame(maxWidth: .infinity, alignment: .leading)
             .accessibilityIdentifier(
-                isCurrentlyEditing ? "task-textfield" : "task-text-\(task.title)")
+                isCurrentlyEditing ? "task-textfield" : "task-text-\(taskID.uuidString)")
         }
         .padding(.top, 4)
         .padding(.vertical, 8)

diff --git a/Tests/UI/ListlessMacUITests.swift b/Tests/UI/ListlessMacUITests.swift

@@ -27,9 +27,10 @@ final class ListlessMacUITests: XCTestCase {
     }
 
     /// Returns the text field for a committed task with the given title.
-    /// Committed tasks expose as TextField with identifier "task-text-\(title)".
     func taskText(_ title: String) -> XCUIElement {
-        app.textFields["task-text-\(title)"]
+        app.textFields.matching(
+            NSPredicate(format: "identifier BEGINSWITH 'task-text-' AND value == %@", title)
+        ).firstMatch
     }
 
     /// Creates a task by typing into the draft field and pressing Return.
@@ -187,9 +188,8 @@ final class ListlessMacUITests: XCTestCase {
         navigateToTask(at: 1)
         app.typeKey(.upArrow, modifierFlags: .command)
 
-        // Use firstMatch to avoid ambiguity if draft row duplicates an identifier
-        let bravo = app.textFields.matching(identifier: "task-text-Bravo").firstMatch
-        let alpha = app.textFields.matching(identifier: "task-text-Alpha").firstMatch
+        let bravo = taskText("Bravo")
+        let alpha = taskText("Alpha")
         XCTAssertTrue(bravo.waitForExistence(timeout: 2))
         XCTAssertTrue(alpha.exists)
         XCTAssertLessThan(
@@ -204,8 +204,8 @@ final class ListlessMacUITests: XCTestCase {
         navigateToTask(at: 0)
         app.typeKey(.downArrow, modifierFlags: .command)
 
-        let alpha = app.textFields.matching(identifier: "task-text-Alpha").firstMatch
-        let bravo = app.textFields.matching(identifier: "task-text-Bravo").firstMatch
+        let alpha = taskText("Alpha")
+        let bravo = taskText("Bravo")
         XCTAssertTrue(alpha.waitForExistence(timeout: 2))
         XCTAssertTrue(bravo.exists)
         XCTAssertGreaterThan(