blob: 2e2c1689df64762ffce542a10f7d35142d7e667d [file] [log] [blame]
// Copyright (c) 2023, 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:io';
import 'package:expect/expect.dart';
import 'package:path/path.dart' as path;
import 'isolates/reload_utils.dart';
Future main() async {
if (!currentVmSupportsReload) return;
await withTempDir((String tempDir) async {
final filename = path.join(tempDir, 'testee.dart');
File(filename).writeAsStringSync(dartTestFile('AA', 'BB'));
final helper = await launchOn(filename);
await helper.waitUntilStdoutContains('READY :-)');
final json = await helper.invokeServiceExtension('ext.myextension');
print('Got result: "$json"');
Expect.isTrue(json['identical'] as bool);
Expect.equals('BB', json['value']);
final int exitCode = await helper.close();
Expect.equals(0, exitCode);
});
}
String dartTestFile(String zoneKey, String zoneValue) =>
'''
import 'dart:async';
import 'dart:convert';
import 'dart:isolate';
import 'dart:developer';
const token = '__token__';
void main() {
print('Waiting for reload');
final rp = ReceivePort();
runZoned(() {
final expectedZone = Zone.current;
registerExtension('ext.myextension', (_, __) async {
final zonesIdentical = identical(expectedZone, Zone.current);
final zoneValue = Zone.current['$zoneKey'];
final result = {
'identical': zonesIdentical,
'value' : '$zoneValue',
};
rp.close();
return ServiceExtensionResponse.result(json.encode(result));
});
}, zoneValues: {'$zoneKey': '$zoneValue'});
print('READY :-)');
}
''';