diff --git a/BUILD b/BUILD
index 007c81e..7b04a60 100644
--- a/BUILD
+++ b/BUILD
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 load("@io_bazel_rules_dart//dart/build_rules:core.bzl", "dart_library")
-load("@io_bazel_rules_dart//dart/build_rules:vm.bzl", "dart_vm_binary", "dart_vm_test")
+load("@io_bazel_rules_dart//dart/build_rules:vm.bzl", "dart_vm_test")
 
 licenses(["notice"])  # Apache (Google-authored with external contributions)
 
@@ -35,12 +35,5 @@
     ],
 )
 
-dart_vm_binary(
-    name = "transform_tests",
-    srcs = ["bin/transform_tests.dart"],
-    script_file = "bin/transform_tests.dart",
-    visibility = ["//test:__subpackages__"],
-)
-
 # Test BUILD rules are defined test/BUILD instead of here to prevent cyclic
 # dependency between this and rules_webtesting.
diff --git a/_generate_io_tests.bzl b/_generate_io_tests.bzl
new file mode 100644
index 0000000..90745d9
--- /dev/null
+++ b/_generate_io_tests.bzl
@@ -0,0 +1,39 @@
+IN_EXTENSION = ".dart"
+OUT_EXTENSION = ".io.dart"
+
+def _change_extension(path):
+  return "%s%s" % (path[:-1 * len(IN_EXTENSION)], OUT_EXTENSION)
+
+def _compute_outs(srcs):
+  outs = {}
+  for label in srcs:
+    if label.name.endswith(IN_EXTENSION):
+      out_name = _change_extension(label.name)
+      outs[out_name] = out_name
+  return outs
+
+def _generate_io_tests_impl(ctx):
+  """Rewrites tests to replace dart_util imports with io_dart_util"""
+  outs = []
+  for src in ctx.files.srcs:
+    path = src.basename
+    if path.endswith(IN_EXTENSION):
+      out_name = _change_extension(path)
+      out_file = ctx.new_file(src, out_name)
+      outs.append(out_file)
+      ctx.template_action(
+          output = out_file,
+          template = src,
+          substitutions = {
+              "test_util.dart": "io_test_util.dart",
+          }
+      )
+  return struct(files=set(outs))
+
+generate_io_tests = rule(
+    attrs = {
+        "srcs": attr.label_list(allow_files=True),
+    },
+    outputs = _compute_outs,
+    implementation = _generate_io_tests_impl,
+)
diff --git a/bin/transform_tests.dart b/bin/transform_tests.dart
deleted file mode 100644
index f624129..0000000
--- a/bin/transform_tests.dart
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-library webdriver.transform_tests;
-
-import 'dart:io';
-
-void main(List<String> args) {
-  String inExtension;
-  String outExtension;
-  String outDirectory;
-  String srcsFile;
-
-  // Stupid simple arg parsing.
-  for (var arg in args.takeWhile((arg) => arg != '--')) {
-    if (arg.startsWith('--in-extension=')) {
-      inExtension = arg.split('=')[1];
-    } else if (arg.startsWith('--out-extension=')) {
-      outExtension = arg.split('=')[1];
-    } else if (arg.startsWith('--out=')) {
-      outDirectory = arg.split('=')[1];
-    } else if (arg.startsWith('--srcs-file=')) {
-      srcsFile = arg.split('=')[1];
-    }
-  }
-
-  print('Parsed  --in-extension $inExtension');
-  print('Parsed --out-extension $outExtension');
-  print('Parsed           --out $outDirectory');
-  print('Parsed     --srcs-file $srcsFile');
-
-  String testUtilImport;
-  for (var arg in args.skipWhile((arg) => arg != '--')) {
-    if (arg.startsWith('--test_util_import=')) {
-      testUtilImport = arg.split('=')[1];
-    }
-  }
-
-  print('Parsed        --test_util_import $testUtilImport');
-
-  var srcsList = new File(srcsFile).readAsLinesSync();
-  var year = new DateTime.now().year;
-  for (var srcFile in srcsList) {
-    if (!srcFile.endsWith(inExtension)) {
-      continue;
-    }
-    var outFile = '$outDirectory/$srcFile'
-        .replaceFirst(new RegExp('$inExtension\$'), outExtension);
-
-    var srcContents = new File(srcFile).readAsStringSync();
-    srcContents = srcContents.replaceFirst('test_util.dart', '$testUtilImport');
-    new File(outFile).writeAsString(srcContents);
-  }
-}
diff --git a/test/BUILD b/test/BUILD
index 38d35bb..e00d3c2 100644
--- a/test/BUILD
+++ b/test/BUILD
@@ -13,8 +13,8 @@
 # limitations under the License.
 
 load("@io_bazel_rules_dart//dart/build_rules:vm.bzl", "dart_vm_test")
-load("@io_bazel_rules_dart//dart/build_rules:code_gen.bzl", "dart_code_gen")
 load("@io_bazel_rules_webtesting//web:dart.bzl", "dart_web_test_suite")
+load("//:_generate_io_tests.bzl", "generate_io_tests")
 
 licenses(["notice"])  # Apache (Google-authored with external contributions)
 
@@ -22,12 +22,9 @@
 
 _TESTS_TO_RUN = glob(["*_test.dart"])
 
-dart_code_gen(
+generate_io_tests(
     name = "generate_io_tests",
     srcs = _TESTS_TO_RUN,
-    generator = "//:transform_tests",
-    generator_args = ["--test_util_import=io_test_util.dart"],
-    out_extensions = [".io.dart"],
 )
 
 [
