implemented Ticker page selection persistence and enhanced ProseMirror table display modes
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_layout_grid/flutter_layout_grid.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:marianum_mobile/widget/prosemirror/pm_document_view.dart';
|
||||
import 'package:marianum_mobile/widget/prosemirror/pm_node.dart';
|
||||
import 'package:marianum_mobile/widget/prosemirror/pm_table_view.dart';
|
||||
|
||||
PmNode _tableDoc() {
|
||||
final raw = File(
|
||||
'test/widget/prosemirror/fixtures/table.json',
|
||||
).readAsStringSync();
|
||||
return PmNode.fromJson(jsonDecode(raw) as Map<String, dynamic>);
|
||||
}
|
||||
|
||||
Widget _host(PmNode doc) => MaterialApp(
|
||||
home: Scaffold(
|
||||
body: SingleChildScrollView(child: PmDocumentView(doc: doc)),
|
||||
),
|
||||
);
|
||||
|
||||
PmTableCell _textCell(String text) => PmTableCell(
|
||||
children: [
|
||||
PmParagraph(children: [PmText(text: text)]),
|
||||
],
|
||||
);
|
||||
|
||||
void main() {
|
||||
setUp(() => pmTableMode.value = PmTableMode.scroll);
|
||||
tearDown(() => pmTableMode.value = PmTableMode.scroll);
|
||||
|
||||
testWidgets('renders in every display mode without exception', (tester) async {
|
||||
await tester.pumpWidget(_host(_tableDoc()));
|
||||
|
||||
for (final mode in PmTableMode.values) {
|
||||
pmTableMode.value = mode;
|
||||
await tester.pumpAndSettle();
|
||||
expect(tester.takeException(), isNull, reason: 'mode $mode threw');
|
||||
}
|
||||
});
|
||||
|
||||
testWidgets('cells in a row share one height when wrapping', (tester) async {
|
||||
// One row, two cells: a short one and one long enough to wrap at the
|
||||
// constrained width. Both cell boxes must end up the same height.
|
||||
final doc = PmTable(
|
||||
children: [
|
||||
PmTableRow(
|
||||
children: [
|
||||
_textCell('kurz'),
|
||||
_textCell('ein deutlich laengerer Text der ganz sicher umbricht'),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
pmTableMode.value = PmTableMode.wrap;
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: Scaffold(
|
||||
body: Center(
|
||||
child: SizedBox(width: 200, child: PmDocumentView(doc: doc)),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
final boxes = find.descendant(
|
||||
of: find.byType(LayoutGrid),
|
||||
matching: find.byType(DecoratedBox),
|
||||
);
|
||||
expect(boxes, findsNWidgets(2));
|
||||
final first = tester.getSize(boxes.at(0)).height;
|
||||
final second = tester.getSize(boxes.at(1)).height;
|
||||
expect(first, greaterThan(0));
|
||||
expect(first, moreOrLessEquals(second, epsilon: 0.5));
|
||||
});
|
||||
|
||||
testWidgets('tapping a toolbar button switches the shared mode', (
|
||||
tester,
|
||||
) async {
|
||||
await tester.pumpWidget(_host(_tableDoc()));
|
||||
expect(pmTableMode.value, PmTableMode.scroll);
|
||||
|
||||
await tester.tap(find.byTooltip('Spalten umbrechen').first);
|
||||
await tester.pumpAndSettle();
|
||||
expect(pmTableMode.value, PmTableMode.wrap);
|
||||
|
||||
await tester.tap(find.byTooltip('Verkleinern (alles auf einen Blick)').first);
|
||||
await tester.pumpAndSettle();
|
||||
expect(pmTableMode.value, PmTableMode.zoom);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user