Index: runtime/observatory/tests/service/complex_reload_test.dart |
diff --git a/runtime/observatory/tests/service/complex_reload_test.dart b/runtime/observatory/tests/service/complex_reload_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9876d552c795bda2aeb6283d3a01ba78f42eda21 |
--- /dev/null |
+++ b/runtime/observatory/tests/service/complex_reload_test.dart |
@@ -0,0 +1,85 @@ |
+// Copyright (c) 2016, 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. |
+// VMOptions=--error_on_bad_type --error_on_bad_override |
+ |
+import 'test_helper.dart'; |
+import 'dart:async'; |
+import 'dart:developer'; |
+import 'dart:isolate' as I; |
+import 'dart:io'; |
+import 'service_test_common.dart'; |
+import 'package:observatory/service.dart'; |
+import 'package:unittest/unittest.dart'; |
+ |
+testMain() async { |
+ debugger(); // Stop here. |
+ // Spawn the child isolate. |
+ I.Isolate isolate = |
+ await I.Isolate.spawnUri(Uri.parse('complex_reload/v1/main.dart'), |
+ [], |
+ null); |
+ print(isolate); |
+ debugger(); |
+} |
+ |
+// Directory that we are running in. |
+String directory = Platform.pathSeparator + |
+ Platform.script.pathSegments.sublist( |
+ 0, |
+ Platform.script.pathSegments.length - 1).join(Platform.pathSeparator); |
+ |
+Future<String> invokeTest(Isolate isolate) async { |
+ await isolate.reload(); |
+ Library lib = isolate.rootLibrary; |
+ await lib.load(); |
+ Instance result = await lib.evaluate('test()'); |
+ expect(result.isString, isTrue); |
+ return result.valueAsString; |
+} |
+ |
+var tests = [ |
+ // Stopped at 'debugger' statement. |
+ hasStoppedAtBreakpoint, |
+ // Resume the isolate into the while loop. |
+ resumeIsolate, |
+ // Stop at 'debugger' statement. |
+ hasStoppedAtBreakpoint, |
+ (Isolate mainIsolate) async { |
+ // Grab the VM. |
+ VM vm = mainIsolate.vm; |
+ await vm.reloadIsolates(); |
+ expect(vm.isolates.length, 2); |
+ |
+ // Find the slave isolate. |
+ Isolate slaveIsolate = |
+ vm.isolates.firstWhere((Isolate i) => i != mainIsolate); |
+ expect(slaveIsolate, isNotNull); |
+ |
+ // Invoke test in v1. |
+ String v1 = await invokeTest(slaveIsolate); |
+ expect(v1, 'apple'); |
+ |
+ // Reload to v2. |
+ var response = await slaveIsolate.reloadSources( |
+ rootLibUri: '$directory/complex_reload/v2/main.dart', |
+ ); |
+ expect(response['success'], isTrue); |
+ |
+ // Invoke test in v2. |
+ String v2 = await invokeTest(slaveIsolate); |
+ expect(v2, 'banana'); |
+ |
+ // Reload to v3. |
+ response = await slaveIsolate.reloadSources( |
+ rootLibUri: '$directory/complex_reload/v3/main.dart', |
+ ); |
+ expect(response['success'], isTrue); |
+ |
+ // Invoke test in v3. |
+ String v3 = await invokeTest(slaveIsolate); |
+ expect(v3, 'cabbage'); |
+ } |
+]; |
+ |
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testMain); |