// Copyright (c) 2026 Storm Dragon // Authors: Storm Dragon, Angus Kola // SPDX-License-Identifier: GPL-3.0-or-later package atspi import ( "context" "testing" ) func TestDocumentRowsKeepNestedTablesAndRowsSeparate(t *testing.T) { node := func(path, role string, children ...ObjectID) TreeNode { n := testNode(path, path, children...) n.Snapshot.Role = role return n } cell := func(path, label string, row, column int, children ...ObjectID) TreeNode { n := node(path, "table cell", children...) n.Snapshot.Name = label n.Snapshot.TablePositionKnown = true n.Snapshot.TableRowIndex, n.Snapshot.TableColumnIndex = row, column return n } tree, err := NewAccessibleTree(testID("/doc"), []TreeNode{ node("/doc", "document web", testID("/sheet")), node("/sheet", "document spreadsheet", testID("/outer")), node("/outer", "table", testID("/b"), testID("/a"), testID("/c")), cell("/b", "Two", 0, 1), cell("/a", "One", 0, 0, testID("/inner")), cell("/c", "Next", 1, 0), node("/inner", "table", testID("/i")), cell("/i", "Nested", 0, 0), }) if err != nil { t.Fatal(err) } root, err := tree.Root() if err != nil { t.Fatal(err) } document, err := tree.Document(context.Background(), root) if err != nil { t.Fatal(err) } wants := map[string]string{"/a": "One, Two", "/b": "One, Two", "/c": "Next", "/i": "Nested"} for _, item := range document.Nodes { if want, ok := wants[item.Snapshot.Path]; ok { if item.Snapshot.TableRowText != want || !item.Snapshot.Spreadsheet { t.Fatalf("row %s: %+v", item.Snapshot.Path, item.Snapshot) } } } }