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