[ CLI ] Fix dart run --enable-experiment

Fixes issue where --enable-experiment options passed after `dart
run` weren't being handled by the VM.

Fixes https://github.com/dart-lang/sdk/issues/50205

TEST=pkg/dartdev/test/commands/run_test.dart

Change-Id: Ia9c585a16756fd4450cfd159a1b9864ebfb6d200
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/264200
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
This commit is contained in:
Ben Konyi 2022-10-18 13:42:32 +00:00 committed by Commit Queue
parent bc7094dbc1
commit 39168c9ef0
2 changed files with 35 additions and 1 deletions

View file

@ -107,6 +107,39 @@ void run() {
expect(result.exitCode, 255);
});
test('experiments are enabled correctly', () async {
// TODO(bkonyi): find a more robust way to test experiments by exposing
// enabled experiments for an isolate (e.g., through dart:developer or the
// VM service).
//
// See https://github.com/dart-lang/sdk/issues/50230
p = project();
p.file('main.dart', 'void main(args) { print("Record: \${(1, 2)}"); }');
ProcessResult result = await p.run([
'run',
'--enable-experiment=records',
'main.dart',
]);
// The records experiment should be enabled.
expect(result.stdout, contains('Record: '));
expect(result.stderr, isEmpty);
expect(result.exitCode, 0);
// Run again with the experiment disabled to make sure the test is actually
// working as expected.
result = await p.run([
'run',
'main.dart',
]);
// The records experiment should not be enabled and the program should fail
// to run.
expect(result.stdout, isEmpty);
expect(result.stderr, isNotEmpty);
expect(result.exitCode, 254);
});
test('arguments are properly passed', () async {
p = project();
p.file('main.dart', 'void main(args) { print(args); }');

View file

@ -415,7 +415,8 @@ bool Options::ProcessVMDebuggingOptions(const char* arg,
V("--pause-isolates-on-unhandled-exception", arg) \
V("--no-pause-isolates-on-unhandled-exception", arg) \
V("--warn-on-pause-with-no-debugger", arg) \
V("--no-warn-on-pause-with-no-debugger", arg)
V("--no-warn-on-pause-with-no-debugger", arg) \
V("--enable-experiment", arg)
HANDLE_DARTDEV_VM_DEBUG_OPTIONS(IS_DEBUG_OPTION, arg);
#undef IS_DEBUG_OPTION