Skip to content

Commit 113123e

Browse files
committed
[red] Preserve literal tabs in rich editor
Signed-off-by: Viwat Vchirawongkwin <viwat.v@chula.ac.th>
1 parent 3618ac1 commit 113123e

1 file changed

Lines changed: 72 additions & 0 deletions

File tree

‎app/test/widget/editor_view_test.dart‎

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,43 @@ void main() {
9797
);
9898
});
9999

100+
testWidgets('opening, zooming, and editing preserve literal tab bytes', (
101+
WidgetTester tester,
102+
) async {
103+
final FakeConnection fake = FakeConnection(initial: ConnState.ready);
104+
addTearDown(fake.dispose);
105+
await pumpSurface(tester, const EditorView(), connection: fake);
106+
const String source = 'if True:\n\tprint(1)\n';
107+
containerOf(tester)
108+
.read(editorDocumentProvider.notifier)
109+
.openFromBoard(path: '/main.py', content: source);
110+
await tester.pump();
111+
112+
EditableText editable = tester.widget<EditableText>(
113+
find.byType(EditableText),
114+
);
115+
expect(editable.controller.text, source);
116+
117+
await tester.tap(find.byKey(kEditorIncreaseFontSizeButtonKey));
118+
await tester.pump();
119+
editable = tester.widget<EditableText>(find.byType(EditableText));
120+
expect(editable.controller.text, source);
121+
122+
editable.controller.value = const TextEditingValue(
123+
text: '${source}# unrelated edit\n',
124+
selection: TextSelection.collapsed(
125+
offset: '${source}# unrelated edit\n'.length,
126+
),
127+
);
128+
await tester.pump();
129+
130+
expect(
131+
containerOf(tester).read(editorDocumentProvider).content,
132+
'${source}# unrelated edit\n',
133+
reason: 'valid tab indentation is source data, never display state',
134+
);
135+
});
136+
100137
testWidgets('font buttons are localized and disable at their bounds', (
101138
WidgetTester tester,
102139
) async {
@@ -141,6 +178,41 @@ void main() {
141178
);
142179
});
143180

181+
testWidgets('maximum zoom composes with 2x accessibility text scaling', (
182+
WidgetTester tester,
183+
) async {
184+
final FakeConnection fake = FakeConnection(initial: ConnState.ready);
185+
addTearDown(fake.dispose);
186+
await pumpSurface(
187+
tester,
188+
const MediaQuery(
189+
data: MediaQueryData(textScaler: TextScaler.linear(2)),
190+
child: EditorView(),
191+
),
192+
connection: fake,
193+
);
194+
containerOf(tester)
195+
.read(editorDisplaySettingsProvider.notifier)
196+
.setFontSize(kEditorMaxFontSize);
197+
containerOf(tester)
198+
.read(editorDocumentProvider.notifier)
199+
.openFromBoard(
200+
path: '/main.py',
201+
content: List<String>.generate(
202+
120,
203+
(int index) => 'value_${index + 1} = ${index + 1}',
204+
).join('\n'),
205+
);
206+
await tester.pump();
207+
208+
expect(
209+
tester.widget<EditableText>(find.byType(EditableText)).style.fontSize,
210+
kEditorMaxFontSize,
211+
);
212+
expect(find.text('120'), findsOneWidget);
213+
expect(tester.takeException(), isNull);
214+
});
215+
144216
testWidgets('compact editor exposes font sizing without overflowing', (
145217
WidgetTester tester,
146218
) async {

0 commit comments

Comments
 (0)