| // 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', |
| // Wasm stacks are not reliable, even in debug mode, so the stack |
| // parser doesn't do the standard debug stack parsing this test is |
| // expecting here. |
| skip: kIsWasm, // [intended] See comments above |
| () { |
| 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); |
| } |
| |
| var 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 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, |
| ), |
| ); |
| }); |
| |
| test('Parses to null for wrong format.', () { |
| expect(StackFrame.fromStackTraceLine('wrong stack trace format'), null); |
| }); |
| } |
| |
| 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>', |
| ), |
| ]; |