// 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. 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:path/path.dart' as path; import 'package:test/test.dart'; // Chop off the file name. String baseDirectory = path.dirname(Platform.script.path) + '/'; Uri baseUri = Platform.script.replace(path: baseDirectory); Uri spawnUri = baseUri.resolveUri(Uri.parse('complex_reload/v1/main.dart')); Uri v2Uri = baseUri.resolveUri(Uri.parse('complex_reload/v2/main.dart')); Uri v3Uri = baseUri.resolveUri(Uri.parse('complex_reload/v3/main.dart')); Uri v2PackagesUri = baseUri.resolveUri(Uri.parse('complex_reload/v2/packages')); testMain() async { print(baseUri); debugger(); // Stop here. // Spawn the child isolate. I.Isolate isolate = await I.Isolate.spawnUri(spawnUri, [], null); print(isolate); debugger(); } Future invokeTest(Isolate isolate) async { await isolate.reload(); Library lib = isolate.rootLibrary; await lib.load(); Instance result = await lib.evaluate('test()') as Instance; expect(result.isString, isTrue); return result.valueAsString as String; } 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 spawned isolate. Isolate spawnedIsolate = vm.isolates.firstWhere((Isolate i) => i != mainIsolate); expect(spawnedIsolate, isNotNull); // Invoke test in v1. String v1 = await invokeTest(spawnedIsolate); expect(v1, 'apple'); // Reload to v2. var response = await spawnedIsolate.reloadSources( rootLibUri: v2Uri.toString(), packagesUri: v2PackagesUri.toString(), ); print(response); expect(response['success'], isTrue); // Invoke test in v2. String v2 = await invokeTest(spawnedIsolate); expect(v2, 'fooLib'); // Reload to v3. response = await spawnedIsolate.reloadSources( rootLibUri: v3Uri.toString(), ); expect(response['success'], isTrue); // Invoke test in v3. String v3 = await invokeTest(spawnedIsolate); expect(v3, 'cabbage'); } ]; main(args) => runIsolateTests(args, tests, testeeConcurrent: testMain);