blob: af5c37048125fe8f92f1dfc6584e87ee7c349dcf [file] [log] [blame]
// Copyright 2024 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 'dart:async';
import 'dart:ffi';
import 'dart:isolate';
import 'dart:ui';
import 'package:litetest/litetest.dart';
void main() {
test('PlatformIsolate runOnPlatformThread, cancels pending jobs if shutdown', () async {
final Future<int> slowTask = runOnPlatformThread(() async {
await Future<void>.delayed(const Duration(seconds: 10));
return 123;
});
await runOnPlatformThread(() {
_forceShutdownIsolate();
Future<void>(() => Isolate.exit());
});
bool throws = false;
try {
await slowTask;
} catch (error) {
expect(error.toString(), contains('PlatformIsolate shutdown unexpectedly'));
throws = true;
}
expect(throws, true);
// Platform isolate automatically restarts.
final int result = await runOnPlatformThread(() => 123);
expect(result, 123);
});
}
@Native<Void Function()>(symbol: 'ForceShutdownIsolate')
external void _forceShutdownIsolate();