diff --git a/lib/markdown_text_input.dart b/lib/markdown_text_input.dart index 9db72ea..51391cf 100644 --- a/lib/markdown_text_input.dart +++ b/lib/markdown_text_input.dart @@ -157,6 +157,7 @@ class _MarkdownTextInputState extends State { ), ExpandableNotifier( child: Expandable( + key: Key('H#_button'), collapsed: ExpandableButton( child: const Center( child: Padding( diff --git a/test/markdown_text_input_test.dart b/test/markdown_text_input_test.dart index fcd6569..7e5a932 100644 --- a/test/markdown_text_input_test.dart +++ b/test/markdown_text_input_test.dart @@ -5,25 +5,43 @@ import 'package:markdown_editable_textinput/markdown_text_input.dart'; void main() { testWidgets('MarkdownTextInput has all buttons', (WidgetTester tester) async { - await tester.pumpWidget(MaterialApp(home: Scaffold(body: MarkdownTextInput(print, 'initial value')))); + await tester.pumpWidget(MaterialApp( + home: Scaffold(body: MarkdownTextInput(print, 'initial value')))); final boldKey = const Key('bold_button'); final italicKey = const Key('italic_button'); + final strikethroughKey = const Key('strikethrough_button'); + final hKey = const Key('H#_button'); final h1Key = const Key('H1_button'); final h2Key = const Key('H2_button'); final h3Key = const Key('H3_button'); + final h4Key = const Key('H4_button'); + final h5Key = const Key('H5_button'); + final h6Key = const Key('H6_button'); final linkKey = const Key('link_button'); final listKey = const Key('list_button'); + final quoteKey = const Key('quote_button'); + final separatorKey = const Key('separator_button'); + final imageKey = const Key('image_button'); expect(find.byKey(boldKey), findsOneWidget); expect(find.byKey(italicKey), findsOneWidget); + expect(find.byKey(strikethroughKey), findsOneWidget); + expect(find.byKey(hKey), findsOneWidget); expect(find.byKey(h1Key), findsOneWidget); expect(find.byKey(h2Key), findsOneWidget); expect(find.byKey(h3Key), findsOneWidget); + expect(find.byKey(h4Key), findsOneWidget); + expect(find.byKey(h5Key), findsOneWidget); + expect(find.byKey(h6Key), findsOneWidget); expect(find.byKey(linkKey), findsOneWidget); expect(find.byKey(listKey), findsOneWidget); + expect(find.byKey(quoteKey), findsOneWidget); + expect(find.byKey(separatorKey), findsOneWidget); + expect(find.byKey(imageKey), findsOneWidget); }); - testWidgets('MarkdownTextInput make bold from selection', (WidgetTester tester) async { + testWidgets('MarkdownTextInput make bold from selection', + (WidgetTester tester) async { var initialValue = 'initial value'; await tester.pumpWidget(MaterialApp( home: Scaffold( @@ -32,7 +50,8 @@ void main() { }, initialValue)))); final formfield = tester.widget(find.text(initialValue)); - formfield.controller.selection = TextSelection(baseOffset: 0, extentOffset: initialValue.length); + formfield.controller.selection = + TextSelection(baseOffset: 0, extentOffset: initialValue.length); final boldKey = const Key('bold_button'); await tester.tap(find.byKey(boldKey)); @@ -40,7 +59,8 @@ void main() { expect(initialValue, '**initial value**'); }); - testWidgets('MarkdownTextInput make italic from selection', (WidgetTester tester) async { + testWidgets('MarkdownTextInput make italic from selection', + (WidgetTester tester) async { var initialValue = 'initial value'; await tester.pumpWidget(MaterialApp( home: Scaffold( @@ -49,7 +69,8 @@ void main() { }, initialValue)))); final formfield = tester.widget(find.text(initialValue)); - formfield.controller.selection = TextSelection(baseOffset: 0, extentOffset: initialValue.length); + formfield.controller.selection = + TextSelection(baseOffset: 0, extentOffset: initialValue.length); final boldKey = const Key('italic_button'); await tester.tap(find.byKey(boldKey)); @@ -57,7 +78,8 @@ void main() { expect(initialValue, '_initial value_'); }); - testWidgets('MarkdownTextInput make H1 from selection', (WidgetTester tester) async { + testWidgets('MarkdownTextInput make strikethrough from selection', + (WidgetTester tester) async { var initialValue = 'initial value'; await tester.pumpWidget(MaterialApp( home: Scaffold( @@ -66,15 +88,17 @@ void main() { }, initialValue)))); final formfield = tester.widget(find.text(initialValue)); - formfield.controller.selection = TextSelection(baseOffset: 0, extentOffset: initialValue.length); + formfield.controller.selection = + TextSelection(baseOffset: 0, extentOffset: initialValue.length); - final boldKey = const Key('H1_button'); + final boldKey = const Key('strikethrough_button'); await tester.tap(find.byKey(boldKey)); - expect(initialValue, '# initial value'); + expect(initialValue, '~~initial value~~'); }); - testWidgets('MarkdownTextInput make H2 from selection', (WidgetTester tester) async { + testWidgets('MarkdownTextInput make code from selection', + (WidgetTester tester) async { var initialValue = 'initial value'; await tester.pumpWidget(MaterialApp( home: Scaffold( @@ -83,15 +107,17 @@ void main() { }, initialValue)))); final formfield = tester.widget(find.text(initialValue)); - formfield.controller.selection = TextSelection(baseOffset: 0, extentOffset: initialValue.length); + formfield.controller.selection = + TextSelection(baseOffset: 0, extentOffset: initialValue.length); - final boldKey = const Key('H2_button'); + final boldKey = const Key('code_button'); await tester.tap(find.byKey(boldKey)); - expect(initialValue, '## initial value'); + expect(initialValue, '```initial value```'); }); - testWidgets('MarkdownTextInput make H3 from selection', (WidgetTester tester) async { + testWidgets('MarkdownTextInput make link from selection', + (WidgetTester tester) async { var initialValue = 'initial value'; await tester.pumpWidget(MaterialApp( home: Scaffold( @@ -100,16 +126,18 @@ void main() { }, initialValue)))); final formfield = tester.widget(find.text(initialValue)); - formfield.controller.selection = TextSelection(baseOffset: 0, extentOffset: initialValue.length); + formfield.controller.selection = + TextSelection(baseOffset: 0, extentOffset: initialValue.length); - final boldKey = const Key('H3_button'); + final boldKey = const Key('link_button'); await tester.tap(find.byKey(boldKey)); - expect(initialValue, '### initial value'); + expect(initialValue, '[initial value](initial value)'); }); - testWidgets('MarkdownTextInput make link from selection', (WidgetTester tester) async { - var initialValue = 'initial value'; + testWidgets('MarkdownTextInput make list from selection', + (WidgetTester tester) async { + var initialValue = 'initial\nvalue'; await tester.pumpWidget(MaterialApp( home: Scaffold( body: MarkdownTextInput((String value) { @@ -117,15 +145,17 @@ void main() { }, initialValue)))); final formfield = tester.widget(find.text(initialValue)); - formfield.controller.selection = TextSelection(baseOffset: 0, extentOffset: initialValue.length); + formfield.controller.selection = + TextSelection(baseOffset: 0, extentOffset: initialValue.length); - final boldKey = const Key('link_button'); + final boldKey = const Key('list_button'); await tester.tap(find.byKey(boldKey)); - expect(initialValue, '[initial value](initial value)'); + expect(initialValue, '* initial\n* value'); }); - testWidgets('MarkdownTextInput make list from selection', (WidgetTester tester) async { + testWidgets('MarkdownTextInput make blockquote from selection', + (WidgetTester tester) async { var initialValue = 'initial\nvalue'; await tester.pumpWidget(MaterialApp( home: Scaffold( @@ -134,11 +164,50 @@ void main() { }, initialValue)))); final formfield = tester.widget(find.text(initialValue)); - formfield.controller.selection = TextSelection(baseOffset: 0, extentOffset: initialValue.length); + formfield.controller.selection = + TextSelection(baseOffset: 0, extentOffset: initialValue.length); - final boldKey = const Key('list_button'); + final boldKey = const Key('quote_button'); await tester.tap(find.byKey(boldKey)); - expect(initialValue, '* initial\n* value'); + expect(initialValue, '> initial\n> value'); + }); + + testWidgets('MarkdownTextInput make separator from selection', + (WidgetTester tester) async { + var initialValue = 'initial value'; + await tester.pumpWidget(MaterialApp( + home: Scaffold( + body: MarkdownTextInput((String value) { + initialValue = value; + }, initialValue)))); + + final formfield = tester.widget(find.text(initialValue)); + formfield.controller.selection = + TextSelection(baseOffset: 0, extentOffset: initialValue.length); + + final boldKey = const Key('separator_button'); + await tester.tap(find.byKey(boldKey)); + + expect(initialValue, '\n------\ninitial value'); + }); + + testWidgets('MarkdownTextInput make image link from selection', + (WidgetTester tester) async { + var initialValue = 'initial value'; + await tester.pumpWidget(MaterialApp( + home: Scaffold( + body: MarkdownTextInput((String value) { + initialValue = value; + }, initialValue)))); + + final formfield = tester.widget(find.text(initialValue)); + formfield.controller.selection = + TextSelection(baseOffset: 0, extentOffset: initialValue.length); + + final boldKey = const Key('image_button'); + await tester.tap(find.byKey(boldKey)); + + expect(initialValue, '![initial value](initial value)'); }); }