Skip to content

Commit ad2d111

Browse files
committed
Sort tree nodes in order of failed/passed/pending
1 parent e988843 commit ad2d111

File tree

1 file changed

+52
-5
lines changed

1 file changed

+52
-5
lines changed

lua/clojure-test/ui/report-tree.lua

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ local function assertion_to_node(test, assertion)
7474
return node
7575
end
7676

77-
local function report_to_node(report)
77+
local function report_to_node(report, is_expanded)
7878
local report_line = report_to_line(report)
7979

8080
local children = {}
@@ -85,19 +85,66 @@ local function report_to_node(report)
8585
local node = NuiTree.Node({
8686
line = report_line,
8787
test = report.test,
88+
report = report,
8889
}, children)
8990

90-
if report.status == "failed" then
91+
if report.status == "failed" or is_expanded then
9192
node:expand()
9293
end
9394
return node
9495
end
9596

96-
local function reports_to_nodes(reports)
97+
local function reports_to_nodes(reports, prev_nodes)
98+
local prev_nodes_by_test = {}
99+
for _, node in ipairs(prev_nodes) do
100+
prev_nodes_by_test[node.test] = node
101+
end
102+
97103
local nodes = {}
98104
for _, report in pairs(reports) do
99-
table.insert(nodes, report_to_node(report))
105+
local prev_node = prev_nodes_by_test[report.test]
106+
local is_expanded = prev_node and prev_node:is_expanded()
107+
table.insert(nodes, report_to_node(report, is_expanded))
108+
end
109+
110+
local curr_map = {}
111+
for _, node in ipairs(nodes) do
112+
curr_map[node.test] = node
100113
end
114+
115+
local moved = { failed = {}, passed = {}, pending = {} }
116+
local grouped = { failed = {}, passed = {}, pending = {} }
117+
118+
for _, prev in ipairs(prev_nodes) do
119+
local current = curr_map[prev.test]
120+
if current then
121+
local prev_status = prev.report.status
122+
local curr_status = current.report.status
123+
if prev_status == curr_status then
124+
table.insert(grouped[curr_status], current)
125+
elseif prev_status == "pending" and (curr_status == "failed" or curr_status == "passed") then
126+
table.insert(moved[curr_status], current)
127+
else
128+
table.insert(grouped[curr_status], current)
129+
end
130+
curr_map[prev.test] = nil
131+
end
132+
end
133+
134+
for _, node in pairs(curr_map) do
135+
table.insert(grouped[node.report.status], node)
136+
end
137+
138+
nodes = {}
139+
for _, status in ipairs({ "failed", "passed", "pending" }) do
140+
for _, n in ipairs(grouped[status]) do
141+
table.insert(nodes, n)
142+
end
143+
for _, n in ipairs(moved[status]) do
144+
table.insert(nodes, n)
145+
end
146+
end
147+
101148
return nodes
102149
end
103150

@@ -195,7 +242,7 @@ function M.create(window, on_event)
195242
end, {})
196243

197244
function ReportTree:render_reports(reports)
198-
tree:set_nodes(reports_to_nodes(reports))
245+
tree:set_nodes(reports_to_nodes(reports, tree:get_nodes()))
199246
tree:render()
200247
end
201248

0 commit comments

Comments
 (0)