diff --git a/lib/src/extensions/node_extensions.dart b/lib/src/extensions/node_extensions.dart index f7e1ac2a5..8955735de 100644 --- a/lib/src/extensions/node_extensions.dart +++ b/lib/src/extensions/node_extensions.dart @@ -173,7 +173,7 @@ extension NodesExtensions on List { for (var i = 0; i < nodes.length; i++) { final node = nodes[i]; var delta = node.delta; - if (delta == null) { + if (delta == null || delta.isEmpty) { continue; } diff --git a/test/new/extensions/node_extension_test.dart b/test/new/extensions/node_extension_test.dart index 6dbb00960..0865cb83c 100644 --- a/test/new/extensions/node_extension_test.dart +++ b/test/new/extensions/node_extension_test.dart @@ -193,5 +193,43 @@ void main() async { }); expect(result, false); }); + + test('2 non-empty nodes with 1 empty node', () { + final document = Document.blank() + ..addParagraph( + builder: (index) => Delta() + ..insert( + 'Hello', + attributes: {AppFlowyRichTextKeys.bold: true}, + ), + ) + ..addParagraph( + builder: (index) => Delta(), + ) + ..addParagraph( + builder: (index) => Delta() + ..insert( + 'World', + attributes: { + AppFlowyRichTextKeys.bold: true, + }, + ), + ); + final editorState = EditorState(document: document); + final selection = Selection( + start: Position(path: [0], offset: 0), + end: Position(path: [2], offset: 5), + ); + final nodes = editorState.getNodesInSelection(selection); + final isHighlight = nodes.allSatisfyInSelection( + selection, + (delta) => + delta.isNotEmpty && + delta.everyAttributes( + (attr) => attr[AppFlowyRichTextKeys.bold] == true, + ), + ); + expect(isHighlight, true); + }); }); }