| // 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")); | 
 | } |