Index: pkg/kernel/test/closures/suite.dart |
diff --git a/pkg/kernel/test/closures/suite.dart b/pkg/kernel/test/closures/suite.dart |
index 2c4172be7db0e6eeec588ed0295f0c70539d2029..fdafe6327d28445b22c2f349abf2e8c02befb3a4 100644 |
--- a/pkg/kernel/test/closures/suite.dart |
+++ b/pkg/kernel/test/closures/suite.dart |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
+// 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.md file. |
@@ -6,166 +6,143 @@ library test.kernel.closures.suite; |
import 'dart:async' show Future; |
-import 'dart:io' show Directory, File, Platform; |
- |
import 'package:analyzer/src/generated/sdk.dart' show DartSdk; |
-import 'package:analyzer/src/kernel/loader.dart' |
- show DartLoader, DartOptions, createDartSdk; |
- |
-import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget; |
- |
-import 'kernel_chain.dart' |
- show MatchExpectation, Print, ReadDill, SanityCheck, WriteDill; |
+import 'package:analyzer/src/kernel/loader.dart' show DartLoader; |
import 'package:testing/testing.dart' |
- show |
- Chain, |
- ChainContext, |
- Result, |
- StdioProcess, |
- Step, |
- TestDescription, |
- runMe; |
+ show Chain, Result, Step, TestDescription, runMe; |
-import 'package:kernel/ast.dart' show Program; |
+import 'package:kernel/ast.dart' show Program, Library; |
import 'package:kernel/transformations/closure_conversion.dart' |
as closure_conversion; |
-import 'package:package_config/discovery.dart' show loadPackagesFile; |
+import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget; |
-class TestContext extends ChainContext { |
- final Uri vm; |
+import 'package:front_end/src/fasta/testing/kernel_chain.dart' |
+ show TestContext, Print, MatchExpectation, WriteDill, ReadDill, Verify; |
- final Uri packages; |
+import 'package:front_end/src/fasta/ticker.dart' show Ticker; |
- final DartOptions options; |
+import 'package:front_end/src/fasta/dill/dill_target.dart' show DillTarget; |
- final DartSdk dartSdk; |
+import 'package:front_end/src/fasta/kernel/kernel_target.dart' |
+ show KernelTarget; |
+ |
+import 'package:front_end/src/fasta/translate_uri.dart' show TranslateUri; |
+ |
+import 'package:front_end/src/fasta/errors.dart' show InputError; |
+ |
+class ClosureConversionContext extends TestContext { |
+ final TranslateUri uriTranslator; |
final List<Step> steps; |
- TestContext(String sdk, this.vm, Uri packages, bool strongMode, this.dartSdk, |
- bool updateExpectations) |
- : packages = packages, |
- options = new DartOptions( |
- strongMode: strongMode, |
- sdk: sdk, |
- packagePath: packages.toFilePath()), |
- steps = <Step>[ |
- const Kernel(), |
+ Future<Program> platform; |
+ |
+ ClosureConversionContext(Uri sdk, Uri vm, Uri packages, bool strongMode, |
+ DartSdk dartSdk, bool updateExpectations, this.uriTranslator) |
+ : steps = <Step>[ |
+ const FastaCompile(), |
const Print(), |
- const SanityCheck(), |
+ const Verify(true), |
const ClosureConversion(), |
const Print(), |
- const SanityCheck(), |
+ const Verify(true), |
new MatchExpectation(".expect", |
updateExpectations: updateExpectations), |
const WriteDill(), |
const ReadDill(), |
// TODO(29143): uncomment this when Vectors are added to VM. |
//const Run(), |
- ]; |
- |
- Future<DartLoader> createLoader() async { |
- Program repository = new Program(); |
- return new DartLoader(repository, options, await loadPackagesFile(packages), |
- dartSdk: dartSdk); |
+ ], |
+ super(sdk, vm, packages, strongMode, dartSdk); |
+ |
+ Future<Program> createPlatform() { |
+ return new Future<Program>(() async { |
+ DartLoader loader = await createLoader(); |
+ Target target = |
+ getTarget("vm", new TargetFlags(strongMode: options.strongMode)); |
+ loader.loadProgram(Uri.base.resolve("pkg/fasta/test/platform.dart"), |
+ target: target); |
+ var program = loader.program; |
+ if (loader.errors.isNotEmpty) { |
+ throw loader.errors.join("\n"); |
+ } |
+ Library mainLibrary = program.mainMethod.enclosingLibrary; |
+ program.uriToSource.remove(mainLibrary.fileUri); |
+ program = new Program( |
+ program.libraries.where((Library l) => l != mainLibrary).toList(), |
+ program.uriToSource); |
+ target.performModularTransformations(program); |
+ target.performGlobalTransformations(program); |
+ return program; |
+ }); |
} |
-} |
-enum Environment { |
- directory, |
- file, |
-} |
- |
-Future<String> getEnvironmentVariable( |
- String name, Environment kind, String undefined, notFound(String n)) async { |
- String result = Platform.environment[name]; |
- if (result == null) { |
- throw undefined; |
- } |
- switch (kind) { |
- case Environment.directory: |
- if (!await new Directory(result).exists()) throw notFound(result); |
- break; |
- |
- case Environment.file: |
- if (!await new File(result).exists()) throw notFound(result); |
- break; |
+ static Future<ClosureConversionContext> create( |
+ Chain suite, Map<String, String> environment) async { |
+ return TestContext.create(suite, environment, (Chain suite, |
+ Map<String, String> environment, |
+ Uri sdk, |
+ Uri vm, |
+ Uri packages, |
+ bool strongMode, |
+ DartSdk dartSdk, |
+ bool updateExpectations) async { |
+ TranslateUri uriTranslator = await TranslateUri.parse(packages); |
+ return new ClosureConversionContext(sdk, vm, packages, strongMode, |
+ dartSdk, updateExpectations, uriTranslator); |
+ }); |
} |
- return result; |
-} |
- |
-Future<bool> fileExists(Uri base, String path) async { |
- return await new File.fromUri(base.resolve(path)).exists(); |
} |
-Future<TestContext> createContext( |
+Future<ClosureConversionContext> createContext( |
Chain suite, Map<String, String> environment) async { |
- const String suggestion = """Try building the patched SDK by running |
- 'tools/build.py patched_sdk'"""; |
- |
- // TODO(karlklose): The path is different on MacOS. |
- String sdk = "out/DebugX64/patched_sdk/"; |
- Uri sdkUri = Uri.base.resolve(sdk); |
- const String asyncDart = "lib/async/async.dart"; |
- if (!await fileExists(sdkUri, asyncDart)) { |
- throw "Couldn't find the patched SDK. $suggestion"; |
- } |
- const String asyncSources = "lib/async/async_sources.gypi"; |
- if (await fileExists(sdkUri, asyncSources)) { |
- throw "Found '$asyncSources' in '$sdk', so it isn't a patched SDK. " |
- "$suggestion"; |
- } |
- |
- // TODO(karlklose): select the VM based on the mode. |
- Uri vm = Uri.base.resolve("out/ReleaseX64/dart"); |
- |
- Uri packages = Uri.base.resolve(".packages"); |
- bool strongMode = false; |
- bool updateExpectations = const String.fromEnvironment("updateExpectations", |
- defaultValue: "false") == |
- "true"; |
- return new TestContext(sdk, vm, packages, strongMode, |
- createDartSdk(sdk, strongMode: strongMode), updateExpectations); |
+ environment["updateExpectations"] = |
+ const String.fromEnvironment("updateExpectations"); |
+ return ClosureConversionContext.create(suite, environment); |
} |
-class Kernel extends Step<TestDescription, Program, TestContext> { |
- const Kernel(); |
+class FastaCompile |
+ extends Step<TestDescription, Program, ClosureConversionContext> { |
+ const FastaCompile(); |
- String get name => "kernel"; |
+ String get name => "fasta compilation"; |
Future<Result<Program>> run( |
- TestDescription description, TestContext testContext) async { |
+ TestDescription description, ClosureConversionContext context) async { |
+ Program platform = await context.createPlatform(); |
+ Ticker ticker = new Ticker(); |
+ DillTarget dillTarget = new DillTarget(ticker, context.uriTranslator); |
+ dillTarget.loader |
+ ..input = Uri.parse("org.dartlang:platform") // Make up a name. |
+ ..setProgram(platform); |
+ KernelTarget sourceTarget = |
+ new KernelTarget(dillTarget, context.uriTranslator); |
+ |
+ Program p; |
try { |
- DartLoader loader = await testContext.createLoader(); |
- Target target = getTarget( |
- "vm", new TargetFlags(strongMode: testContext.options.strongMode)); |
- String path = description.file.path; |
- Uri uri = Uri.base.resolve(path); |
- loader.loadProgram(uri, target: target); |
- var program = loader.program; |
- for (var error in loader.errors) { |
- return fail(program, "$error"); |
- } |
- target |
- ..performModularTransformations(program) |
- ..performGlobalTransformations(program); |
- return pass(program); |
- } catch (e, s) { |
- return crash(e, s); |
+ sourceTarget.read(description.uri); |
+ await dillTarget.writeOutline(null); |
+ await sourceTarget.writeOutline(null); |
+ p = await sourceTarget.writeProgram(null); |
+ } on InputError catch (e, s) { |
+ return fail(null, e.error, s); |
} |
+ return pass(p); |
} |
} |
-class ClosureConversion extends Step<Program, Program, TestContext> { |
+class ClosureConversion |
+ extends Step<Program, Program, ClosureConversionContext> { |
const ClosureConversion(); |
String get name => "closure conversion"; |
- Future<Result<Program>> run(Program program, TestContext testContext) async { |
+ Future<Result<Program>> run( |
+ Program program, ClosureConversionContext testContext) async { |
try { |
program = closure_conversion.transformProgram(program); |
return pass(program); |
@@ -175,23 +152,4 @@ class ClosureConversion extends Step<Program, Program, TestContext> { |
} |
} |
-class Run extends Step<Uri, int, TestContext> { |
- const Run(); |
- |
- String get name => "run"; |
- |
- Future<Result<int>> run(Uri uri, TestContext context) async { |
- File generated = new File.fromUri(uri); |
- StdioProcess process; |
- try { |
- process = await StdioProcess |
- .run(context.vm.toFilePath(), [generated.path, "Hello, World!"]); |
- print(process.output); |
- } finally { |
- generated.parent.delete(recursive: true); |
- } |
- return process.toResult(); |
- } |
-} |
- |
main(List<String> arguments) => runMe(arguments, createContext, "testing.json"); |