Skip to content

Commit

Permalink
Feat(error-handler): Add stacktrace to the ErrorHandler (#66)
Browse files Browse the repository at this point in the history
* feat(error-handler): Updated handleError method

Added optional stackTrace argument

* chore(error-handler): edited docs

Eddited documentation of handleError method

* fix(error-handler): added curly braces

Added curly braces for making stackTrace argument actually optional
  • Loading branch information
feduke-nukem authored Aug 14, 2022
1 parent 02e647c commit 6286525
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 15 deletions.
3 changes: 2 additions & 1 deletion packages/elementary/example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}
4 changes: 2 additions & 2 deletions packages/elementary/lib/src/core.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
4 changes: 2 additions & 2 deletions packages/elementary/lib/src/error/error_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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});
}
28 changes: 18 additions & 10 deletions packages/elementary/test/core/elementary_model_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,38 +21,46 @@ 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),
]);
});

test('WidgetModel should get every error from handleError', () {
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));
});

Expand Down

0 comments on commit 6286525

Please sign in to comment.