|  | // Copyright (c) 2016, 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 file. | 
|  |  | 
|  | // @dart = 2.7 | 
|  |  | 
|  | import 'dart:async'; | 
|  | import 'dart:io'; | 
|  |  | 
|  | import 'package:_fe_analyzer_shared/src/testing/annotated_code_helper.dart'; | 
|  | import 'package:args/args.dart'; | 
|  | import 'package:async_helper/async_helper.dart'; | 
|  | import 'package:compiler/src/commandline_options.dart'; | 
|  | import 'package:compiler/src/dart2js.dart' as entry; | 
|  | import 'package:expect/expect.dart'; | 
|  | import 'package:sourcemap_testing/src/stepping_helper.dart'; | 
|  |  | 
|  | import '../helpers/memory_compiler.dart'; | 
|  |  | 
|  | void main(List<String> args) { | 
|  | ArgParser argParser = new ArgParser(allowTrailingOptions: true); | 
|  | argParser.addFlag('debug', abbr: 'd', defaultsTo: false); | 
|  | argParser.addFlag('verbose', abbr: 'v', defaultsTo: false); | 
|  | argParser.addFlag('continued', abbr: 'c', defaultsTo: false); | 
|  | ArgResults argResults = argParser.parse(args); | 
|  | Directory dataDir = | 
|  | new Directory.fromUri(Platform.script.resolve('stepping')); | 
|  | asyncTest(() async { | 
|  | bool continuing = false; | 
|  | await for (FileSystemEntity entity in dataDir.list()) { | 
|  | String name = entity.uri.pathSegments.last; | 
|  | if (argResults.rest.isNotEmpty && | 
|  | !argResults.rest.contains(name) && | 
|  | !continuing) { | 
|  | continue; | 
|  | } | 
|  | print('----------------------------------------------------------------'); | 
|  | print('Checking ${entity.uri}'); | 
|  | print('----------------------------------------------------------------'); | 
|  | String annotatedCode = await new File.fromUri(entity.uri).readAsString(); | 
|  | await testAnnotatedCode(annotatedCode, | 
|  | verbose: argResults['verbose'], debug: argResults['debug']); | 
|  | if (argResults['continued']) { | 
|  | continuing = true; | 
|  | } | 
|  | } | 
|  | }); | 
|  | } | 
|  |  | 
|  | const String kernelMarker = 'kernel.'; | 
|  |  | 
|  | Future testAnnotatedCode(String code, | 
|  | {bool debug: false, bool verbose: false}) async { | 
|  | AnnotatedCode annotatedCode = | 
|  | new AnnotatedCode.fromText(code, commentStart, commentEnd); | 
|  | print(annotatedCode.sourceCode); | 
|  | Map<String, AnnotatedCode> split = | 
|  | splitByPrefixes(annotatedCode, [kernelMarker]); | 
|  | print('---from kernel------------------------------------------------------'); | 
|  | await runTest(split[kernelMarker], kernelMarker, | 
|  | debug: debug, verbose: verbose); | 
|  | } | 
|  |  | 
|  | Future runTest(AnnotatedCode annotatedCode, String config, | 
|  | {bool debug: false, | 
|  | bool verbose: false, | 
|  | List<String> options: const <String>[]}) async { | 
|  | Directory dir = Directory.systemTemp.createTempSync('stepping_test'); | 
|  | String testFileName = 'test.dart'; | 
|  | String path = dir.path; | 
|  | String inputFile = '$path/$testFileName'; | 
|  | new File(inputFile).writeAsStringSync(annotatedCode.sourceCode); | 
|  | String outputFile = '$path/js.js'; | 
|  | List<String> arguments = <String>[ | 
|  | '--out=$outputFile', | 
|  | inputFile, | 
|  | Flags.disableInlining, | 
|  | '--libraries-spec=$sdkLibrariesSpecificationUri', | 
|  | ]; | 
|  | CompilationResult compilationResult = await entry.internalMain(arguments); | 
|  | Expect.isTrue(compilationResult.isSuccess); | 
|  | List<String> scriptD8Command = [ | 
|  | '$sdkPath/_internal/js_runtime/lib/preambles/d8.js', | 
|  | outputFile | 
|  | ]; | 
|  | ProcessResult result = | 
|  | runD8AndStep(dir.path, testFileName, annotatedCode, scriptD8Command); | 
|  | List<String> d8output = result.stdout.split("\n"); | 
|  | if (verbose) { | 
|  | d8output.forEach(print); | 
|  | } | 
|  | checkD8Steps(dir.path, d8output, annotatedCode, debug: debug); | 
|  | dir.deleteSync(recursive: true); | 
|  | } |