| OLD | NEW | 
|    1 // Copyright (c) 2017, 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 /// Tests basic functionality of the API tree-shaker. |    5 /// Tests basic functionality of the API tree-shaker. | 
|    6 /// |    6 /// | 
|    7 /// Each input file is built and tree-shaken, then we check that the set of |    7 /// Each input file is built and tree-shaken, then we check that the set of | 
|    8 /// libraries, classes, and members that are retained match those declared in an |    8 /// libraries, classes, and members that are retained match those declared in an | 
|    9 /// expectations file. |    9 /// expectations file. | 
|   10 /// |   10 /// | 
|   11 /// Input files may contain markers to turn on flags that configure this |   11 /// Input files may contain markers to turn on flags that configure this | 
|   12 /// runner. Currently only the following marker is recognized: |   12 /// runner. Currently only the following marker is recognized: | 
|   13 ///   @@SHOW_CORE_LIBRARIES@@ - whether to check for retained information from |   13 ///   @@SHOW_CORE_LIBRARIES@@ - whether to check for retained information from | 
|   14 ///      the core libraries. By default this runner only checks for members of |   14 ///      the core libraries. By default this runner only checks for members of | 
|   15 ///      pkg/front_end/testcases/shaker/lib/lib.dart. |   15 ///      pkg/front_end/testcases/shaker/lib/lib.dart. | 
|   16 library fasta.test.shaker_test; |   16 library fasta.test.shaker_test; | 
|   17  |   17  | 
|   18 import 'dart:async' show Future; |   18 import 'dart:async' show Future; | 
|   19 import 'dart:convert' show JSON; |   19 import 'dart:convert' show JSON; | 
|   20 import 'dart:io' show File; |   20 import 'dart:io' show File; | 
|   21  |   21  | 
|   22 export 'package:testing/testing.dart' show Chain, runMe; |   22 export 'package:testing/testing.dart' show Chain, runMe; | 
|   23 import 'package:front_end/physical_file_system.dart'; |   23 import 'package:front_end/physical_file_system.dart'; | 
|   24 import 'package:front_end/src/fasta/dill/dill_target.dart' show DillTarget; |   24 import 'package:front_end/src/fasta/dill/dill_target.dart' show DillTarget; | 
|   25 import 'package:front_end/src/fasta/errors.dart' show InputError; |   25 import 'package:front_end/src/fasta/deprecated_problems.dart' | 
 |   26     show deprecated_InputError; | 
|   26 import 'package:front_end/src/fasta/kernel/kernel_outline_shaker.dart'; |   27 import 'package:front_end/src/fasta/kernel/kernel_outline_shaker.dart'; | 
|   27 import 'package:front_end/src/fasta/kernel/kernel_target.dart' |   28 import 'package:front_end/src/fasta/kernel/kernel_target.dart' | 
|   28     show KernelTarget; |   29     show KernelTarget; | 
|   29 import 'package:front_end/src/fasta/kernel/verifier.dart' show verifyProgram; |   30 import 'package:front_end/src/fasta/kernel/verifier.dart' show verifyProgram; | 
|   30 import 'package:front_end/src/fasta/testing/kernel_chain.dart' show runDiff; |   31 import 'package:front_end/src/fasta/testing/kernel_chain.dart' show runDiff; | 
|   31 import 'package:front_end/src/fasta/testing/patched_sdk_location.dart'; |   32 import 'package:front_end/src/fasta/testing/patched_sdk_location.dart'; | 
|   32 import 'package:front_end/src/fasta/ticker.dart' show Ticker; |   33 import 'package:front_end/src/fasta/ticker.dart' show Ticker; | 
|   33 import 'package:front_end/src/fasta/translate_uri.dart' show TranslateUri; |   34 import 'package:front_end/src/fasta/translate_uri.dart' show TranslateUri; | 
|   34 import 'package:front_end/src/fasta/util/relativize.dart' show relativizeUri; |   35 import 'package:front_end/src/fasta/util/relativize.dart' show relativizeUri; | 
|   35 import 'package:kernel/ast.dart' show Program; |   36 import 'package:kernel/ast.dart' show Program; | 
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  111       var libUri = inputUri.resolve('lib/lib.dart'); |  112       var libUri = inputUri.resolve('lib/lib.dart'); | 
|  112       sourceTarget.read(libUri); |  113       sourceTarget.read(libUri); | 
|  113       sourceTarget.read(inputUri); |  114       sourceTarget.read(inputUri); | 
|  114       var contents = new File.fromUri(inputUri).readAsStringSync(); |  115       var contents = new File.fromUri(inputUri).readAsStringSync(); | 
|  115       var showCoreLibraries = contents.contains("@@SHOW_CORE_LIBRARIES@@"); |  116       var showCoreLibraries = contents.contains("@@SHOW_CORE_LIBRARIES@@"); | 
|  116       await sourceTarget.buildOutlines(); |  117       await sourceTarget.buildOutlines(); | 
|  117       var program = await sourceTarget.buildProgram(); |  118       var program = await sourceTarget.buildProgram(); | 
|  118       bool isIncluded(Uri uri) => !_isTreeShaken(uri); |  119       bool isIncluded(Uri uri) => !_isTreeShaken(uri); | 
|  119       trimProgram(program, isIncluded); |  120       trimProgram(program, isIncluded); | 
|  120       return pass(new _IntermediateData(inputUri, program, showCoreLibraries)); |  121       return pass(new _IntermediateData(inputUri, program, showCoreLibraries)); | 
|  121     } on InputError catch (e, s) { |  122     } on deprecated_InputError catch (e, s) { | 
|  122       return fail(null, e.error, s); |  123       return fail(null, e.error, s); | 
|  123     } |  124     } | 
|  124   } |  125   } | 
|  125 } |  126 } | 
|  126  |  127  | 
|  127 /// Intermediate result from the testing chain. |  128 /// Intermediate result from the testing chain. | 
|  128 class _IntermediateData { |  129 class _IntermediateData { | 
|  129   /// The input URI provided to the test. |  130   /// The input URI provided to the test. | 
|  130   final Uri uri; |  131   final Uri uri; | 
|  131  |  132  | 
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  202               null, "$entryUri doesn't match ${expectedFile.uri}\n$diff"); |  203               null, "$entryUri doesn't match ${expectedFile.uri}\n$diff"); | 
|  203         } |  204         } | 
|  204       } else { |  205       } else { | 
|  205         return pass(actualResult); |  206         return pass(actualResult); | 
|  206       } |  207       } | 
|  207     } |  208     } | 
|  208     if (updateExpectations) { |  209     if (updateExpectations) { | 
|  209       expectedFile.writeAsStringSync(actualResult); |  210       expectedFile.writeAsStringSync(actualResult); | 
|  210       return pass(actualResult); |  211       return pass(actualResult); | 
|  211     } else { |  212     } else { | 
|  212       return fail( |  213       return fail(actualResult, """ | 
|  213           actualResult, |  | 
|  214           """ |  | 
|  215 Please create file ${expectedFile.path} with this content: |  214 Please create file ${expectedFile.path} with this content: | 
|  216 $buffer"""); |  215 $buffer"""); | 
|  217     } |  216     } | 
|  218   } |  217   } | 
|  219 } |  218 } | 
|  220  |  219  | 
|  221 /// A special library used only to test the shaker. The suite above will |  220 /// A special library used only to test the shaker. The suite above will | 
|  222 /// tree-shake the contents of this library. |  221 /// tree-shake the contents of this library. | 
|  223 const _specialLibraryPath = 'pkg/front_end/testcases/shaker/lib/lib.dart'; |  222 const _specialLibraryPath = 'pkg/front_end/testcases/shaker/lib/lib.dart'; | 
|  224  |  223  | 
|  225 /// Tree-shake dart:* libraries and the library under [_specialLibraryPath]. |  224 /// Tree-shake dart:* libraries and the library under [_specialLibraryPath]. | 
|  226 bool _isTreeShaken(Uri uri) => |  225 bool _isTreeShaken(Uri uri) => | 
|  227     uri.isScheme('dart') || |  226     uri.isScheme('dart') || | 
|  228     Uri.base.resolveUri(uri).path.endsWith(_specialLibraryPath); |  227     Uri.base.resolveUri(uri).path.endsWith(_specialLibraryPath); | 
| OLD | NEW |