blob: 4da71765a55a19d624c9f4d15585041b1a355a17 [file] [log] [blame] [edit]
// Copyright 2023 The Dart Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@Timeout(Duration(minutes: 1))
import 'package:dwds/src/utilities/shared.dart';
import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart';
import 'fixtures/context.dart';
void main() {
group('wrapInErrorHandlerAsync', () {
test('returns future success value if callback succeeds', () async {
Future<bool> successCallback() async {
await Future.delayed(Duration(milliseconds: 500));
return true;
}
final result =
await wrapInErrorHandlerAsync('successCallback', successCallback);
expect(result, equals(true));
});
test('throws RPCError if callback throws RPCError', () async {
Future<bool> rpcErrorCallback() async {
await Future.delayed(Duration(milliseconds: 500));
throw RPCError(
'rpcErrorCallback',
RPCErrorKind.kInvalidRequest.code,
'An error message',
);
}
await expectLater(
wrapInErrorHandlerAsync('rpcErrorCallback', rpcErrorCallback),
throwsRPCErrorWithMessage('An error message'),
);
});
test('throws SentinelException if callback throws SentinelException',
() async {
Future<bool> sentinelExceptionCallback() async {
await Future.delayed(Duration(milliseconds: 500));
throw SentinelException.parse(
'sentinelExceptionCallback',
{'message': 'a sentinel exception'},
);
}
await expectLater(
wrapInErrorHandlerAsync(
'sentinelExceptionCallback',
sentinelExceptionCallback,
),
throwsSentinelException,
);
});
test('throws RPCError if callback throws other error type', () async {
Future<bool> exceptionCallback() async {
await Future.delayed(Duration(milliseconds: 500));
throw Exception('An unexpected exception');
}
try {
await wrapInErrorHandlerAsync('exceptionCallback', exceptionCallback);
fail("RPCError not thrown.");
} catch (error) {
expect(
error,
isRPCErrorWithMessage(
'Unexpected DWDS error for exceptionCallback: Exception: An unexpected exception',
),
);
}
});
});
}