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)];
-}
