3a73870244
Change-Id: I398232c5ed437600669c04910f5a62b6cd225f63 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/173400 Reviewed-by: Sigmund Cherem <sigmund@google.com> Commit-Queue: Joshua Litt <joshualitt@google.com>
305 lines
10 KiB
Dart
305 lines
10 KiB
Dart
// 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.
|
|
|
|
// @dart = 2.7
|
|
|
|
// Test the command line options of dart2js.
|
|
|
|
import 'dart:async';
|
|
|
|
import 'package:async_helper/async_helper.dart';
|
|
import 'package:expect/expect.dart';
|
|
|
|
import 'package:compiler/compiler_new.dart' as api;
|
|
import 'package:compiler/src/commandline_options.dart';
|
|
import 'package:compiler/src/dart2js.dart' as entry;
|
|
import 'package:compiler/src/options.dart' show CompilerOptions;
|
|
|
|
main() {
|
|
entry.enableWriteString = false;
|
|
asyncTest(() async {
|
|
await test([], exitCode: 1);
|
|
await test(['foo.dart'], out: 'out.js');
|
|
await test(['foo.dart', '-ofoo.js'], out: 'foo.js');
|
|
await test(['foo.dart', '--out=foo.js'], out: 'foo.js');
|
|
|
|
await test([Flags.cfeOnly], exitCode: 1);
|
|
await test([Flags.cfeOnly, 'foo.dart'], out: 'out.dill');
|
|
await test([Flags.cfeOnly, 'foo.dart', '--out=out.dill'], out: 'out.dill');
|
|
await test([Flags.cfeOnly, 'foo.dart', Flags.readClosedWorld], exitCode: 1);
|
|
await test(['foo.dart', Flags.readClosedWorld, Flags.cfeOnly], exitCode: 1);
|
|
await test([Flags.cfeOnly, 'foo.dart', Flags.readData], exitCode: 1);
|
|
await test(['foo.dart', Flags.readData, Flags.cfeOnly], exitCode: 1);
|
|
await test([Flags.cfeOnly, 'foo.dart', Flags.readCodegen], exitCode: 1);
|
|
await test(['foo.dart', Flags.readCodegen, Flags.cfeOnly], exitCode: 1);
|
|
await test([Flags.cfeOnly, 'foo.dart', Flags.writeClosedWorld],
|
|
exitCode: 1);
|
|
await test(['foo.dart', Flags.writeClosedWorld, Flags.cfeOnly],
|
|
exitCode: 1);
|
|
await test([Flags.cfeOnly, 'foo.dart', Flags.writeData], exitCode: 1);
|
|
await test(['foo.dart', Flags.writeData, Flags.cfeOnly], exitCode: 1);
|
|
await test([Flags.cfeOnly, 'foo.dart', Flags.writeCodegen], exitCode: 1);
|
|
await test(['foo.dart', Flags.writeCodegen, Flags.cfeOnly], exitCode: 1);
|
|
|
|
await test([Flags.writeData, 'foo.dart'],
|
|
out: 'out.dill', writeData: 'out.dill.data');
|
|
await test(['${Flags.writeData}=foo.data', 'foo.dart', '--out=foo.dill'],
|
|
out: 'foo.dill', writeData: 'foo.data');
|
|
await test([Flags.readClosedWorld, Flags.writeClosedWorld, 'foo.dart'],
|
|
exitCode: 1);
|
|
await test([Flags.writeClosedWorld, Flags.readClosedWorld, 'foo.dart'],
|
|
exitCode: 1);
|
|
await test([Flags.readData, Flags.writeData, 'foo.dart'], exitCode: 1);
|
|
await test([Flags.writeData, Flags.readData, 'foo.dart'], exitCode: 1);
|
|
await test([Flags.readCodegen, Flags.writeClosedWorld, 'foo.dart'],
|
|
exitCode: 1);
|
|
await test([Flags.readCodegen, Flags.writeData, 'foo.dart'], exitCode: 1);
|
|
await test([Flags.writeClosedWorld, Flags.readData, 'foo.dart'],
|
|
exitCode: 1);
|
|
await test([Flags.writeClosedWorld, Flags.readCodegen, 'foo.dart'],
|
|
exitCode: 1);
|
|
await test([Flags.writeData, Flags.readCodegen, 'foo.dart'], exitCode: 1);
|
|
|
|
await test([
|
|
Flags.writeClosedWorld,
|
|
'foo.dart',
|
|
], out: 'out.dill', writeClosedWorld: 'out.dill.world');
|
|
await test(
|
|
['${Flags.writeClosedWorld}=foo.world', 'foo.dart', '--out=foo.dill'],
|
|
out: 'foo.dill', writeClosedWorld: 'foo.world');
|
|
|
|
await test([Flags.readClosedWorld, 'foo.dill'],
|
|
out: 'out.js', readClosedWorld: 'foo.dill.world');
|
|
await test([Flags.readClosedWorld, 'foo.dill', '--out=foo.js'],
|
|
out: 'foo.js', readClosedWorld: 'foo.dill.world');
|
|
await test(['${Flags.readClosedWorld}=out.world', 'foo.world'],
|
|
out: 'out.js', readClosedWorld: 'out.world');
|
|
await test(
|
|
['${Flags.readClosedWorld}=out.world', 'foo.world', '--out=foo.js'],
|
|
out: 'foo.js', readClosedWorld: 'out.world');
|
|
await test(
|
|
[Flags.readClosedWorld, Flags.writeData, 'foo.dill'],
|
|
out: 'out.dill',
|
|
readClosedWorld: 'foo.dill.world',
|
|
writeData: 'out.dill.data',
|
|
);
|
|
await test([
|
|
'${Flags.readClosedWorld}=foo.world',
|
|
'${Flags.writeData}=foo.data',
|
|
'foo.dart',
|
|
'--out=foo.dill'
|
|
], out: 'foo.dill', readClosedWorld: 'foo.world', writeData: 'foo.data');
|
|
|
|
await test([Flags.readData, 'foo.dill'],
|
|
out: 'out.js', readData: 'foo.dill.data');
|
|
await test([Flags.readData, 'foo.dill', '--out=foo.js'],
|
|
out: 'foo.js', readData: 'foo.dill.data');
|
|
await test(['${Flags.readData}=out.data', 'foo.dill'],
|
|
out: 'out.js', readData: 'out.data');
|
|
await test(['${Flags.readData}=out.data', 'foo.dill', '--out=foo.js'],
|
|
out: 'foo.js', readData: 'out.data');
|
|
|
|
await test([
|
|
Flags.writeCodegen,
|
|
'foo.dill',
|
|
'${Flags.codegenShard}=0',
|
|
'${Flags.codegenShards}=2'
|
|
], exitCode: 1);
|
|
await test([
|
|
Flags.readData,
|
|
Flags.writeCodegen,
|
|
'foo.dill',
|
|
'${Flags.codegenShard}=0',
|
|
'${Flags.codegenShards}=2'
|
|
],
|
|
out: 'out',
|
|
readData: 'foo.dill.data',
|
|
writeCodegen: 'out.code',
|
|
codegenShard: 0,
|
|
codegenShards: 2);
|
|
await test([
|
|
Flags.writeCodegen,
|
|
Flags.readData,
|
|
'foo.dill',
|
|
'${Flags.codegenShard}=1',
|
|
'${Flags.codegenShards}=2'
|
|
],
|
|
out: 'out',
|
|
readData: 'foo.dill.data',
|
|
writeCodegen: 'out.code',
|
|
codegenShard: 1,
|
|
codegenShards: 2);
|
|
await test([
|
|
'${Flags.readData}=foo.data',
|
|
'${Flags.writeCodegen}=foo.code',
|
|
'foo.dill',
|
|
'${Flags.codegenShard}=0',
|
|
'${Flags.codegenShards}=3'
|
|
],
|
|
out: 'out',
|
|
readData: 'foo.data',
|
|
writeCodegen: 'foo.code',
|
|
codegenShard: 0,
|
|
codegenShards: 3);
|
|
await test([
|
|
'${Flags.readData}=foo.data',
|
|
'${Flags.writeCodegen}',
|
|
'foo.dill',
|
|
'--out=foo.js',
|
|
'${Flags.codegenShard}=0',
|
|
'${Flags.codegenShards}=2'
|
|
],
|
|
out: 'foo.js',
|
|
readData: 'foo.data',
|
|
writeCodegen: 'foo.js.code',
|
|
codegenShard: 0,
|
|
codegenShards: 2);
|
|
await test([Flags.writeCodegen, 'foo.dill', Flags.readCodegen],
|
|
exitCode: 1);
|
|
await test([Flags.readCodegen, Flags.writeCodegen, 'foo.dill'],
|
|
exitCode: 1);
|
|
await test(
|
|
[Flags.readData, Flags.writeCodegen, 'foo.dill', Flags.readCodegen],
|
|
exitCode: 1);
|
|
await test(
|
|
[Flags.readCodegen, Flags.readData, Flags.writeCodegen, 'foo.dill'],
|
|
exitCode: 1);
|
|
await test([
|
|
Flags.readData,
|
|
Flags.writeCodegen,
|
|
'foo.dill',
|
|
], exitCode: 1);
|
|
await test([
|
|
Flags.readData,
|
|
Flags.writeCodegen,
|
|
'foo.dill',
|
|
'${Flags.codegenShard}=0'
|
|
], exitCode: 1);
|
|
await test([
|
|
Flags.readData,
|
|
Flags.writeCodegen,
|
|
'foo.dill',
|
|
'${Flags.codegenShards}=2'
|
|
], exitCode: 1);
|
|
await test([
|
|
Flags.readData,
|
|
Flags.writeCodegen,
|
|
'foo.dill',
|
|
'${Flags.codegenShards}=0'
|
|
], exitCode: 1);
|
|
await test([
|
|
Flags.readData,
|
|
Flags.writeCodegen,
|
|
'foo.dill',
|
|
'${Flags.codegenShard}=-1',
|
|
'${Flags.codegenShards}=2'
|
|
], exitCode: 1);
|
|
await test([
|
|
Flags.readData,
|
|
Flags.writeCodegen,
|
|
'foo.dill',
|
|
'${Flags.codegenShard}=2',
|
|
'${Flags.codegenShards}=2'
|
|
], exitCode: 1);
|
|
|
|
await test([Flags.readCodegen, 'foo.dill', '${Flags.codegenShards}=2'],
|
|
out: 'out.js',
|
|
readData: 'foo.dill.data',
|
|
readCodegen: 'foo.dill.code',
|
|
codegenShards: 2);
|
|
await test([
|
|
'${Flags.readCodegen}=foo.code',
|
|
'foo.dill',
|
|
'${Flags.codegenShards}=3'
|
|
],
|
|
out: 'out.js',
|
|
readData: 'foo.dill.data',
|
|
readCodegen: 'foo.code',
|
|
codegenShards: 3);
|
|
|
|
await test([
|
|
Flags.readData,
|
|
Flags.readCodegen,
|
|
'foo.dill',
|
|
'${Flags.codegenShards}=2'
|
|
],
|
|
out: 'out.js',
|
|
readData: 'foo.dill.data',
|
|
readCodegen: 'foo.dill.code',
|
|
codegenShards: 2);
|
|
await test([
|
|
'${Flags.readData}=foo.data',
|
|
'${Flags.readCodegen}=foo.code',
|
|
'foo.dill',
|
|
'${Flags.codegenShards}=3',
|
|
'-v'
|
|
],
|
|
out: 'out.js',
|
|
readData: 'foo.data',
|
|
readCodegen: 'foo.code',
|
|
codegenShards: 3);
|
|
});
|
|
}
|
|
|
|
Future test(List<String> arguments,
|
|
{int exitCode,
|
|
String out,
|
|
String readClosedWorld,
|
|
String writeClosedWorld,
|
|
String readData,
|
|
String writeData,
|
|
String readCodegen,
|
|
String writeCodegen,
|
|
int codegenShard,
|
|
int codegenShards}) async {
|
|
print('--------------------------------------------------------------------');
|
|
print('dart2js ${arguments.join(' ')}');
|
|
print('--------------------------------------------------------------------');
|
|
entry.CompileFunc oldCompileFunc = entry.compileFunc;
|
|
entry.ExitFunc oldExitFunc = entry.exitFunc;
|
|
|
|
CompilerOptions options;
|
|
int actualExitCode;
|
|
entry.compileFunc = (_options, input, diagnostics, output) {
|
|
options = _options;
|
|
return new Future<api.CompilationResult>.value(
|
|
new api.CompilationResult(null));
|
|
};
|
|
entry.exitFunc = (_exitCode) {
|
|
actualExitCode = _exitCode;
|
|
throw 'exited';
|
|
};
|
|
try {
|
|
await entry.compilerMain(arguments);
|
|
} catch (e, s) {
|
|
Expect.equals('exited', e, "Unexpected exception: $e\n$s");
|
|
}
|
|
Expect.equals(exitCode, actualExitCode, "Unexpected exit code");
|
|
if (actualExitCode == null) {
|
|
Expect.isNotNull(options, "Missing options object");
|
|
Expect.equals(toUri(out), options.outputUri, "Unexpected output uri.");
|
|
Expect.equals(toUri(readClosedWorld), options.readClosedWorldUri,
|
|
"Unexpected readClosedWorld uri");
|
|
Expect.equals(toUri(writeClosedWorld), options.writeClosedWorldUri,
|
|
"Unexpected writeClosedWorld uri");
|
|
Expect.equals(
|
|
toUri(readData), options.readDataUri, "Unexpected readData uri");
|
|
Expect.equals(
|
|
toUri(writeData), options.writeDataUri, "Unexpected writeData uri");
|
|
Expect.equals(toUri(readCodegen), options.readCodegenUri,
|
|
"Unexpected readCodegen uri");
|
|
Expect.equals(toUri(writeCodegen), options.writeCodegenUri,
|
|
"Unexpected writeCodegen uri");
|
|
Expect.equals(
|
|
codegenShard, options.codegenShard, "Unexpected codegenShard uri");
|
|
Expect.equals(
|
|
codegenShards, options.codegenShards, "Unexpected codegenShards uri");
|
|
}
|
|
|
|
entry.compileFunc = oldCompileFunc;
|
|
entry.exitFunc = oldExitFunc;
|
|
}
|
|
|
|
Uri toUri(String path) => path != null ? Uri.base.resolve(path) : null;
|