| // Copyright (c) 2015, 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. |
| |
| /// A command that verifies that deferred libraries split the code as expected. |
| /// |
| /// This tool checks that the output from dart2js meets a given specification, |
| /// given in a YAML file. The format of the YAML file is: |
| /// |
| /// main: |
| /// packages: |
| /// - some_package |
| /// - other_package |
| /// |
| /// foo: |
| /// packages: |
| /// - foo |
| /// - bar |
| /// |
| /// baz: |
| /// packages: |
| /// - baz |
| /// - quux |
| /// |
| /// The YAML file consists of a list of declarations, one for each deferred |
| /// part expected in the output. At least one of these parts must be named |
| /// "main"; this is the main part that contains the program entrypoint. Each |
| /// top-level part contains a list of package names that are expected to be |
| /// contained in that part. Any package that is not explicitly listed is |
| /// expected to be in the main part. For instance, in the example YAML above |
| /// the part named "baz" is expected to contain the packages "baz" and "quux". |
| /// |
| /// The names for parts given in the specification YAML file (besides "main") |
| /// are arbitrary and just used for reporting when the output does not meet the |
| /// specification. |
| library dart2js_info.bin.deferred_library_check; |
| |
| import 'dart:io'; |
| |
| import 'package:args/command_runner.dart'; |
| |
| import 'package:dart2js_info/deferred_library_check.dart'; |
| import 'package:dart2js_info/src/io.dart'; |
| import 'package:yaml/yaml.dart'; |
| |
| import 'usage_exception.dart'; |
| |
| /// A command that computes the diff between two info files. |
| class DeferredLibraryCheck extends Command<void> with PrintUsageException { |
| @override |
| final String name = "deferred_check"; |
| @override |
| final String description = |
| "Verify that deferred libraries are split as expected"; |
| |
| @override |
| void run() async { |
| var args = argResults!.rest; |
| if (args.length < 2) { |
| usageException('Missing arguments, expected: info.data manifest.yaml'); |
| } |
| var info = await infoFromFile(args[0]); |
| var manifest = await manifestFromFile(args[1]); |
| |
| var failures = checkDeferredLibraryManifest(info, manifest); |
| failures.forEach(print); |
| if (failures.isNotEmpty) exitCode = 1; |
| } |
| } |
| |
| Future manifestFromFile(String fileName) async { |
| var file = await File(fileName).readAsString(); |
| return loadYaml(file); |
| } |