diff --git a/packages/elementary/example/lib/main.dart b/packages/elementary/example/lib/main.dart index 56b188b3..12c5fd03 100644 --- a/packages/elementary/example/lib/main.dart +++ b/packages/elementary/example/lib/main.dart @@ -29,9 +29,10 @@ class MyApp extends StatelessWidget { /// Error handler that print info to console class TestErrorHandler implements ErrorHandler { @override - void handleError(Object error) { + void handleError(Object error, {StackTrace? stackTrace}) { if (kDebugMode) { print(error); + print(stackTrace); } } } diff --git a/packages/elementary/lib/src/core.dart b/packages/elementary/lib/src/core.dart index 69123487..5965839e 100644 --- a/packages/elementary/lib/src/core.dart +++ b/packages/elementary/lib/src/core.dart @@ -294,8 +294,8 @@ abstract class ElementaryModel { @protected @mustCallSuper @visibleForTesting - void handleError(Object error) { - _errorHandler?.handleError(error); + void handleError(Object error, {StackTrace? stackTrace}) { + _errorHandler?.handleError(error, stackTrace: stackTrace); _wmHandler?.call(error); } diff --git a/packages/elementary/lib/src/error/error_handler.dart b/packages/elementary/lib/src/error/error_handler.dart index 5c85a79e..bd41189a 100644 --- a/packages/elementary/lib/src/error/error_handler.dart +++ b/packages/elementary/lib/src/error/error_handler.dart @@ -3,6 +3,6 @@ /// /// !!! This not for Presentation Layer handling. abstract class ErrorHandler { - /// This method have to handle of passed error. - void handleError(Object error); + /// This method have to handle of passed error and optional [StackTrace]. + void handleError(Object error, {StackTrace? stackTrace}); } diff --git a/packages/elementary/test/core/elementary_model_test.dart b/packages/elementary/test/core/elementary_model_test.dart index 352e485f..43912b4e 100644 --- a/packages/elementary/test/core/elementary_model_test.dart +++ b/packages/elementary/test/core/elementary_model_test.dart @@ -21,26 +21,32 @@ void main() { test('ErrorHandler should get every error from handleError', () { final error = Exception('Test'); final error2 = Exception('Test2'); + final stackTrace = StackTrace.fromString('Test stackTrace'); + final stackTrace2 = StackTrace.fromString('Test2 stackTrace'); testModel - ..handleError(error) - ..handleError(error2); + ..handleError(error, stackTrace: stackTrace) + ..handleError(error2, stackTrace: stackTrace2); - verify(() => errorHandler.handleError(error)).called(1); - verify(() => errorHandler.handleError(error2)).called(1); + verify(() => errorHandler.handleError(error, stackTrace: stackTrace)) + .called(1); + verify(() => errorHandler.handleError(error2, stackTrace: stackTrace2)) + .called(1); }); test('ErrorHandler should get error in order', () { final error = Exception('Test'); final error2 = Exception('Test2'); + final stackTrace = StackTrace.fromString('Test stackTrace'); + final stackTrace2 = StackTrace.fromString('Test2 stackTrace'); testModel - ..handleError(error) - ..handleError(error2); + ..handleError(error, stackTrace: stackTrace) + ..handleError(error2, stackTrace: stackTrace2); verifyInOrder([ - () => errorHandler.handleError(error), - () => errorHandler.handleError(error2), + () => errorHandler.handleError(error, stackTrace: stackTrace), + () => errorHandler.handleError(error2, stackTrace: stackTrace2), ]); }); @@ -48,11 +54,13 @@ void main() { testModel.setupWmHandler(_fakeWmHandler); final error = Exception('Test'); final error2 = Exception('Test2'); + final stackTrace = StackTrace.fromString('Test stackTrace'); + final stackTrace2 = StackTrace.fromString('Test2 stackTrace'); - testModel.handleError(error); + testModel.handleError(error, stackTrace: stackTrace); expect(fakeHandlerHub, same(error)); - testModel.handleError(error2); + testModel.handleError(error2, stackTrace: stackTrace2); expect(fakeHandlerHub, same(error2)); });