| // Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // @dart = 2.9 |
| |
| import 'dart:async'; |
| import 'dart:mirrors'; |
| |
| import 'package:expect/expect.dart'; |
| |
| main() async { |
| IsolateMirror isolate = currentMirrorSystem().isolate; |
| print(isolate); |
| |
| LibraryMirror success = |
| await isolate.loadUri(Uri.parse("dynamic_load_success.dart")); |
| print(success); |
| InstanceMirror result = success.invoke(#advanceCounter, []); |
| print(result); |
| Expect.equals(1, result.reflectee); |
| result = success.invoke(#advanceCounter, []); |
| print(result); |
| Expect.equals(2, result.reflectee); |
| |
| LibraryMirror success2 = |
| await isolate.loadUri(Uri.parse("dynamic_load_success.dart")); |
| print(success2); |
| Expect.equals(success, success2); |
| result = success2.invoke(#advanceCounter, []); |
| print(result); |
| Expect.equals(3, result.reflectee); // Same library, same state. |
| |
| LibraryMirror math = await isolate.loadUri(Uri.parse("dart:math")); |
| result = math.invoke(#max, [3, 4]); |
| print(result); |
| Expect.equals(4, result.reflectee); |
| |
| Future<LibraryMirror> bad_load = isolate.loadUri(Uri.parse("DOES_NOT_EXIST")); |
| var error; |
| try { |
| await bad_load; |
| } catch (e) { |
| error = e; |
| } |
| print(error); |
| Expect.isTrue(error.toString().contains("Cannot open file") || |
| error.toString().contains("file not found") || |
| error.toString().contains("No such file or directory") || |
| error.toString().contains("The system cannot find the file specified")); |
| Expect.isTrue(error.toString().contains("DOES_NOT_EXIST")); |
| |
| Future<LibraryMirror> bad_load2 = isolate.loadUri(Uri.parse("dart:_builtin")); |
| var error2; |
| try { |
| await bad_load2; |
| } catch (e) { |
| error2 = e; |
| } |
| print(error2); |
| Expect.isTrue(error2.toString().contains("Cannot load")); |
| Expect.isTrue(error2.toString().contains("dart:_builtin")); |
| |
| // Check error is not sticky. |
| LibraryMirror success3 = |
| await isolate.loadUri(Uri.parse("dynamic_load_success.dart")); |
| print(success3); |
| Expect.equals(success, success3); |
| result = success3.invoke(#advanceCounter, []); |
| print(result); |
| Expect.equals(4, result.reflectee); // Same library, same state. |
| |
| Future<LibraryMirror> bad_load3 = |
| isolate.loadUri(Uri.parse("dynamic_load_error.dart")); |
| var error3; |
| try { |
| await bad_load3; |
| } catch (e) { |
| error3 = e; |
| } |
| print(error3); |
| Expect.isTrue(error3.toString().contains("library url expected") || |
| error3.toString().contains("Error: Expected a String")); |
| Expect.isTrue(error3.toString().contains("dynamic_load_error.dart")); |
| } |