// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter/foundation.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { test('Parses line', () { expect( StackFrame.fromStackTraceLine(stackString.split('\n')[0]), stackFrames[0], ); }); test('Parses string', () { expect( StackFrame.fromStackString(stackString), stackFrames, ); }); test('Parses StackTrace', () { expect( StackFrame.fromStackTrace(StackTrace.fromString(stackString)), stackFrames, ); }); test('Parses complex stack', () { expect( StackFrame.fromStackString(asyncStackString), asyncStackFrames, ); }); test('Parses stack without cols', () { expect( StackFrame.fromStackString(stackFrameNoCols), stackFrameNoColsFrames, ); }); test('Parses web stack', () { expect( StackFrame.fromStackString(webStackTrace), webStackTraceFrames, ); }); test('Parses ...', () { expect( StackFrame.fromStackTraceLine('...'), StackFrame.stackOverFlowElision, ); }); test('Live handling of Stack Overflows', () { void overflow(int seed) { overflow(seed + 1); } bool overflowed = false; try { overflow(1); } on StackOverflowError catch (e, stack) { overflowed = true; final List<StackFrame> frames = StackFrame.fromStackTrace(stack); expect(frames.contains(StackFrame.stackOverFlowElision), true); } expect(overflowed, true); }, skip: isBrowser); // [intended] The VM test harness can handle a // stack overflow, but the browser cannot - running this test in a browser // will cause it to become unresponsive. test('Traces from package:stack_trace throw assertion', () { try { StackFrame.fromStackString(mangledStackString); assert(false, 'StackFrame.fromStackString did not throw on a mangled stack trace'); } catch (e) { expect(e, isA<AssertionError>()); expect('$e', contains('Got a stack frame from package:stack_trace')); } }); test('Can parse web constructor invocation with unknown class name', () { const String stackTraceLine = '#32 new (http://localhost:42191/dart-sdk/lib/async/stream_controller.dart:880:9)'; expect( StackFrame.fromStackTraceLine(stackTraceLine), const StackFrame( number: 32, className: '<unknown>', method: '', packageScheme: 'http', package: '<unknown>', packagePath: 'dart-sdk/lib/async/stream_controller.dart', line: 880, column: 9, source: stackTraceLine, ), ); }); } const String stackString = ''' #0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:42:39) #1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:38:5) #2 new Text (package:flutter/src/widgets/text.dart:287:10) #3 _MyHomePageState.build (package:hello_flutter/main.dart:72:16) #4 StatefulElement.build (package:flutter/src/widgets/framework.dart:4414:27) #5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4303:15) #6 Element.rebuild (package:flutter/src/widgets/framework.dart:4027:5) #7 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4286:5) #8 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4461:11) #9 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4281:5) #10 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3276:14) #11 Element.updateChild (package:flutter/src/widgets/framework.dart) #12 SingleChildRenderObjectElement.mount (package:flutter/blah.dart:999:9) #13 main (package:hello_flutter/main.dart:10:4)'''; const List<StackFrame> stackFrames = <StackFrame>[ StackFrame(number: 0, className: '_AssertionError', method: '_doThrowNew', packageScheme: 'dart', package: 'core-patch', packagePath: 'errors_patch.dart', line: 42, column: 39, source: '#0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:42:39)'), StackFrame(number: 1, className: '_AssertionError', method: '_throwNew', packageScheme: 'dart', package: 'core-patch', packagePath: 'errors_patch.dart', line: 38, column: 5, source: '#1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:38:5)'), StackFrame(number: 2, className: 'Text', method: '', packageScheme: 'package', package: 'flutter', packagePath: 'src/widgets/text.dart', line: 287, column: 10, isConstructor: true, source: '#2 new Text (package:flutter/src/widgets/text.dart:287:10)'), StackFrame(number: 3, className: '_MyHomePageState', method: 'build', packageScheme: 'package', package: 'hello_flutter', packagePath: 'main.dart', line: 72, column: 16, source: '#3 _MyHomePageState.build (package:hello_flutter/main.dart:72:16)'), StackFrame(number: 4, className: 'StatefulElement', method: 'build', packageScheme: 'package', package: 'flutter', packagePath: 'src/widgets/framework.dart', line: 4414, column: 27, source: '#4 StatefulElement.build (package:flutter/src/widgets/framework.dart:4414:27)'), StackFrame(number: 5, className: 'ComponentElement', method: 'performRebuild', packageScheme: 'package', package: 'flutter', packagePath: 'src/widgets/framework.dart', line: 4303, column: 15, source: '#5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4303:15)'), StackFrame(number: 6, className: 'Element', method: 'rebuild', packageScheme: 'package', package: 'flutter', packagePath: 'src/widgets/framework.dart', line: 4027, column: 5, source: '#6 Element.rebuild (package:flutter/src/widgets/framework.dart:4027:5)'), StackFrame(number: 7, className: 'ComponentElement', method: '_firstBuild', packageScheme: 'package', package: 'flutter', packagePath: 'src/widgets/framework.dart', line: 4286, column: 5, source: '#7 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4286:5)'), StackFrame(number: 8, className: 'StatefulElement', method: '_firstBuild', packageScheme: 'package', package: 'flutter', packagePath: 'src/widgets/framework.dart', line: 4461, column: 11, source: '#8 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4461:11)'), StackFrame(number: 9, className: 'ComponentElement', method: 'mount', packageScheme: 'package', package: 'flutter', packagePath: 'src/widgets/framework.dart', line: 4281, column: 5, source: '#9 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4281:5)'), StackFrame(number: 10, className: 'Element', method: 'inflateWidget', packageScheme: 'package', package: 'flutter', packagePath: 'src/widgets/framework.dart', line: 3276, column: 14, source: '#10 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3276:14)'), StackFrame(number: 11, className: 'Element', method: 'updateChild', packageScheme: 'package', package: 'flutter', packagePath: 'src/widgets/framework.dart', line: -1, column: -1, source: '#11 Element.updateChild (package:flutter/src/widgets/framework.dart)'), StackFrame(number: 12, className: 'SingleChildRenderObjectElement', method: 'mount', packageScheme: 'package', package: 'flutter', packagePath: 'blah.dart', line: 999, column: 9, source: '#12 SingleChildRenderObjectElement.mount (package:flutter/blah.dart:999:9)'), StackFrame(number: 13, method: 'main', packageScheme: 'package', package: 'hello_flutter', packagePath: 'main.dart', line: 10, column: 4, source: '#13 main (package:hello_flutter/main.dart:10:4)'), ]; const String asyncStackString = ''' #0 getSampleStack.<anonymous closure> (file:///path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart:40:57) #1 new Future.sync (dart:async/future.dart:224:31) #2 getSampleStack (file:///path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart:40:10) #3 main (file:///path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart:46:40) #4 main (package:flutter_goldens/flutter_goldens.dart:43:17) <asynchronous suspension> #5 main.<anonymous closure>.<anonymous closure> (file:///temp/path.whatever/listener.dart:47:18) #6 _rootRun (dart:async/zone.dart:1126:13) #7 _CustomZone.run (dart:async/zone.dart:1023:19) #8 _runZoned (dart:async/zone.dart:1518:10) #9 runZoned (dart:async/zone.dart:1465:12) #10 Declarer.declare (package:test_api/src/backend/declarer.dart:130:22) #11 RemoteListener.start.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test_api/src/remote_listener.dart:124:26) <asynchronous suspension> #12 _rootRun (dart:async/zone.dart:1126:13) #13 _CustomZone.run (dart:async/zone.dart:1023:19) #14 _runZoned (dart:async/zone.dart:1518:10) #15 runZoned (dart:async/zone.dart:1502:12) #16 RemoteListener.start.<anonymous closure>.<anonymous closure> (package:test_api/src/remote_listener.dart:70:9) #17 _rootRun (dart:async/zone.dart:1126:13) #18 _CustomZone.run (dart:async/zone.dart:1023:19) #19 _runZoned (dart:async/zone.dart:1518:10) #20 runZoned (dart:async/zone.dart:1465:12) #21 StackTraceFormatter.asCurrent (package:test_api/src/backend/stack_trace_formatter.dart:41:31) #22 RemoteListener.start.<anonymous closure> (package:test_api/src/remote_listener.dart:69:29) #23 _rootRun (dart:async/zone.dart:1126:13) #24 _CustomZone.run (dart:async/zone.dart:1023:19) #25 _runZoned (dart:async/zone.dart:1518:10) #26 runZoned (dart:async/zone.dart:1465:12) #27 SuiteChannelManager.asCurrent (package:test_api/src/suite_channel_manager.dart:34:31) #28 RemoteListener.start (package:test_api/src/remote_listener.dart:68:27) #29 serializeSuite (file:///temp/path.whatever/listener.dart:17:25) #30 main (file:///temp/path.whatever/listener.dart:43:36) #31 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:239:25) #32 _rootRun (dart:async/zone.dart:1126:13) #33 _CustomZone.run (dart:async/zone.dart:1023:19) #34 _runZoned (dart:async/zone.dart:1518:10) #35 runZoned (dart:async/zone.dart:1502:12) #36 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:231:5) #37 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:307:19) #38 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174:12)'''; const String mangledStackString = r''' dart:async/future_impl.dart 23:44 _Completer.completeError test\bindings_async_gap_test.dart 42:17 main.<fn>.<fn> package:flutter_test/src/binding.dart 744:19 TestWidgetsFlutterBinding._runTestBody ===== asynchronous gap =========================== dart:async/zone.dart 1121:19 _CustomZone.registerUnaryCallback dart:async-patch/async_patch.dart 83:23 _asyncThenWrapperHelper dart:async/zone.dart 1222:13 _rootRunBinary dart:async/zone.dart 1107:19 _CustomZone.runBinary package:flutter_test/src/binding.dart 724:14 TestWidgetsFlutterBinding._runTest package:flutter_test/src/binding.dart 1124:24 AutomatedTestWidgetsFlutterBinding.runTest.<fn> package:fake_async/fake_async.dart 177:54 FakeAsync.run.<fn>.<fn> dart:async/zone.dart 1190:13 _rootRun '''; const List<StackFrame> asyncStackFrames = <StackFrame>[ StackFrame(number: 0, method: 'getSampleStack', packageScheme: 'file', package: '<unknown>', packagePath: '/path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart', line: 40, column: 57, source: '#0 getSampleStack.<anonymous closure> (file:///path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart:40:57)'), StackFrame(number: 1, className: 'Future', method: 'sync', packageScheme: 'dart', package: 'async', packagePath: 'future.dart', line: 224, column: 31, isConstructor: true, source: '#1 new Future.sync (dart:async/future.dart:224:31)'), StackFrame(number: 2, method: 'getSampleStack', packageScheme: 'file', package: '<unknown>', packagePath: '/path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart', line: 40, column: 10, source: '#2 getSampleStack (file:///path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart:40:10)'), StackFrame(number: 3, method: 'main', packageScheme: 'file', package: '<unknown>', packagePath: '/path/to/flutter/packages/flutter/foundation/error_reporting_test.dart', line: 46, column: 40, source: '#3 main (file:///path/to/flutter/packages/flutter/test/foundation/error_reporting_test.dart:46:40)'), StackFrame(number: 4, method: 'main', packageScheme: 'package', package: 'flutter_goldens', packagePath: 'flutter_goldens.dart', line: 43, column: 17, source: '#4 main (package:flutter_goldens/flutter_goldens.dart:43:17)'), StackFrame.asynchronousSuspension, StackFrame(number: 5, method: 'main', packageScheme: 'file', package: '<unknown>', packagePath: '/temp/path.whatever/listener.dart', line: 47, column: 18, source: '#5 main.<anonymous closure>.<anonymous closure> (file:///temp/path.whatever/listener.dart:47:18)'), StackFrame(number: 6, method: '_rootRun', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1126, column: 13, source: '#6 _rootRun (dart:async/zone.dart:1126:13)'), StackFrame(number: 7, className: '_CustomZone', method: 'run', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1023, column: 19, source: '#7 _CustomZone.run (dart:async/zone.dart:1023:19)'), StackFrame(number: 8, method: '_runZoned', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1518, column: 10, source: '#8 _runZoned (dart:async/zone.dart:1518:10)'), StackFrame(number: 9, method: 'runZoned', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1465, column: 12, source: '#9 runZoned (dart:async/zone.dart:1465:12)'), StackFrame(number: 10, className: 'Declarer', method: 'declare', packageScheme: 'package', package: 'test_api', packagePath: 'src/backend/declarer.dart', line: 130, column: 22, source: '#10 Declarer.declare (package:test_api/src/backend/declarer.dart:130:22)'), StackFrame(number: 11, className: 'RemoteListener', method: 'start', packageScheme: 'package', package: 'test_api', packagePath: 'src/remote_listener.dart', line: 124, column: 26, source: '#11 RemoteListener.start.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test_api/src/remote_listener.dart:124:26)'), StackFrame.asynchronousSuspension, StackFrame(number: 12, method: '_rootRun', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1126, column: 13, source: '#12 _rootRun (dart:async/zone.dart:1126:13)'), StackFrame(number: 13, className: '_CustomZone', method: 'run' , packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1023, column: 19, source: '#13 _CustomZone.run (dart:async/zone.dart:1023:19)'), StackFrame(number: 14, method: '_runZoned', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1518, column: 10, source: '#14 _runZoned (dart:async/zone.dart:1518:10)'), StackFrame(number: 15, method: 'runZoned', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1502, column: 12, source: '#15 runZoned (dart:async/zone.dart:1502:12)'), StackFrame(number: 16, className: 'RemoteListener', method: 'start', packageScheme: 'package', package: 'test_api', packagePath: 'src/remote_listener.dart', line: 70, column: 9, source: '#16 RemoteListener.start.<anonymous closure>.<anonymous closure> (package:test_api/src/remote_listener.dart:70:9)'), StackFrame(number: 17, method: '_rootRun', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1126, column: 13, source: '#17 _rootRun (dart:async/zone.dart:1126:13)'), StackFrame(number: 18, className: '_CustomZone', method: 'run', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1023, column: 19, source: '#18 _CustomZone.run (dart:async/zone.dart:1023:19)'), StackFrame(number: 19, method: '_runZoned', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1518, column: 10, source: '#19 _runZoned (dart:async/zone.dart:1518:10)'), StackFrame(number: 20, method: 'runZoned', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1465, column: 12, source: '#20 runZoned (dart:async/zone.dart:1465:12)'), StackFrame(number: 21, className: 'StackTraceFormatter', method: 'asCurrent', packageScheme: 'package', package: 'test_api', packagePath: 'src/backend/stack_trace_formatter.dart', line: 41, column: 31, source: '#21 StackTraceFormatter.asCurrent (package:test_api/src/backend/stack_trace_formatter.dart:41:31)'), StackFrame(number: 22, className: 'RemoteListener', method: 'start', packageScheme: 'package', package: 'test_api', packagePath: 'src/remote_listener.dart', line: 69, column: 29, source: '#22 RemoteListener.start.<anonymous closure> (package:test_api/src/remote_listener.dart:69:29)'), StackFrame(number: 23, method: '_rootRun', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1126, column: 13, source: '#23 _rootRun (dart:async/zone.dart:1126:13)'), StackFrame(number: 24, className: '_CustomZone', method: 'run', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1023, column: 19, source: '#24 _CustomZone.run (dart:async/zone.dart:1023:19)'), StackFrame(number: 25, method: '_runZoned', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1518, column: 10, source: '#25 _runZoned (dart:async/zone.dart:1518:10)'), StackFrame(number: 26, method: 'runZoned', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1465, column: 12, source: '#26 runZoned (dart:async/zone.dart:1465:12)'), StackFrame(number: 27, className: 'SuiteChannelManager', method: 'asCurrent', packageScheme: 'package', package: 'test_api', packagePath: 'src/suite_channel_manager.dart', line: 34, column: 31, source: '#27 SuiteChannelManager.asCurrent (package:test_api/src/suite_channel_manager.dart:34:31)'), StackFrame(number: 28, className: 'RemoteListener', method: 'start', packageScheme: 'package', package: 'test_api', packagePath: 'src/remote_listener.dart', line: 68, column: 27, source: '#28 RemoteListener.start (package:test_api/src/remote_listener.dart:68:27)'), StackFrame(number: 29, method: 'serializeSuite', packageScheme: 'file', package: '<unknown>', packagePath: '/temp/path.whatever/listener.dart', line: 17, column: 25, source: '#29 serializeSuite (file:///temp/path.whatever/listener.dart:17:25)'), StackFrame(number: 30, method: 'main', packageScheme: 'file', package: '<unknown>', packagePath: '/temp/path.whatever/listener.dart', line: 43, column: 36, source: '#30 main (file:///temp/path.whatever/listener.dart:43:36)'), StackFrame(number: 31, method: '_runMainZoned', packageScheme: 'dart', package: 'ui', packagePath: 'hooks.dart', line:239, column: 25, source: '#31 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:239:25)'), StackFrame(number: 32, method: '_rootRun', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1126, column: 13, source: '#32 _rootRun (dart:async/zone.dart:1126:13)'), StackFrame(number: 33, className: '_CustomZone', method: 'run' , packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1023, column: 19, source: '#33 _CustomZone.run (dart:async/zone.dart:1023:19)'), StackFrame(number: 34, method: '_runZoned', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1518, column: 10, source: '#34 _runZoned (dart:async/zone.dart:1518:10)'), StackFrame(number: 35, method: 'runZoned', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1502, column: 12, source: '#35 runZoned (dart:async/zone.dart:1502:12)'), StackFrame(number: 36, method: '_runMainZoned', packageScheme: 'dart', package: 'ui', packagePath: 'hooks.dart', line: 231, column: 5, source: '#36 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:231:5)'), StackFrame(number: 37, method: '_startIsolate', packageScheme: 'dart', package: 'isolate-patch', packagePath: 'isolate_patch.dart', line: 307, column: 19, source: '#37 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:307:19)'), StackFrame(number: 38, className: '_RawReceivePortImpl', method: '_handleMessage', packageScheme: 'dart', package: 'isolate-patch', packagePath: 'isolate_patch.dart', line: 174, column: 12, source: '#38 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174:12)'), ]; const String stackFrameNoCols = ''' #0 blah (package:assertions/main.dart:4) #1 main (package:assertions/main.dart:8) #2 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:239) #3 _rootRun (dart:async/zone.dart:1126) #4 _CustomZone.run (dart:async/zone.dart:1023) #5 _runZoned (dart:async/zone.dart:1518) #6 runZoned (dart:async/zone.dart:1502) #7 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:231) #8 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:307) #9 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174)'''; const List<StackFrame> stackFrameNoColsFrames = <StackFrame>[ StackFrame(number: 0, method: 'blah', packageScheme: 'package', package: 'assertions', packagePath: 'main.dart', line: 4, column: -1, source: '#0 blah (package:assertions/main.dart:4)'), StackFrame(number: 1, method: 'main', packageScheme: 'package', package: 'assertions', packagePath: 'main.dart', line: 8, column: -1, source: '#1 main (package:assertions/main.dart:8)'), StackFrame(number: 2, method: '_runMainZoned', packageScheme: 'dart', package: 'ui', packagePath: 'hooks.dart', line: 239, column: -1, source: '#2 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:239)'), StackFrame(number: 3, method: '_rootRun', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1126, column: -1, source: '#3 _rootRun (dart:async/zone.dart:1126)'), StackFrame(number: 4, className: '_CustomZone', method: 'run', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1023, column: -1, source: '#4 _CustomZone.run (dart:async/zone.dart:1023)'), StackFrame(number: 5, method: '_runZoned', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1518, column: -1, source: '#5 _runZoned (dart:async/zone.dart:1518)'), StackFrame(number: 6, method: 'runZoned', packageScheme: 'dart', package: 'async', packagePath: 'zone.dart', line: 1502, column: -1, source: '#6 runZoned (dart:async/zone.dart:1502)'), StackFrame(number: 7, method: '_runMainZoned', packageScheme: 'dart', package: 'ui', packagePath: 'hooks.dart', line: 231, column: -1, source: '#7 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:231)'), StackFrame(number: 8, method: '_startIsolate', packageScheme: 'dart', package: 'isolate-patch', packagePath: 'isolate-patch.dart', line: 307, column: -1, source: '#8 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:307)'), StackFrame(number: 9, className: '_RawReceivePortImpl', method: '_handleMessage', packageScheme: 'dart', package: 'isolate-patch', packagePath: 'isolate-patch.dart', line: 174, column: -1, source: '#9 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174)'), ]; const String webStackTrace = r''' package:dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 196:49 throw_ package:assertions/main.dart 4:3 blah package:assertions/main.dart 8:5 main$ package:assertions/main_web_entrypoint.dart 9:3 main$ package:dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 47:50 onValue package:dart-sdk/lib/async/zone.dart 1381:54 runUnary object_test.dart 210:5 performLayout package:dart-sdk/lib/async/future_impl.dart 140:18 handleValue package:dart-sdk/lib/async/future_impl.dart 682:44 handleValueCallback package:dart-sdk/lib/async/future_impl.dart 711:32 _propagateToListeners package:dart-sdk/lib/async/future_impl.dart 391:9 callback package:dart-sdk/lib/async/schedule_microtask.dart 43:11 _microtaskLoop package:dart-sdk/lib/async/schedule_microtask.dart 52:5 _startMicrotaskLoop package:dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 168:15 <fn>'''; const List<StackFrame> webStackTraceFrames = <StackFrame>[ StackFrame(number: -1, className: '<unknown>', method: 'throw_', packageScheme: 'package', package: 'dart-sdk', packagePath: 'lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart', line: 196, column: 49, source: 'package:dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 196:49 throw_'), StackFrame(number: -1, className: '<unknown>', method: 'blah', packageScheme: 'package', package: 'assertions', packagePath: 'main.dart', line: 4, column: 3, source: 'package:assertions/main.dart 4:3 blah'), StackFrame(number: -1, className: '<unknown>', method: r'main$', packageScheme: 'package', package: 'assertions', packagePath: 'main.dart', line: 8, column: 5, source: r'package:assertions/main.dart 8:5 main$'), StackFrame(number: -1, className: '<unknown>', method: r'main$', packageScheme: 'package', package: 'assertions', packagePath: 'main_web_entrypoint.dart', line: 9, column: 3, source: r'package:assertions/main_web_entrypoint.dart 9:3 main$'), StackFrame(number: -1, className: '<unknown>', method: 'onValue', packageScheme: 'package', package: 'dart-sdk', packagePath: 'lib/_internal/js_dev_runtime/patch/async_patch.dart', line: 47, column: 50, source: 'package:dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 47:50 onValue'), StackFrame(number: -1, className: '<unknown>', method: 'runUnary', packageScheme: 'package', package: 'dart-sdk', packagePath: 'lib/async/zone.dart', line: 1381, column: 54, source: 'package:dart-sdk/lib/async/zone.dart 1381:54 runUnary'), StackFrame(number: -1, className: '<unknown>', method: 'performLayout', packageScheme: '<unknown>', package: '<unknown>', packagePath: '<unknown>', line: 210, column: 5, source: 'object_test.dart 210:5 performLayout'), StackFrame(number: -1, className: '<unknown>', method: 'handleValue', packageScheme: 'package', package: 'dart-sdk', packagePath: 'lib/async/future_impl.dart', line: 140, column: 18, source: 'package:dart-sdk/lib/async/future_impl.dart 140:18 handleValue'), StackFrame(number: -1, className: '<unknown>', method: 'handleValueCallback', packageScheme: 'package', package: 'dart-sdk', packagePath: 'lib/async/future_impl.dart', line: 682, column: 44, source: 'package:dart-sdk/lib/async/future_impl.dart 682:44 handleValueCallback'), StackFrame(number: -1, className: '<unknown>', method: '_propagateToListeners', packageScheme: 'package', package: 'dart-sdk', packagePath: 'lib/async/future_impl.dart', line: 711, column: 32, source: 'package:dart-sdk/lib/async/future_impl.dart 711:32 _propagateToListeners'), StackFrame(number: -1, className: '<unknown>', method: 'callback', packageScheme: 'package', package: 'dart-sdk', packagePath: 'lib/async/future_impl.dart', line: 391, column: 9, source: 'package:dart-sdk/lib/async/future_impl.dart 391:9 callback'), StackFrame(number: -1, className: '<unknown>', method: '_microtaskLoop', packageScheme: 'package', package: 'dart-sdk', packagePath: 'lib/async/schedule_microtask.dart', line: 43, column: 11, source: 'package:dart-sdk/lib/async/schedule_microtask.dart 43:11 _microtaskLoop'), StackFrame(number: -1, className: '<unknown>', method: '_startMicrotaskLoop', packageScheme: 'package', package: 'dart-sdk', packagePath: 'lib/async/schedule_microtask.dart', line: 52, column: 5, source: 'package:dart-sdk/lib/async/schedule_microtask.dart 52:5 _startMicrotaskLoop'), StackFrame(number: -1, className: '<unknown>', method: '<fn>', packageScheme: 'package', package: 'dart-sdk', packagePath: 'lib/_internal/js_dev_runtime/patch/async_patch.dart', line: 168, column: 15, source: 'package:dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 168:15 <fn>'), ];