blob: 36d824af11148e867d511874395fd52e31d49061 [file] [edit]
// Copyright (c) 2026, 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:io';
import 'package:dartdev/src/sdk.dart';
import 'package:test/test.dart';
import 'utils.dart';
void main() {
ensureRunFromSdkBinDart();
group('Environment modification', () {
test('run command sets DART_ROOT', () async {
final p = project(
mainSrc: '''
import 'dart:io';
void main() {
print('DART_ROOT: \${Platform.environment['DART_ROOT']}');
}
''',
);
final result = await p.run(['run', p.relativeFilePath]);
expect(result.exitCode, 0);
// The environment variable was set in the parent isolate (dartdev)
// via VmInteropHandler.setEnvironmentVariable before the run command
// spawned the new isolate.
expect(result.stdout, contains('DART_ROOT: ${sdk.sdkPath}'));
});
test('run command does not overwrite existing DART_ROOT', () async {
final p = project(
mainSrc: '''
import 'dart:io';
void main() {
print('DART_ROOT: \${Platform.environment['DART_ROOT']}');
}
''',
);
final result = await Process.run(
Platform.resolvedExecutable,
['run', p.relativeFilePath],
workingDirectory: p.dir.path,
environment: {
'PUB_CACHE': p.pubCachePath,
'DART_ROOT': 'original_value',
},
);
expect(result.exitCode, 0);
// The environment variable was already set to 'original_value',
// so dartdev should not overwrite it.
expect(result.stdout, contains('DART_ROOT: original_value'));
});
test('run command sets DASH__TOOL and DASH__SUPPRESS_ANALYTICS', () async {
final p = project(
mainSrc: '''
import 'dart:io';
void main() {
print('DASH__TOOL: \${Platform.environment['DASH__TOOL']}');
print('DASH__SUPPRESS_ANALYTICS: '
'\${Platform.environment['DASH__SUPPRESS_ANALYTICS']}');
}
''',
);
final result = await Process.run(
Platform.resolvedExecutable,
['run', p.relativeFilePath],
workingDirectory: p.dir.path,
environment: {
'PUB_CACHE': p.pubCachePath,
// Force 'BOT': 'false' to ensure that the test is not affected if the
// test suite itself is running in a CI / bot environment, which would
// otherwise implicitly suppress analytics.
'BOT': 'false',
},
);
expect(result.exitCode, 0);
expect(result.stdout, contains('DASH__TOOL: dart-tool'));
expect(result.stdout, contains('DASH__SUPPRESS_ANALYTICS: false'));
});
test('run command preserves existing DASH__TOOL', () async {
final p = project(
mainSrc: '''
import 'dart:io';
void main() {
print('DASH__TOOL: \${Platform.environment['DASH__TOOL']}');
}
''',
);
final result = await Process.run(
Platform.resolvedExecutable,
['run', p.relativeFilePath],
workingDirectory: p.dir.path,
environment: {
'PUB_CACHE': p.pubCachePath,
'DASH__TOOL': 'flutter-tool',
},
);
expect(result.exitCode, 0);
expect(result.stdout, contains('DASH__TOOL: flutter-tool'));
});
test(
'--suppress-analytics propagates DASH__SUPPRESS_ANALYTICS=true',
() async {
final p = project(
mainSrc: '''
import 'dart:io';
void main() {
print('DASH__SUPPRESS_ANALYTICS: '
'\${Platform.environment['DASH__SUPPRESS_ANALYTICS']}');
}
''',
);
final result = await Process.run(
Platform.resolvedExecutable,
['--suppress-analytics', 'run', p.relativeFilePath],
workingDirectory: p.dir.path,
environment: {
'PUB_CACHE': p.pubCachePath,
},
);
expect(result.exitCode, 0);
expect(result.stdout, contains('DASH__SUPPRESS_ANALYTICS: true'));
},
);
test(
'parent env DASH__SUPPRESS_ANALYTICS=true propagates as true',
() async {
final p = project(
mainSrc: '''
import 'dart:io';
void main() {
print('DASH__SUPPRESS_ANALYTICS: '
'\${Platform.environment['DASH__SUPPRESS_ANALYTICS']}');
}
''',
);
final result = await Process.run(
Platform.resolvedExecutable,
['run', p.relativeFilePath],
workingDirectory: p.dir.path,
environment: {
'PUB_CACHE': p.pubCachePath,
'DASH__SUPPRESS_ANALYTICS': 'true',
},
);
expect(result.exitCode, 0);
expect(result.stdout, contains('DASH__SUPPRESS_ANALYTICS: true'));
},
);
});
}