| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE.md file. |
| 4 | 4 |
| 5 library test.kernel.closures.suite; | 5 library test.kernel.reify.suite; |
| 6 | 6 |
| 7 import 'dart:async' show Future; | 7 import 'dart:async' show Future; |
| 8 | 8 |
| 9 import 'dart:io' show Directory, File, Platform; | 9 import 'dart:io' show Directory, File, Platform; |
| 10 | 10 |
| 11 import 'package:analyzer/src/generated/sdk.dart' show DartSdk; | 11 import 'package:analyzer/src/generated/sdk.dart' show DartSdk; |
| 12 | 12 |
| 13 import 'package:kernel/analyzer/loader.dart' | 13 import 'package:kernel/analyzer/loader.dart' |
| 14 show DartLoader, DartOptions, createDartSdk; | 14 show DartLoader, DartOptions, createDartSdk; |
| 15 | 15 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 28 StdioProcess, | 28 StdioProcess, |
| 29 Step, | 29 Step, |
| 30 TestDescription, | 30 TestDescription, |
| 31 runMe; | 31 runMe; |
| 32 | 32 |
| 33 import 'package:kernel/ast.dart' show Program; | 33 import 'package:kernel/ast.dart' show Program; |
| 34 | 34 |
| 35 import 'package:kernel/transformations/closure_conversion.dart' | 35 import 'package:kernel/transformations/closure_conversion.dart' |
| 36 as closure_conversion; | 36 as closure_conversion; |
| 37 | 37 |
| 38 import 'package:kernel/transformations/generic_types_reification.dart' |
| 39 as generic_types_reification; |
| 40 |
| 38 import 'package:package_config/discovery.dart' show loadPackagesFile; | 41 import 'package:package_config/discovery.dart' show loadPackagesFile; |
| 39 | 42 |
| 40 class TestContext extends ChainContext { | 43 class TestContext extends ChainContext { |
| 41 final Uri vm; | 44 final Uri vm; |
| 42 | 45 |
| 43 final Uri packages; | 46 final Uri packages; |
| 44 | 47 |
| 45 final DartOptions options; | 48 final DartOptions options; |
| 46 | 49 |
| 47 final DartSdk dartSdk; | 50 final DartSdk dartSdk; |
| 48 | 51 |
| 49 final List<Step> steps; | 52 final List<Step> steps; |
| 50 | 53 |
| 51 TestContext(String sdk, this.vm, Uri packages, bool strongMode, this.dartSdk, | 54 TestContext(String sdk, this.vm, Uri packages, bool strongMode, this.dartSdk, |
| 52 bool updateExpectations) | 55 bool updateExpectations) |
| 53 : packages = packages, | 56 : packages = packages, |
| 54 options = new DartOptions( | 57 options = new DartOptions( |
| 55 strongMode: strongMode, | 58 strongMode: strongMode, |
| 56 sdk: sdk, | 59 sdk: sdk, |
| 57 packagePath: packages.toFilePath()), | 60 packagePath: packages.toFilePath()), |
| 58 steps = <Step>[ | 61 steps = <Step>[ |
| 59 const Kernel(), | 62 const Kernel(), |
| 60 const Print(), | 63 const Print(), |
| 61 const SanityCheck(), | 64 const SanityCheck(), |
| 62 const ClosureConversion(), | 65 const ClosureConversion(), |
| 66 const GenericTypesReification(), |
| 63 const Print(), | 67 const Print(), |
| 64 const SanityCheck(), | 68 const SanityCheck(), |
| 65 new MatchExpectation(".expect", | 69 new MatchExpectation(".expect", |
| 66 updateExpectations: updateExpectations), | 70 updateExpectations: updateExpectations), |
| 67 const WriteDill(), | 71 const WriteDill(), |
| 68 const ReadDill(), | 72 const ReadDill(), |
| 69 const Run(), | 73 const Run(), |
| 70 ]; | 74 ]; |
| 71 | 75 |
| 72 Future<DartLoader> createLoader() async { | 76 Future<DartLoader> createLoader() async { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 if (await fileExists(sdkUri, asyncSources)) { | 123 if (await fileExists(sdkUri, asyncSources)) { |
| 120 throw "Found '$asyncSources' in '$sdk', so it isn't a patched SDK. " | 124 throw "Found '$asyncSources' in '$sdk', so it isn't a patched SDK. " |
| 121 "$suggestion"; | 125 "$suggestion"; |
| 122 } | 126 } |
| 123 | 127 |
| 124 // TODO(karlklose): select the VM based on the mode. | 128 // TODO(karlklose): select the VM based on the mode. |
| 125 Uri vm = Uri.base.resolve("out/ReleaseX64/dart"); | 129 Uri vm = Uri.base.resolve("out/ReleaseX64/dart"); |
| 126 | 130 |
| 127 Uri packages = Uri.base.resolve(".packages"); | 131 Uri packages = Uri.base.resolve(".packages"); |
| 128 bool strongMode = false; | 132 bool strongMode = false; |
| 129 bool updateExpectations = environment["updateExpectations"] != "false"; | 133 bool updateExpectations = environment["updateExpectations"] == "true"; |
| 130 return new TestContext(sdk, vm, packages, strongMode, | 134 return new TestContext(sdk, vm, packages, strongMode, |
| 131 createDartSdk(sdk, strongMode: strongMode), updateExpectations); | 135 createDartSdk(sdk, strongMode: strongMode), updateExpectations); |
| 132 } | 136 } |
| 133 | 137 |
| 134 class Kernel extends Step<TestDescription, Program, TestContext> { | 138 class Kernel extends Step<TestDescription, Program, TestContext> { |
| 135 const Kernel(); | 139 const Kernel(); |
| 136 | 140 |
| 137 String get name => "kernel"; | 141 String get name => "kernel"; |
| 138 | 142 |
| 139 Future<Result<Program>> run( | 143 Future<Result<Program>> run( |
| 140 TestDescription description, TestContext testContext) async { | 144 TestDescription description, TestContext testContext) async { |
| 141 try { | 145 try { |
| 142 DartLoader loader = await testContext.createLoader(); | 146 DartLoader loader = await testContext.createLoader(); |
| 147 |
| 143 Target target = getTarget( | 148 Target target = getTarget( |
| 144 "vm", new TargetFlags(strongMode: testContext.options.strongMode)); | 149 "vm", new TargetFlags(strongMode: testContext.options.strongMode)); |
| 150 // reifyTarget is used to add the GTR-specific runtime libraries |
| 151 // when the program is being loaded |
| 152 Target reifyTarget = getTarget( |
| 153 "vmreify", |
| 154 new TargetFlags( |
| 155 strongMode: testContext.options.strongMode, |
| 156 kernelRuntime: Platform.script.resolve('../../runtime/'))); |
| 157 |
| 145 String path = description.file.path; | 158 String path = description.file.path; |
| 146 Uri uri = Uri.base.resolve(path); | 159 Uri uri = Uri.base.resolve(path); |
| 147 Program program = loader.loadProgram(uri, target: target); | 160 Program program = loader.loadProgram(uri, target: reifyTarget); |
| 148 for (var error in loader.errors) { | 161 for (var error in loader.errors) { |
| 149 return fail(program, "$error"); | 162 return fail(program, "$error"); |
| 150 } | 163 } |
| 151 target | 164 target |
| 152 ..performModularTransformations(program) | 165 ..performModularTransformations(program) |
| 153 ..performGlobalTransformations(program); | 166 ..performGlobalTransformations(program); |
| 154 return pass(program); | 167 return pass(program); |
| 155 } catch (e, s) { | 168 } catch (e, s) { |
| 156 return crash(e, s); | 169 return crash(e, s); |
| 157 } | 170 } |
| 158 } | 171 } |
| 159 } | 172 } |
| 160 | 173 |
| 161 class ClosureConversion extends Step<Program, Program, TestContext> { | 174 class ClosureConversion extends Step<Program, Program, TestContext> { |
| 162 const ClosureConversion(); | 175 const ClosureConversion(); |
| 163 | 176 |
| 164 String get name => "closure conversion"; | 177 String get name => "closure conversion"; |
| 165 | 178 |
| 166 Future<Result<Program>> run(Program program, TestContext testContext) async { | 179 Future<Result<Program>> run(Program program, TestContext testContext) async { |
| 167 try { | 180 try { |
| 168 program = closure_conversion.transformProgram(program); | 181 program = closure_conversion.transformProgram(program); |
| 169 return pass(program); | 182 return pass(program); |
| 170 } catch (e, s) { | 183 } catch (e, s) { |
| 171 return crash(e, s); | 184 return crash(e, s); |
| 172 } | 185 } |
| 173 } | 186 } |
| 174 } | 187 } |
| 175 | 188 |
| 189 class GenericTypesReification extends Step<Program, Program, TestContext> { |
| 190 const GenericTypesReification(); |
| 191 |
| 192 String get name => "generic types reification"; |
| 193 |
| 194 Future<Result<Program>> run(Program program, TestContext testContext) async { |
| 195 try { |
| 196 program = generic_types_reification.transformProgram(program); |
| 197 return pass(program); |
| 198 } catch (e, s) { |
| 199 return crash(e, s); |
| 200 } |
| 201 } |
| 202 } |
| 203 |
| 176 class Run extends Step<Uri, int, TestContext> { | 204 class Run extends Step<Uri, int, TestContext> { |
| 177 const Run(); | 205 const Run(); |
| 178 | 206 |
| 179 String get name => "run"; | 207 String get name => "run"; |
| 180 | 208 |
| 181 Future<Result<int>> run(Uri uri, TestContext context) async { | 209 Future<Result<int>> run(Uri uri, TestContext context) async { |
| 182 File generated = new File.fromUri(uri); | 210 File generated = new File.fromUri(uri); |
| 183 StdioProcess process; | 211 StdioProcess process; |
| 184 try { | 212 try { |
| 185 process = await StdioProcess | 213 process = |
| 186 .run(context.vm.toFilePath(), [generated.path, "Hello, World!"]); | 214 await StdioProcess.run(context.vm.toFilePath(), [generated.path]); |
| 187 print(process.output); | 215 print(process.output); |
| 188 } finally { | 216 } finally { |
| 189 generated.parent.delete(recursive: true); | 217 generated.parent.delete(recursive: true); |
| 190 } | 218 } |
| 191 return process.toResult(); | 219 return process.toResult(); |
| 192 } | 220 } |
| 193 } | 221 } |
| 194 | 222 |
| 195 main(List<String> arguments) => runMe(arguments, createContext, "testing.json"); | 223 main(List<String> arguments) => runMe(arguments, createContext, "testing.json"); |
| OLD | NEW |