appflowy-editor/test/editor_state_test.dart
Lucas f882d958d9
feat: integrate awesome_lints and upgrade to Flutter 3.38 (#1173)
* chore: update Flutter SDK to version 3.38.5

Upgrade Flutter from 3.32.4 to 3.38.5 to meet awesome_lints
requirement for Dart SDK 3.10.0+. Update CI workflow to use
the new Flutter version and add custom_lint verification step.

* chore: integrate awesome_lints with custom lint rules

Add awesome_lints and custom_lint dependencies, configure
analysis_options.yaml to enable newline lint rules: newline_before_case,
newline_before_constructor, newline_before_method, and newline_before_return.

* style: apply newline formatting per awesome_lints rules

Add blank lines before case clauses, return statements, method
declarations, and constructors throughout the codebase to comply
with awesome_lints newline rules.

* fix: replace deprecated translate with leftTranslateByDouble

Update Matrix4.translate() calls to use the new leftTranslateByDouble()
API to resolve deprecation warnings in Flutter SDK 3.38.5.

* chore: improve code readability with blank line formatting
2025-12-23 15:12:57 +08:00

50 lines
1.5 KiB
Dart

import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:flutter_test/flutter_test.dart';
void main() async {
group('editor state', () {
test('broadcast the transaction', () async {
final editorState = EditorState.blank(
withInitialText: false,
);
int count = 0;
editorState.transactionStream.listen((event) {
count++;
final time = event.$1;
switch (time) {
case TransactionTime.before:
expect(editorState.getNodeAtPath([0]), null);
break;
case TransactionTime.after:
expect(
editorState.getNodeAtPath([0])!.type,
ParagraphBlockKeys.type,
);
break;
}
});
final transaction = editorState.transaction;
transaction.insertNode([0], paragraphNode(text: 'Hello World!'));
await editorState.apply(transaction);
expect(count, 2);
});
test('transaction stream', () async {
final editorState = EditorState.blank(
withInitialText: false,
);
var isInMemoryUpdate = false;
editorState.transactionStream.listen((event) {
isInMemoryUpdate = event.$3.inMemoryUpdate;
});
final transaction = editorState.transaction;
transaction.insertNode([0], paragraphNode(text: 'Hello World!'));
await editorState.apply(
transaction,
options: const ApplyOptions(inMemoryUpdate: true),
);
expect(isInMemoryUpdate, true);
});
});
}