OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 rasta.testing.rasta_chain; | 5 library rasta.testing.rasta_chain; |
6 | 6 |
7 import 'dart:async' show | 7 import 'dart:async' show |
8 Future; | 8 Future; |
9 | 9 |
10 import 'dart:io' show | 10 import 'dart:io' show |
11 File, | 11 File, |
12 Platform; | 12 Platform; |
13 | 13 |
14 import 'package:kernel/ast.dart' show | 14 import 'package:kernel/ast.dart' show |
15 Program; | 15 Program; |
16 | 16 |
17 import 'package:kernel/repository.dart' show | |
18 Repository; | |
19 | |
20 import 'package:kernel/binary/loader.dart' show | |
21 BinaryLoader; | |
22 | |
23 import 'package:testing/testing.dart' show | 17 import 'package:testing/testing.dart' show |
24 ChainContext, | 18 ChainContext, |
25 Result, | 19 Result, |
26 Step, | 20 Step, |
27 TestDescription; | 21 TestDescription; |
28 | 22 |
29 import 'package:rasta/src/rastask.dart' show | 23 import 'package:rasta/src/rastask.dart' show |
30 Rastask; | 24 Rastask; |
31 | 25 |
32 import 'package:rasta/src/options.dart' show | 26 import 'package:rasta/src/options.dart' show |
(...skipping 15 matching lines...) Expand all Loading... |
48 } | 42 } |
49 | 43 |
50 abstract class RastaContext extends ChainContext { | 44 abstract class RastaContext extends ChainContext { |
51 Rastask get task; | 45 Rastask get task; |
52 Uri get temp; | 46 Uri get temp; |
53 } | 47 } |
54 | 48 |
55 class RastaStep extends Step<TestDescription, Program, RastaContext> { | 49 class RastaStep extends Step<TestDescription, Program, RastaContext> { |
56 final String prefix; | 50 final String prefix; |
57 | 51 |
58 /// When true, return a copy of the program (by loading it from serialized | 52 const RastaStep(this.prefix); |
59 /// .dill file). | |
60 final bool reload; | |
61 | |
62 const RastaStep(this.prefix, {this.reload: false}); | |
63 | 53 |
64 String get name => "rasta"; | 54 String get name => "rasta"; |
65 | 55 |
66 Future<Result<Program>> run( | 56 Future<Result<Program>> run( |
67 TestDescription description, RastaContext context) async { | 57 TestDescription description, RastaContext context) async { |
68 Uri source = description.uri; | 58 Uri source = description.uri; |
69 Rastask task = context.task; | 59 Rastask task = context.task; |
70 | 60 |
71 assert(task.kernel.isInternalStateConsistent); | 61 assert(task.kernel.isInternalStateConsistent); |
72 | 62 |
73 print("Rastarizing $source"); | 63 print("Rastarizing $source"); |
74 Uri dill = context.temp.resolve( | 64 Uri dill = context.temp.resolve( |
75 "$prefix/${description.shortName}$kernelExtension"); | 65 "$prefix/${description.shortName}$kernelExtension"); |
76 | 66 |
77 File output = new File.fromUri(dill); | 67 File output = new File.fromUri(dill); |
78 await output.parent.create(recursive: true); | 68 await output.parent.create(recursive: true); |
79 | 69 |
80 Options options = new Options( | 70 Options options = new Options( |
81 source, dill, dependenciesFile: null, | 71 source, dill, dependenciesFile: null, |
82 generateLibrary: false, | 72 generateLibrary: false, |
83 isVerbose: true, isBatch: false, pattern: null); | 73 isVerbose: true, isBatch: false, pattern: null, |
| 74 noOutput: task.globalOptions.noOutput); |
84 | 75 |
85 Program program; | |
86 try { | 76 try { |
87 program = await task.runOne(options); | 77 return pass(await task.runOne(options)); |
88 } catch (e, t) { | 78 } catch (e, t) { |
89 task.kernel.recoverFromCrash(); | 79 task.kernel.recoverFromCrash(); |
90 return crash(e, t); | 80 return crash(e, t); |
91 } | 81 } |
92 | |
93 if (reload) { | |
94 // TODO(ahe): We need to load the serialized form as we otherwise | |
95 // attempt to modify an unmodifiable list. | |
96 Repository repository = new Repository(); | |
97 program = new BinaryLoader(repository).loadProgram(dill.toFilePath()); | |
98 } | |
99 | |
100 return pass(program); | |
101 } | 82 } |
102 } | 83 } |
OLD | NEW |