Merge pull request #949 from LucasXu0/fix/948

test: add more test cases to toolbar_service
This commit is contained in:
Nathan.fooo 2022-08-31 14:58:56 +08:00 committed by GitHub
commit 462a0e4c01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 81 additions and 9 deletions

View File

@ -162,23 +162,34 @@ extension TextNodesExtension on List<TextNode> {
final node = this[i]; final node = this[i];
final Selection newSelection; final Selection newSelection;
if (i == 0 && pathEquals(node.path, selection.start.path)) { if (i == 0 && pathEquals(node.path, selection.start.path)) {
if (selection.isBackward) {
newSelection = selection.copyWith( newSelection = selection.copyWith(
end: Position(path: node.path, offset: node.toRawString().length), end: Position(path: node.path, offset: node.toRawString().length),
); );
} else {
newSelection = selection.copyWith(
end: Position(path: node.path, offset: 0),
);
}
} else if (i == length - 1 && } else if (i == length - 1 &&
pathEquals(node.path, selection.end.path)) { pathEquals(node.path, selection.end.path)) {
if (selection.isBackward) {
newSelection = selection.copyWith( newSelection = selection.copyWith(
start: Position(path: node.path, offset: 0), start: Position(path: node.path, offset: 0),
); );
} else {
newSelection = selection.copyWith(
start:
Position(path: node.path, offset: node.toRawString().length),
);
}
} else { } else {
newSelection = Selection( newSelection = Selection(
start: Position(path: node.path, offset: 0), start: Position(path: node.path, offset: 0),
end: Position(path: node.path, offset: node.toRawString().length), end: Position(path: node.path, offset: node.toRawString().length),
); );
} }
if (!node.allSatisfyInSelection(newSelection, styleKey, (value) { if (!node.allSatisfyInSelection(newSelection, styleKey, test)) {
return test(value);
})) {
return false; return false;
} }
} }

View File

@ -154,6 +154,67 @@ void main() async {
itemWidget = _itemWidgetForId(tester, 'appflowy.toolbar.bulleted_list'); itemWidget = _itemWidgetForId(tester, 'appflowy.toolbar.bulleted_list');
expect(itemWidget.isHighlight, true); expect(itemWidget.isHighlight, true);
}); });
testWidgets('Test toolbar service in multi text selection', (tester) async {
const text = 'Welcome to Appflowy 😁';
/// [h1][bold] Welcome to Appflowy 😁
/// [EmptyLine]
/// Welcome to Appflowy 😁
final editor = tester.editor
..insertTextNode(
null,
attributes: {
StyleKey.subtype: StyleKey.heading,
StyleKey.heading: StyleKey.h1,
},
delta: Delta([
TextInsert(text, {
StyleKey.bold: true,
})
]),
)
..insertTextNode(null)
..insertTextNode(text);
await editor.startTesting();
await editor.updateSelection(
Selection.single(path: [2], startOffset: text.length, endOffset: 0),
);
expect(find.byType(ToolbarWidget), findsOneWidget);
expect(
_itemWidgetForId(tester, 'appflowy.toolbar.h1').isHighlight,
false,
);
expect(
_itemWidgetForId(tester, 'appflowy.toolbar.bold').isHighlight,
false,
);
await editor.updateSelection(
Selection(
start: Position(path: [2], offset: text.length),
end: Position(path: [1], offset: 0),
),
);
expect(find.byType(ToolbarWidget), findsOneWidget);
expect(
_itemWidgetForId(tester, 'appflowy.toolbar.bold').isHighlight,
false,
);
await editor.updateSelection(
Selection(
start: Position(path: [2], offset: text.length),
end: Position(path: [0], offset: 0),
),
);
expect(find.byType(ToolbarWidget), findsOneWidget);
expect(
_itemWidgetForId(tester, 'appflowy.toolbar.bold').isHighlight,
false,
);
});
}); });
} }