genUiSemanticsDiff function
Describes how actual differs from expected, or null when it does not.
Written to be read in a failure message: one line per position, the expected node above the one that arrived.
Implementation
String? genUiSemanticsDiff(
List<GenUiSemanticNode> expected,
List<GenUiSemanticNode> actual,
) {
if (expected.length == actual.length &&
List<int>.generate(
expected.length,
(i) => i,
).every((i) => expected[i] == actual[i])) {
return null;
}
final out = StringBuffer();
for (var i = 0; i < expected.length || i < actual.length; i++) {
final GenUiSemanticNode? want = i < expected.length ? expected[i] : null;
final GenUiSemanticNode? got = i < actual.length ? actual[i] : null;
if (want == got) continue;
out
..writeln(' [$i] expected ${want ?? '(nothing)'}')
..writeln(' actual ${got ?? '(nothing)'}');
}
return out.toString();
}