dart-lang / markdown

A Dart markdown library
https://pub.dev/packages/markdown
BSD 3-Clause "New" or "Revised" License
443 stars 201 forks source link

'Cannot add to an unmodifiable list' seen when running the flutter_markdown tests #480

Closed devoncarew closed 1 year ago

devoncarew commented 1 year ago

I bisected a recent roll failure to https://github.com/dart-lang/markdown/commit/d72ae07c8290b3780044170eda28eda5a9fb342e ; here is the test failure:

flutter_markdown/test/custom_syntax_test.dart: Custom Syntax link for wikistyle              
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following UnsupportedError was thrown building Directionality(textDirection: ltr):
Unsupported operation: Cannot add to an unmodifiable list

The relevant error-causing widget was:
  Directionality
  Directionality:file:///Users/devoncarew/projects/flutter/packages/packages/flutter_markdown/test/utils.dart:164:10

When the exception was thrown, this was the stack:
#0      UnmodifiableListMixin.add (dart:_internal/list.dart:114:5)
#1      WikilinkSyntax.onMatch (file:///Users/devoncarew/projects/flutter/packages/packages/flutter_markdown/test/custom_syntax_test.dart:165:18)
#2      InlineSyntax.tryMatch (package:markdown/src/inline_syntaxes/inline_syntax.dart:49:9)
#3      InlineParser.parse.<anonymous closure> (package:markdown/src/inline_parser.dart:119:43)
#4      ListMixin.any (dart:collection/list.dart:149:15)
#5      InlineParser.parse (package:markdown/src/inline_parser.dart:119:20)
#6      Document.parseInline (package:markdown/src/document.dart:76:67)
#7      Document._parseInlineContent (package:markdown/src/document.dart:82:29)
#8      Document._parseInlineContent (package:markdown/src/document.dart:87:9)
#9      Document.parseLines (package:markdown/src/document.dart:71:5)
#10     _MarkdownWidgetState._parseMarkdown (package:flutter_markdown/src/widget.dart:320:45)
#11     _MarkdownWidgetState.didChangeDependencies (package:flutter_markdown/src/widget.dart:284:5)
#12     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5110:11)
#13     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4935:5)
...     Normal element mounting (7 frames)
#20     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3944:16)
#21     Element.updateChild (package:flutter/src/widgets/framework.dart:3667:20)
#22     RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1180:16)
#23     RenderObjectToWidgetElement.update (package:flutter/src/widgets/binding.dart:1157:5)
#24     RenderObjectToWidgetElement.performRebuild (package:flutter/src/widgets/binding.dart:1171:7)
#25     Element.rebuild (package:flutter/src/widgets/framework.dart:4681:5)
#26     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2734:19)
#27     AutomatedTestWidgetsFlutterBinding.drawFrame (package:flutter_test/src/binding.dart:1333:19)
#28     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:381:5)
#29     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1275:15)
#30     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1204:9)
#31     AutomatedTestWidgetsFlutterBinding.pump.<anonymous closure> (package:flutter_test/src/binding.dart:1182:9)
#34     TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:71:41)
#35     AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:1168:27)
#36     WidgetTester.pumpWidget.<anonymous closure> (package:flutter_test/src/widget_tester.dart:558:22)
#39     TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:71:41)
#40     WidgetTester.pumpWidget (package:flutter_test/src/widget_tester.dart:555:27)
#41     defineTests.<anonymous closure>.<anonymous closure> (file:///Users/devoncarew/projects/flutter/packages/packages/flutter_markdown/test/custom_syntax_test.dart:41:22)
#42     testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart:171:29)
<asynchronous suspension>
<asynchronous suspension>
(elided 5 frames from dart:async and package:stack_trace)

════════════════════════════════════════════════════════════════════════════════════════════════════
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following StateError was thrown running a test:
Bad state: No element

When the exception was thrown, this was the stack:
#0      Iterable.single (dart:core/iterable.dart:654:25)
#1      WidgetController.widget (package:flutter_test/src/controller.dart:284:30)
#2      defineTests.<anonymous closure>.<anonymous closure> (file:///Users/devoncarew/projects/flutter/packages/packages/flutter_markdown/test/custom_syntax_test.dart:54:44)
<asynchronous suspension>
<asynchronous suspension>
(elided one frame from package:stack_trace)
srawlins commented 1 year ago

Yeah we can back out the specific diff