Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE.md file. | |
| 4 | |
| 5 library test.kernel.closures.suite; | |
| 6 | |
| 7 import 'dart:async' show Future; | |
| 8 | |
| 9 import 'dart:io' show File; | |
| 10 | |
| 11 import 'package:analyzer/src/generated/sdk.dart' show DartSdk; | |
| 12 | |
| 13 import 'package:analyzer/src/kernel/loader.dart' show DartLoader; | |
| 14 | |
| 15 import 'package:testing/testing.dart' | |
| 16 show Chain, Result, Step, TestDescription, runMe; | |
| 17 | |
| 18 import 'package:kernel/ast.dart' show Program, Library; | |
| 19 | |
| 20 import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget; | |
| 21 | |
| 22 import 'package:front_end/src/fasta/testing/kernel_chain.dart'; | |
| 23 | |
| 24 import 'package:front_end/src/fasta/ticker.dart' show Ticker; | |
| 25 | |
| 26 import 'package:front_end/src/fasta/dill/dill_target.dart' show DillTarget; | |
| 27 | |
| 28 import 'package:front_end/src/fasta/kernel/kernel_target.dart' | |
| 29 show KernelTarget; | |
| 30 | |
| 31 import 'package:front_end/src/fasta/translate_uri.dart' show TranslateUri; | |
| 32 | |
| 33 import 'package:front_end/src/fasta/errors.dart' show InputError; | |
| 34 | |
| 35 import 'package:kernel/interpreter/interpreter.dart'; | |
| 36 | |
| 37 class InterpreterContext extends TestContext { | |
| 38 final TranslateUri uriTranslator; | |
| 39 | |
| 40 final List<Step> steps; | |
| 41 | |
| 42 Future<Program> platform; | |
| 43 | |
| 44 InterpreterContext(Uri sdk, Uri vm, Uri packages, bool strongMode, | |
| 45 DartSdk dartSdk, this.uriTranslator) | |
| 46 : steps = <Step>[ | |
| 47 const FastaCompile(), | |
| 48 const Interpret(".expect"), | |
| 49 ], | |
| 50 super(sdk, vm, packages, strongMode, dartSdk); | |
| 51 | |
| 52 Future<Program> createPlatform() { | |
| 53 return new Future<Program>(() async { | |
| 54 DartLoader loader = await createLoader(); | |
| 55 Target target = | |
| 56 getTarget("vm", new TargetFlags(strongMode: options.strongMode)); | |
| 57 loader.loadProgram(Uri.base.resolve("pkg/fasta/test/platform.dart"), | |
| 58 target: target); | |
| 59 var program = loader.program; | |
| 60 if (loader.errors.isNotEmpty) { | |
| 61 throw loader.errors.join("\n"); | |
| 62 } | |
| 63 Library mainLibrary = program.mainMethod.enclosingLibrary; | |
| 64 program.uriToSource.remove(mainLibrary.fileUri); | |
| 65 program = new Program( | |
| 66 program.libraries.where((Library l) => l != mainLibrary).toList(), | |
| 67 program.uriToSource); | |
| 68 target.performModularTransformations(program); | |
| 69 target.performGlobalTransformations(program); | |
| 70 return program; | |
| 71 }); | |
| 72 } | |
| 73 | |
| 74 static Future<InterpreterContext> create( | |
| 75 Chain suite, Map<String, String> environment) async { | |
| 76 return TestContext.create(suite, environment, (Chain suite, | |
| 77 Map<String, String> environment, | |
| 78 Uri sdk, | |
| 79 Uri vm, | |
| 80 Uri packages, | |
| 81 bool strongMode, | |
| 82 DartSdk dartSdk, | |
| 83 bool updateExpectations) async { | |
| 84 TranslateUri uriTranslator = await TranslateUri.parse(packages); | |
| 85 return new InterpreterContext( | |
| 86 sdk, vm, packages, strongMode, dartSdk, uriTranslator); | |
| 87 }); | |
| 88 } | |
| 89 } | |
| 90 | |
| 91 class FastaCompile extends Step<TestDescription, Program, InterpreterContext> { | |
| 92 const FastaCompile(); | |
| 93 | |
| 94 String get name => "fasta compile"; | |
| 95 | |
| 96 Future<Result<Program>> run( | |
| 97 TestDescription description, InterpreterContext context) async { | |
| 98 Program platform = await context.createPlatform(); | |
| 99 Ticker ticker = new Ticker(); | |
| 100 DillTarget dillTarget = new DillTarget(ticker, context.uriTranslator); | |
| 101 dillTarget.loader | |
| 102 ..input = Uri.parse("org.dartlang:platform") | |
| 103 ..setProgram(platform); | |
| 104 KernelTarget sourceTarget = | |
| 105 new KernelTarget(dillTarget, context.uriTranslator, false); | |
| 106 | |
| 107 Program p; | |
| 108 try { | |
| 109 sourceTarget.read(description.uri); | |
| 110 await dillTarget.writeOutline(null); | |
| 111 await sourceTarget.writeOutline(null); | |
| 112 p = await sourceTarget.writeProgram(null); | |
| 113 } on InputError catch (e, s) { | |
| 114 return fail(null, e.error, s); | |
| 115 } | |
| 116 | |
| 117 return pass(p); | |
| 118 } | |
| 119 } | |
| 120 | |
| 121 class Interpret extends Step<Program, Program, TestContext> { | |
|
Dmitry Stefantsov
2017/05/01 09:35:23
I think it's better to split Interpret into two st
zhivkag
2017/05/01 11:36:20
Good idea, thanks!
| |
| 122 final String suffix; | |
| 123 | |
| 124 const Interpret(this.suffix); | |
| 125 | |
| 126 String get name => "interpret"; | |
| 127 | |
| 128 Future<Result<Program>> run(Program program, _) async { | |
| 129 Library library = program.libraries | |
| 130 .firstWhere((Library library) => library.importUri.scheme != "dart"); | |
| 131 Uri uri = library.importUri; | |
| 132 | |
| 133 StringBuffer buffer = new StringBuffer(); | |
| 134 log.onRecord.listen((LogRecord rec) => buffer.write(rec.message)); | |
| 135 | |
| 136 new Interpreter(program).run(); | |
| 137 | |
| 138 File expectedFile = new File("${uri.toFilePath()}$suffix"); | |
| 139 if (await expectedFile.exists()) { | |
| 140 String expected = await expectedFile.readAsString(); | |
| 141 if (expected.trim() != "$buffer".trim()) { | |
| 142 String diff = await runDiff(expectedFile.uri, "$buffer"); | |
| 143 return fail(null, "$uri doesn't match ${expectedFile.uri}\n$diff"); | |
| 144 } else { | |
| 145 return pass(program); | |
| 146 } | |
| 147 } | |
| 148 return fail( | |
| 149 program, | |
| 150 """Please create file ${expectedFile.path} with this content: | |
| 151 $buffer"""); | |
| 152 } | |
| 153 } | |
| 154 | |
| 155 main(List<String> arguments) => | |
| 156 runMe(arguments, InterpreterContext.create, "testing.json"); | |
| OLD | NEW |