mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
27dd719aa8
* chore: create orphan view handler * feat: save icon url and cover url in view * feat: implement emoji picker UI * chore: config ui * chore: config ui again * chore: replace RowPB with RowMetaPB to exposing more row information * fix: compile error * feat: show emoji in row * chore: update * test: insert emoji test * test: add update emoji test * test: add remove emoji test * test: add create field tests * test: add create row and delete row integration tests * test: add create row from row menu * test: document in row detail page * test: delete, duplicate row in row detail page * test: check the row count displayed in grid page * test: rename existing field in grid page * test: update field type of exisiting field in grid page * test: delete field test * test: add duplicate field test * test: add hide field test * test: add edit text cell test * test: add insert text to text cell test * test: add edit number cell test * test: add edit multiple number cells * test: add edit checkbox cell test * feat: integrate editor into database row * test: add edit create time and last edit time cell test * test: add edit date cell by selecting a date test * chore: remove unused code * chore: update checklist bg color * test: add update database layout test --------- Co-authored-by: Lucas.Xu <lucas.xu@appflowy.io>
55 lines
1.5 KiB
Dart
55 lines
1.5 KiB
Dart
import 'package:appflowy_editor/appflowy_editor.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
extension IME on WidgetTester {
|
|
IMESimulator get ime => IMESimulator(this);
|
|
}
|
|
|
|
class IMESimulator {
|
|
IMESimulator(this.tester) {
|
|
client = findDeltaTextInputClient();
|
|
}
|
|
|
|
final WidgetTester tester;
|
|
late final DeltaTextInputClient client;
|
|
|
|
Future<void> insertText(String text) async {
|
|
for (final c in text.characters) {
|
|
await insertCharacter(c);
|
|
}
|
|
}
|
|
|
|
Future<void> insertCharacter(String character) async {
|
|
final value = client.currentTextEditingValue;
|
|
if (value == null) {
|
|
assert(false);
|
|
return;
|
|
}
|
|
final deltas = [
|
|
TextEditingDeltaInsertion(
|
|
textInserted: character,
|
|
oldText: value.text.replaceRange(
|
|
value.selection.start,
|
|
value.selection.end,
|
|
'',
|
|
),
|
|
insertionOffset: value.selection.baseOffset,
|
|
selection: TextSelection.collapsed(
|
|
offset: value.selection.baseOffset + 1,
|
|
),
|
|
composing: TextRange.empty,
|
|
),
|
|
];
|
|
client.updateEditingValueWithDeltas(deltas);
|
|
await tester.pumpAndSettle();
|
|
}
|
|
|
|
DeltaTextInputClient findDeltaTextInputClient() {
|
|
final finder = find.byType(KeyboardServiceWidget);
|
|
final KeyboardServiceWidgetState state = tester.state(finder);
|
|
return state.textInputService as DeltaTextInputClient;
|
|
}
|
|
}
|