96c8aff4ce
These tests are currently run with the ES6 module format. This expands and refactors the test suite to also test the DDC library bundle module format. Refactoring is mostly limited to better naming and structuring of parameters. Change-Id: If2a813af1a503e18d74dd4eec57eac4ecc8a3f35 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/424880 Reviewed-by: Nicholas Shahan <nshahan@google.com>
130 lines
4.0 KiB
Dart
130 lines
4.0 KiB
Dart
// Copyright (c) 2017, 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:dev_compiler/src/command/arguments.dart';
|
|
import 'package:dev_compiler/src/command/command.dart';
|
|
import 'package:front_end/src/api_unstable/ddc.dart' as fe;
|
|
import 'package:sourcemap_testing/src/stepping_helper.dart';
|
|
import 'package:testing/testing.dart';
|
|
|
|
import 'common.dart';
|
|
import 'ddc_common.dart';
|
|
|
|
Future<ChainContext> createContext(
|
|
Chain suite, Map<String, String> environment) async {
|
|
return SourceMapContext(environment);
|
|
}
|
|
|
|
class SourceMapContext extends ChainContextWithCleanupHelper
|
|
implements WithCompilerState {
|
|
final Map<String, String> environment;
|
|
@override
|
|
fe.InitializedCompilerState? compilerState;
|
|
|
|
SourceMapContext(this.environment);
|
|
|
|
List<Step>? _steps;
|
|
|
|
@override
|
|
List<Step> get steps {
|
|
return _steps ??= <Step>[
|
|
const Setup(),
|
|
Compile(DevCompilerRunner(this, debugging: debugging())),
|
|
const StepWithD8(),
|
|
CheckSteps(debugging()),
|
|
];
|
|
}
|
|
|
|
@override
|
|
bool debugging() => environment.containsKey('debug');
|
|
}
|
|
|
|
class DevCompilerRunner implements CompilerRunner {
|
|
final WithCompilerState context;
|
|
final bool debugging;
|
|
final String moduleFormat;
|
|
final bool canary;
|
|
|
|
const DevCompilerRunner(this.context,
|
|
{this.debugging = false, this.moduleFormat = 'es6', this.canary = false});
|
|
|
|
@override
|
|
Future<Null> run(Uri inputFile, Uri outputFile, Uri outWrapperFile) async {
|
|
Uri sdkJsFile;
|
|
Uri? ddcModuleLoaderFile;
|
|
if (moduleFormat == 'es6') {
|
|
sdkJsFile = findInOutDir('gen/utils/ddc/stable/sdk/es6/dart_sdk.js').uri;
|
|
} else {
|
|
assert(moduleFormat == 'ddc' && canary);
|
|
sdkJsFile = findInOutDir('gen/utils/ddc/canary/sdk/ddc/dart_sdk.js').uri;
|
|
ddcModuleLoaderFile =
|
|
findInOutDir('dart-sdk/lib/dev_compiler/ddc/ddc_module_loader.js')
|
|
.uri;
|
|
}
|
|
|
|
var ddcSdkSummary = findInOutDir('ddc_outline.dill');
|
|
var packageConfigPath =
|
|
sdkRoot!.uri.resolve('.dart_tool/package_config.json').toFilePath();
|
|
var args = <String>[
|
|
'--batch',
|
|
'--packages=$packageConfigPath',
|
|
'--modules=$moduleFormat',
|
|
if (canary) '--canary',
|
|
'--dart-sdk-summary=${ddcSdkSummary.path}',
|
|
'-o',
|
|
outputFile.toFilePath(),
|
|
inputFile.toFilePath()
|
|
];
|
|
|
|
var succeeded = false;
|
|
try {
|
|
var result = await compile(ParsedArguments.from(args),
|
|
compilerState: context.compilerState);
|
|
context.compilerState =
|
|
result.compilerState as fe.InitializedCompilerState?;
|
|
succeeded = result.success;
|
|
} catch (e, s) {
|
|
print('Unhandled exception:');
|
|
print(e);
|
|
print(s);
|
|
}
|
|
|
|
if (!succeeded) {
|
|
var ddc = getDdcDir().uri.resolve('bin/dartdevc.dart');
|
|
|
|
throw 'Error from ddc when executing with something like '
|
|
'$dartExecutable ${ddc.toFilePath()} '
|
|
"${args.reduce((value, element) => '$value "$element"')}";
|
|
}
|
|
|
|
var jsContent = File.fromUri(outputFile).readAsStringSync();
|
|
File.fromUri(outputFile).writeAsStringSync(jsContent.replaceFirst(
|
|
"from 'dart_sdk.js'", "from '${uriPathForwardSlashed(sdkJsFile)}'"));
|
|
|
|
if (debugging) {
|
|
createHtmlWrapper(
|
|
inputFile: inputFile,
|
|
sdkJsFile: sdkJsFile,
|
|
outputFile: outputFile,
|
|
jsContent: jsContent,
|
|
outputFilename: outputFile.pathSegments.last,
|
|
moduleFormat: moduleFormat,
|
|
canary: canary);
|
|
}
|
|
|
|
File.fromUri(outWrapperFile).writeAsStringSync(getWrapperContent(
|
|
sdkJsFile: sdkJsFile,
|
|
ddcModuleLoaderFile: ddcModuleLoaderFile,
|
|
inputFile: inputFile,
|
|
outputFile: outputFile,
|
|
moduleFormat: moduleFormat,
|
|
canary: canary));
|
|
}
|
|
}
|
|
|
|
void main(List<String> arguments) =>
|
|
runMe(arguments, createContext, configurationPath: 'testing.json');
|