Remove our copy of format_coverage; coverage 0.12.4 includes the fix (#1903)

diff --git a/pubspec.yaml b/pubspec.yaml
index 53ede84..8ee23cb 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -32,7 +32,7 @@
   build: ^1.0.1
   build_runner: ^1.0.0
   build_version: ^1.0.0
-  coverage: any
+  coverage: ^0.12.4
   dhttpd: ^3.0.0
   glob: ^1.1.5
   grinder: ^0.8.2
diff --git a/test/src/utils.dart b/test/src/utils.dart
index fde3819..637bccc 100644
--- a/test/src/utils.dart
+++ b/test/src/utils.dart
@@ -155,8 +155,9 @@
     /// Wait for all coverage runs to finish.
     await Future.wait(currentCoverageResults);
 
-    return launcher.runStreamed(Platform.executable, [
-      'tool/format_coverage.dart', // TODO(jcollins-g): use pub after dart-lang/coverage#240 is landed
+    return launcher.runStreamed('pub', [
+      'run',
+      'coverage:format_coverage',
       '--lcov',
       '-v',
       '-b', '.',
diff --git a/tool/format_coverage.dart b/tool/format_coverage.dart
deleted file mode 100644
index 4e65129..0000000
--- a/tool/format_coverage.dart
+++ /dev/null
@@ -1,232 +0,0 @@
-// Copyright (c) 2013, 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.
-
-import 'dart:async';
-import 'dart:io';
-
-import 'package:args/args.dart';
-import 'package:coverage/coverage.dart';
-import 'package:path/path.dart' as p;
-
-/// [Environment] stores gathered arguments information.
-class Environment {
-  String sdkRoot;
-  String pkgRoot;
-  String packagesPath;
-  String baseDirectory;
-  String input;
-  IOSink output;
-  List<String> reportOn;
-  String bazelWorkspace;
-  bool bazel;
-  int workers;
-  bool prettyPrint;
-  bool lcov;
-  bool expectMarkers;
-  bool verbose;
-}
-
-Future<Null> main(List<String> arguments) async {
-  final env = parseArgs(arguments);
-
-  List<File> files = filesToProcess(env.input);
-  if (env.verbose) {
-    print('Environment:');
-    print('  # files: ${files.length}');
-    print('  # workers: ${env.workers}');
-    print('  sdk-root: ${env.sdkRoot}');
-    print('  package-root: ${env.pkgRoot}');
-    print('  package-spec: ${env.packagesPath}');
-    print('  report-on: ${env.reportOn}');
-  }
-
-  var clock = new Stopwatch()..start();
-  var hitmap = await parseCoverage(files, env.workers);
-
-  // All workers are done. Process the data.
-  if (env.verbose) {
-    print('Done creating global hitmap. Took ${clock.elapsedMilliseconds} ms.');
-  }
-
-  String output;
-  var resolver = env.bazel
-      ? new BazelResolver(workspacePath: env.bazelWorkspace)
-      : new Resolver(
-          packagesPath: env.packagesPath,
-          packageRoot: env.pkgRoot,
-          sdkRoot: env.sdkRoot);
-  var loader = new Loader();
-  if (env.prettyPrint) {
-    output =
-        await new PrettyPrintFormatter(resolver, loader, reportOn: env.reportOn)
-            .format(hitmap);
-  } else {
-    assert(env.lcov);
-    output = await new LcovFormatter(resolver,
-            reportOn: env.reportOn, basePath: env.baseDirectory)
-        .format(hitmap);
-  }
-
-  env.output.write(output);
-  await env.output.flush();
-  if (env.verbose) {
-    print('Done flushing output. Took ${clock.elapsedMilliseconds} ms.');
-  }
-
-  if (env.verbose) {
-    if (resolver.failed.length > 0) {
-      print('Failed to resolve:');
-      for (String error in resolver.failed.toSet()) {
-        print('  $error');
-      }
-    }
-    if (loader.failed.length > 0) {
-      print('Failed to load:');
-      for (String error in loader.failed.toSet()) {
-        print('  $error');
-      }
-    }
-  }
-  await env.output.close();
-}
-
-/// Checks the validity of the provided arguments. Does not initialize actual
-/// processing.
-Environment parseArgs(List<String> arguments) {
-  final env = new Environment();
-  var parser = new ArgParser();
-
-  parser.addOption('sdk-root', abbr: 's', help: 'path to the SDK root');
-  parser.addOption('package-root', abbr: 'p', help: 'path to the package root');
-  parser.addOption('packages', help: 'path to the package spec file');
-  parser.addOption('in', abbr: 'i', help: 'input(s): may be file or directory');
-  parser.addOption('out',
-      abbr: 'o', defaultsTo: 'stdout', help: 'output: may be file or stdout');
-  parser.addMultiOption('report-on',
-      help: 'which directories or files to report coverage on');
-  parser.addOption('workers',
-      abbr: 'j', defaultsTo: '1', help: 'number of workers');
-  parser.addOption('bazel-workspace',
-      defaultsTo: '', help: 'Bazel workspace directory');
-  parser.addOption('base-directory',
-      abbr: 'b',
-      help: 'the base directory relative to which source paths are output');
-  parser.addFlag('bazel',
-      defaultsTo: false, help: 'use Bazel-style path resolution');
-  parser.addFlag('pretty-print',
-      abbr: 'r',
-      negatable: false,
-      help: 'convert coverage data to pretty print format');
-  parser.addFlag('lcov',
-      abbr: 'l',
-      negatable: false,
-      help: 'convert coverage data to lcov format');
-  parser.addFlag('verbose',
-      abbr: 'v', negatable: false, help: 'verbose output');
-  parser.addFlag('help', abbr: 'h', negatable: false, help: 'show this help');
-
-  var args = parser.parse(arguments);
-
-  void printUsage() {
-    print('Usage: dart format_coverage.dart [OPTION...]\n');
-    print(parser.usage);
-  }
-
-  void fail(String msg) {
-    print('\n$msg\n');
-    printUsage();
-    exit(1);
-  }
-
-  if (args['help']) {
-    printUsage();
-    exit(0);
-  }
-
-  env.sdkRoot = args['sdk-root'];
-  if (env.sdkRoot != null) {
-    env.sdkRoot = p.normalize(p.join(p.absolute(env.sdkRoot), 'lib'));
-    if (!FileSystemEntity.isDirectorySync(env.sdkRoot)) {
-      fail('Provided SDK root "${args["sdk-root"]}" is not a valid SDK '
-          'top-level directory');
-    }
-  }
-
-  if (args['package-root'] != null && args['packages'] != null) {
-    fail('Only one of --package-root or --packages may be specified.');
-  }
-
-  env.packagesPath = args['packages'];
-  if (env.packagesPath != null) {
-    if (!FileSystemEntity.isFileSync(env.packagesPath)) {
-      fail('Package spec "${args["packages"]}" not found, or not a file.');
-    }
-  }
-
-  env.pkgRoot = args['package-root'];
-  if (env.pkgRoot != null) {
-    env.pkgRoot = p.absolute(p.normalize(args['package-root']));
-    if (!FileSystemEntity.isDirectorySync(env.pkgRoot)) {
-      fail('Package root "${args["package-root"]}" is not a directory.');
-    }
-  }
-
-  if (args['in'] == null) fail('No input files given.');
-  env.input = p.absolute(p.normalize(args['in']));
-  if (!FileSystemEntity.isDirectorySync(env.input) &&
-      !FileSystemEntity.isFileSync(env.input)) {
-    fail('Provided input "${args["in"]}" is neither a directory nor a file.');
-  }
-
-  if (args['out'] == 'stdout') {
-    env.output = stdout;
-  } else {
-    var outpath = p.absolute(p.normalize(args['out']));
-    var outfile = new File(outpath)..createSync(recursive: true);
-    env.output = outfile.openWrite();
-  }
-
-  env.reportOn = args['report-on'].isNotEmpty ? args['report-on'] : null;
-
-  env.bazel = args['bazel'];
-  env.bazelWorkspace = args['bazel-workspace'];
-  if (env.bazelWorkspace.isNotEmpty && !env.bazel) {
-    stderr.writeln('warning: ignoring --bazel-workspace: --bazel not set');
-  }
-
-  if (args['base-directory'] != null) {
-    env.baseDirectory = p.absolute(args['base-directory']);
-  }
-
-  env.lcov = args['lcov'];
-  if (args['pretty-print'] && env.lcov) {
-    fail('Choose one of pretty-print or lcov output');
-  }
-  // Use pretty-print either explicitly or by default.
-  env.prettyPrint = !env.lcov;
-
-  try {
-    env.workers = int.parse('${args["workers"]}');
-  } catch (e) {
-    fail('Invalid worker count: $e');
-  }
-
-  env.verbose = args['verbose'];
-  return env;
-}
-
-/// Given an absolute path absPath, this function returns a [List] of files
-/// are contained by it if it is a directory, or a [List] containing the file if
-/// it is a file.
-List<File> filesToProcess(String absPath) {
-  var filePattern = new RegExp(r'^dart-cov-\d+-\d+.json$');
-  if (FileSystemEntity.isDirectorySync(absPath)) {
-    return new Directory(absPath)
-        .listSync(recursive: true)
-        .whereType<File>()
-        .where((e) => filePattern.hasMatch(p.basename(e.path)))
-        .toList();
-  }
-  return <File>[new File(absPath)];
-}