diff --git a/CHANGELOG.md b/CHANGELOG.md
index 01dbd59..95e3c37 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 #### 0.12.2+2
 
+* Update to transformer_test `0.2.x`.
+
+#### 0.12.2+2
+
 * Add support for code_transformers `0.4.x`.
 
 #### 0.12.2+1
diff --git a/lib/build/html_import_annotation_recorder.dart b/lib/build/html_import_annotation_recorder.dart
index 9474d69..5f2a320 100644
--- a/lib/build/html_import_annotation_recorder.dart
+++ b/lib/build/html_import_annotation_recorder.dart
@@ -3,10 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 library web_components.build.html_import_recorder_inliner;
 
-import 'package:analyzer/analyzer.dart';
-import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
-import 'package:barback/barback.dart';
 import 'package:initialize/transformer.dart';
 import 'package:path/path.dart' as path;
 import '../src/normalize_path.dart';
@@ -21,8 +18,6 @@
   /// All the normalized import paths that were seen.
   final Set<String> importPaths = new Set<String>();
 
-  TransformLogger _logger;
-
   HtmlImportAnnotationRecorder();
 
   /// Applies to anything named `HtmlImport` which annotates a library.
@@ -35,8 +30,11 @@
     } else if (annotationElement is PropertyAccessorElement) {
       type = annotationElement.variable.propagatedType;
       if (type == null) {
-        type = pluginData.resolver.evaluateConstant(annotationElement.library,
-            pluginData.initializer.annotationNode.name).value.type;
+        type = pluginData.resolver
+            .evaluateConstant(annotationElement.library,
+                pluginData.initializer.annotationNode.name)
+            .value
+            .type;
       }
     } else {
       logger.error('Unsupported annotation type. Only constructors and '
@@ -60,18 +58,21 @@
     var annotationElement = pluginData.initializer.annotationElement;
     var element = pluginData.initializer.targetElement as LibraryElement;
     var resolver = pluginData.resolver;
-    var libraryDirective =
-        pluginData.initializer.targetNode.parent.parent as LibraryDirective;
 
     var originalImportPath;
     if (annotationElement.element is PropertyAccessorElement) {
-      originalImportPath = resolver.evaluateConstant(
-              element.library, annotation.name).value.fields[
-          'filePath'].toStringValue();
+      originalImportPath = resolver
+          .evaluateConstant(element.library, annotation.name)
+          .value
+          .fields['filePath']
+          .toStringValue();
     } else {
       assert(annotationElement.element is ConstructorElement);
-      originalImportPath = resolver.evaluateConstant(element.library,
-          annotation.arguments.arguments.first).value.toStringValue();
+      originalImportPath = resolver
+          .evaluateConstant(
+              element.library, annotation.arguments.arguments.first)
+          .value
+          .toStringValue();
     }
 
     var libPath;
diff --git a/lib/build/import_inliner.dart b/lib/build/import_inliner.dart
index 1f562a7..a603dda 100644
--- a/lib/build/import_inliner.dart
+++ b/lib/build/import_inliner.dart
@@ -38,7 +38,8 @@
   apply(Transform transform) {
     var logger = new BuildLogger(transform, convertErrorsToWarnings: true);
     return new ImportInliner(transform, transform.primaryInput.id, logger,
-        bindingStartDelimiters: bindingStartDelimiters).run();
+            bindingStartDelimiters: bindingStartDelimiters)
+        .run();
   }
 }
 
@@ -71,8 +72,10 @@
       if (imports.length > 1) {
         _inlineImports(primaryDocument, imports);
       } else if (!changed &&
-          primaryDocument.querySelectorAll('link[rel="import"]').where(
-                  (import) => import.attributes['type'] != 'css').length ==
+          primaryDocument
+                  .querySelectorAll('link[rel="import"]')
+                  .where((import) => import.attributes['type'] != 'css')
+                  .length ==
               0) {
         // If there were no url changes and no imports, then we are done.
         return;
@@ -173,9 +176,6 @@
   /// Asset where the original content (and original url) was found.
   final AssetId sourceId;
 
-  /// Counter used to ensure that every library name we inject is unique.
-  int _count = 0;
-
   /// Path to the top level folder relative to the transform primaryInput.
   /// This should just be some arbitrary # of ../'s.
   final String topLevelPath;
@@ -303,7 +303,8 @@
 
     if (primaryInput.package != id.package) {
       // Technically we shouldn't get there
-      logger.error(internalErrorDontKnowHowToImport
+      logger.error(
+          internalErrorDontKnowHowToImport
               .create({'target': id, 'source': primaryInput, 'extra': ''}),
           span: span);
       return href;
diff --git a/lib/build/messages.dart b/lib/build/messages.dart
index 87f3fa3..8cf11d6 100644
--- a/lib/build/messages.dart
+++ b/lib/build/messages.dart
@@ -8,8 +8,10 @@
 import 'package:code_transformers/messages/messages.dart';
 
 const scriptFileNotFound = const MessageTemplate(
-    const MessageId('web_components', 0), 'Script file at "%-url-%" not found.',
-    'URL to a script file might be incorrect', '''
+    const MessageId('web_components', 0),
+    'Script file at "%-url-%" not found.',
+    'URL to a script file might be incorrect',
+    '''
 An error occurred trying to read a script tag on a given URL. This is often the
 result of a broken URL in a `<script src="...">`.
 ''');
@@ -17,7 +19,8 @@
 const scriptIncludedMoreThanOnce = const MessageTemplate(
     const MessageId('web_components', 1),
     'The `%-url-%` script was included more than once.',
-    'Dart script file included more than once.', '''
+    'Dart script file included more than once.',
+    '''
 Duplicate dart scripts often happen if you have multiple html imports that
 include the same script. The simplest workaround for this is to move your dart
 script to its own html file, and import that instead of the script (html imports
@@ -46,7 +49,8 @@
 const internalErrorDontKnowHowToImport = const MessageTemplate(
     const MessageId('web_components', 3),
     "internal error: don't know how to include %-target-% from"
-    " %-source-%.%-extra-%", "Internal error: don't know how to include a URL",
+    " %-source-%.%-extra-%",
+    "Internal error: don't know how to include a URL",
     '''
 Sorry, you just ran into a bug in the web_components transformer code. Please
 file a bug at <https://github.com/dart-lang/web-components/issues/new>
@@ -56,7 +60,8 @@
 
 const inlineImportFail = const MessageTemplate(
     const MessageId('web_components', 4),
-    'Failed to inline HTML import: %-error-%', 'Error while inlining an import',
+    'Failed to inline HTML import: %-error-%',
+    'Error while inlining an import',
     '''
 An error occurred while inlining an import in the web_components build. This is
 often the result of a broken HTML import.
diff --git a/lib/build/script_compactor.dart b/lib/build/script_compactor.dart
index 64fb318..c3b0001 100644
--- a/lib/build/script_compactor.dart
+++ b/lib/build/script_compactor.dart
@@ -133,7 +133,6 @@
   Future _extractInlineScripts(AssetId asset, dom.Document doc) {
     var scripts = doc.querySelectorAll('script[type="$dartType"]');
     return Future.forEach(scripts, (script) {
-      var type = script.attributes['type'];
       var src = script.attributes['src'];
 
       if (src != null) {
@@ -162,8 +161,8 @@
         // the new source file.
         if (primaryInput == asset) {
           script.text = '';
-          script.attributes['src'] = path.url.relative(newId.path,
-              from: path.url.dirname(primaryInput.path));
+          script.attributes['src'] = path.url
+              .relative(newId.path, from: path.url.dirname(primaryInput.path));
         }
       });
     });
@@ -174,7 +173,6 @@
     var unit = parseDirectives(code, suppressErrors: true);
     var file = new SourceFile(code, url: spanUrlFor(from, to, logger));
     var output = new TextEditTransaction(code, file);
-    var foundLibraryDirective = false;
     for (Directive directive in unit.directives) {
       if (directive is UriBasedDirective) {
         var uri = directive.uri.stringValue;
@@ -188,8 +186,6 @@
         if (newUri != uri) {
           output.edit(span.start.offset, span.end.offset, "'$newUri'");
         }
-      } else if (directive is LibraryDirective) {
-        foundLibraryDirective = true;
       }
     }
 
@@ -249,7 +245,8 @@
 
 /// Parse [code] and determine whether it has a library directive.
 bool _hasLibraryDirective(String code) =>
-    parseDirectives(code, suppressErrors: true).directives
+    parseDirectives(code, suppressErrors: true)
+        .directives
         .any((d) => d is LibraryDirective);
 
 /// Returns the dart import path to reach [id] relative to [primaryInput].
diff --git a/lib/polyfill.dart b/lib/polyfill.dart
index 6e7bbd9..e225e22 100644
--- a/lib/polyfill.dart
+++ b/lib/polyfill.dart
@@ -38,7 +38,7 @@
   if (customElements == null) {
     // Return true if native document.register, otherwise false.
     // (Maybe the polyfill isn't loaded yet. Wait for it.)
-    return document.supportsRegister;
+    return document.supportsRegisterElement;
   }
 
   return customElements['ready'] == true;
diff --git a/lib/src/init.dart b/lib/src/init.dart
index d2906ef..ba33239 100644
--- a/lib/src/init.dart
+++ b/lib/src/init.dart
@@ -18,7 +18,9 @@
 ///
 /// If a [typeFilter] or [customFilter] are supplied, only one phase is ran
 /// with the supplied filters.
-Future initWebComponents({List<Type> typeFilter, InitializerFilter customFilter,
+Future initWebComponents(
+    {List<Type> typeFilter,
+    InitializerFilter customFilter,
     bool initAll: true}) {
   if (typeFilter != null || customFilter != null) {
     return init.run(typeFilter: typeFilter, customFilter: customFilter);
diff --git a/pubspec.yaml b/pubspec.yaml
index 96fd45d..fa0e1a2 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: web_components
-version: 0.12.2+2
+version: 0.12.2+3
 author: Polymer.dart Authors <web-ui-dev@dartlang.org>
 homepage: https://github.com/dart-lang/web-components/
 description: >
@@ -18,7 +18,7 @@
   path: '^1.3.0'
 dev_dependencies:
   test: '^0.12.0'
-  transformer_test: '^0.1.0'
+  transformer_test: '^0.2.0'
   browser: '^0.10.0'
 transformers:
 - web_components/build/mirrors_remover:
diff --git a/test/build/html_import_annotation_recorder_test.dart b/test/build/html_import_annotation_recorder_test.dart
index b362c24..341f3a1 100644
--- a/test/build/html_import_annotation_recorder_test.dart
+++ b/test/build/html_import_annotation_recorder_test.dart
@@ -18,7 +18,9 @@
 
   test(name, () {
     // Run the transformer and test the output.
-    return applyTransformers([[transformer]],
+    return applyTransformers([
+      [transformer]
+    ],
         inputs: inputs,
         results: expected,
         formatter: StringFormatter.noNewlinesOrSurroundingWhitespace).then((_) {
diff --git a/test/build/import_crawler_test.dart b/test/build/import_crawler_test.dart
index 532bc84..b82a2f0 100644
--- a/test/build/import_crawler_test.dart
+++ b/test/build/import_crawler_test.dart
@@ -49,69 +49,91 @@
 }
 
 main() {
-  runTests([[new _TestTransformer('web/index.html')]]);
+  runTests([
+    [new _TestTransformer('web/index.html')]
+  ]);
   // Test with a preparsed original document as well.
-  runTests([[new _TestTransformer('web/index.html', true)]]);
+  runTests([
+    [new _TestTransformer('web/index.html', true)]
+  ]);
 }
 
 runTests(List<List<Transformer>> phases) {
-  testPhases('basic', phases, {
-    'a|web/index.html': '''
+  testPhases(
+      'basic',
+      phases,
+      {
+        'a|web/index.html': '''
       <link rel="import" href="foo.html">
       <link rel="import" href="packages/a/foo.html">
       <link rel="import" href="packages/b/foo.html">
       <link rel="import" href="packages/b/foo/bar.html">
       <div>a|web/index.html</div>
       ''',
-    'a|web/foo.html': '<div>a|web/foo.html</div>',
-    'a|lib/foo.html': '<div>a|lib/foo.html</div>',
-    'b|lib/foo.html': '''
+        'a|web/foo.html': '<div>a|web/foo.html</div>',
+        'a|lib/foo.html': '<div>a|lib/foo.html</div>',
+        'b|lib/foo.html': '''
       <link rel="import" href="foo/bar.html">
       <div>b|lib/foo.html</div>
       ''',
-    'b|lib/foo/bar.html': '<div>b|lib/foo/bar.html</div>',
-  }, {
-    'a|web/result.txt': '''
+        'b|lib/foo/bar.html': '<div>b|lib/foo/bar.html</div>',
+      },
+      {
+        'a|web/result.txt': '''
       (a|web/foo.html, a|lib/foo.html, b|lib/foo/bar.html, b|lib/foo.html, a|web/index.html)
       ''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('cycle', phases, {
-    'a|web/index.html': '''
+  testPhases(
+      'cycle',
+      phases,
+      {
+        'a|web/index.html': '''
       <link rel="import" href="packages/a/foo.html">
       <div>a|web/index.html</div>
       ''',
-    'a|lib/foo.html': '''
+        'a|lib/foo.html': '''
       <link rel="import" href="bar.html">
       <div>a|lib/foo.html</div>''',
-    'a|lib/bar.html': '''
+        'a|lib/bar.html': '''
       <link rel="import" href="foo.html">
       <div>a|lib/bar.html</div>''',
-  }, {
-    'a|web/result.txt': '''
+      },
+      {
+        'a|web/result.txt': '''
       (a|lib/bar.html, a|lib/foo.html, a|web/index.html)
       ''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('deep imports', phases, {
-    'a|web/index.html': '''
+  testPhases(
+      'deep imports',
+      phases,
+      {
+        'a|web/index.html': '''
       <link rel="import" href="packages/a/foo.html">
       <div>a|web/index.html</div>
       ''',
-    'a|lib/foo.html': '''
+        'a|lib/foo.html': '''
       <link rel="import" href="one/bar.html">
       <div>a|lib/foo.html</div>''',
-    'a|lib/one/bar.html': '''
+        'a|lib/one/bar.html': '''
       <link rel="import" href="two/baz.html">
       <div>a|lib/one/bar.html</div>''',
-    'a|lib/one/two/baz.html': '''
+        'a|lib/one/two/baz.html': '''
       <link rel="import" href="three/zap.html">
       <div>a|lib/one/two/baz.html</div>''',
-    'a|lib/one/two/three/zap.html': '''
+        'a|lib/one/two/three/zap.html': '''
       <div>a|lib/one/two/three/zap.html</div>''',
-  }, {
-    'a|web/result.txt':
-        '(a|lib/one/two/three/zap.html, a|lib/one/two/baz.html, '
-        'a|lib/one/bar.html, a|lib/foo.html, a|web/index.html)',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      {
+        'a|web/result.txt':
+            '(a|lib/one/two/three/zap.html, a|lib/one/two/baz.html, '
+            'a|lib/one/bar.html, a|lib/foo.html, a|web/index.html)',
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
diff --git a/test/build/import_inliner_test.dart b/test/build/import_inliner_test.dart
index cb7f389..94eb40f 100644
--- a/test/build/import_inliner_test.dart
+++ b/test/build/import_inliner_test.dart
@@ -10,7 +10,9 @@
 import 'package:test/test.dart';
 
 var transformer = new ImportInlinerTransformer(null, ['{{', '[[']);
-var phases = [[transformer]];
+var phases = [
+  [transformer]
+];
 
 main() {
   group('rel=import', importTests);
@@ -20,27 +22,37 @@
 }
 
 void importTests() {
-  testPhases('no imports', phases, {
-    'a|web/index.html': '''
+  testPhases(
+      'no imports',
+      phases,
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html><html><head></head><body></body></html>''',
-  }, {
-    'a|web/index.html': '''
+      },
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html><html><head></head><body></body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('one import, removes dart script', phases, {
-    'a|web/index.html': '''
+  testPhases(
+      'one import, removes dart script',
+      phases,
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html>
         <html>
           <head><link rel="import" href="packages/a/foo.html"></head>
           <body></body>
         </html>''',
-    'a|lib/foo.html': '''
+        'a|lib/foo.html': '''
         <div>hello from foo!</div>
         <script type="application/dart" src="foo.dart"></script>
         ''',
-  }, {
-    'a|web/index.html': '''
+      },
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html>
         <html>
           <head></head>
@@ -50,22 +62,28 @@
             </div>
           </body>
         </html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('preserves order of scripts', phases, {
-    'a|web/index.html': '''
+  testPhases(
+      'preserves order of scripts',
+      phases,
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html><html><head>
         <script type="text/javascript">/*first*/</script>
         <script src="second.js"></script>
         <link rel="import" href="packages/a/foo.html">
         <script>/*forth*/</script>
         </head></html>''',
-    'a|lib/foo.html': '''
+        'a|lib/foo.html': '''
         <!DOCTYPE html><html><head><script>/*third*/</script>
         </head><body><polymer-element>2</polymer-element></html>''',
-    'a|web/second.js': '/*second*/'
-  }, {
-    'a|web/index.html': '''
+        'a|web/second.js': '/*second*/'
+      },
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html><html><head>
         <script type="text/javascript">/*first*/</script>
         <script src="second.js"></script>
@@ -76,10 +94,15 @@
         <script>/*forth*/</script>
         </div>
         </body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('preserves order of scripts, extract Dart scripts', phases, {
-    'a|web/index.html': '''
+  testPhases(
+      'preserves order of scripts, extract Dart scripts',
+      phases,
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -89,7 +112,7 @@
             <script type="application/dart">/*fifth*/</script>
           </head>
         </html>''',
-    'a|web/test2.html': '''
+        'a|web/test2.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -100,9 +123,10 @@
             <polymer-element>2</polymer-element>
           </body>
         </html>''',
-    'a|web/second.js': '/*second*/'
-  }, {
-    'a|web/index.html': '''
+        'a|web/second.js': '/*second*/'
+      },
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -117,7 +141,7 @@
             </div>
           </body>
         </html>''',
-    'a|web/test2.html': '''
+        'a|web/test2.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -128,40 +152,52 @@
             <polymer-element>2</polymer-element>
           </body>
         </html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('no transformation outside web/', phases, {
-    'a|lib/test.html': '''
+  testPhases(
+      'no transformation outside web/',
+      phases,
+      {
+        'a|lib/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test2.html">
         </head></html>''',
-    'a|lib/test2.html': '''
+        'a|lib/test2.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>2</polymer-element></html>''',
-  }, {
-    'a|lib/test.html': '''
+      },
+      {
+        'a|lib/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test2.html">
         </head></html>''',
-    'a|lib/test2.html': '''
+        'a|lib/test2.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>2</polymer-element></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('shallow, elements, many', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'shallow, elements, many',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test2.html">
         <link rel="import" href="test3.html">
         </head></html>''',
-    'a|web/test2.html': '''
+        'a|web/test2.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>2</polymer-element></html>''',
-    'a|web/test3.html': '''
+        'a|web/test3.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>3</polymer-element></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -169,32 +205,38 @@
         <polymer-element>3</polymer-element>
         </div>
         </body></html>''',
-    'a|web/test2.html': '''
+        'a|web/test2.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>2</polymer-element></html>''',
-    'a|web/test3.html': '''
+        'a|web/test3.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>3</polymer-element></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('deep, elements, one per file', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'deep, elements, one per file',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test2.html">
         </head></html>''',
-    'a|web/test2.html': '''
+        'a|web/test2.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="assets/b/test3.html">
         </head><body><polymer-element>2</polymer-element></html>''',
-    'b|asset/test3.html': '''
+        'b|asset/test3.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="../../packages/c/test4.html">
         </head><body><polymer-element>3</polymer-element></html>''',
-    'c|lib/test4.html': '''
+        'c|lib/test4.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>4</polymer-element></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -203,7 +245,7 @@
         <polymer-element>2</polymer-element>
         </div>
         </body></html>''',
-    'a|web/test2.html': '''
+        'a|web/test2.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -212,45 +254,51 @@
         </div>
         <polymer-element>2</polymer-element>
         </body></html>''',
-    'b|asset/test3.html': '''
+        'b|asset/test3.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="../../packages/c/test4.html">
         </head><body><polymer-element>3</polymer-element></html>''',
-    'c|lib/test4.html': '''
+        'c|lib/test4.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>4</polymer-element></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('deep, elements, many imports', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'deep, elements, many imports',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test2a.html">
         <link rel="import" href="test2b.html">
         </head></html>''',
-    'a|web/test2a.html': '''
+        'a|web/test2a.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test3a.html">
         <link rel="import" href="test3b.html">
         </head><body><polymer-element>2a</polymer-element></body></html>''',
-    'a|web/test2b.html': '''
+        'a|web/test2b.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test4a.html">
         <link rel="import" href="test4b.html">
         </head><body><polymer-element>2b</polymer-element></body></html>''',
-    'a|web/test3a.html': '''
+        'a|web/test3a.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>3a</polymer-element></body></html>''',
-    'a|web/test3b.html': '''
+        'a|web/test3b.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>3b</polymer-element></body></html>''',
-    'a|web/test4a.html': '''
+        'a|web/test4a.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>4a</polymer-element></body></html>''',
-    'a|web/test4b.html': '''
+        'a|web/test4b.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>4b</polymer-element></body></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -262,7 +310,7 @@
         <polymer-element>2b</polymer-element>
         </div>
         </body></html>''',
-    'a|web/test2a.html': '''
+        'a|web/test2a.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -271,7 +319,7 @@
         </div>
         <polymer-element>2a</polymer-element>
         </body></html>''',
-    'a|web/test2b.html': '''
+        'a|web/test2b.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -280,43 +328,49 @@
         </div>
         <polymer-element>2b</polymer-element>
         </body></html>''',
-    'a|web/test3a.html': '''
+        'a|web/test3a.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <polymer-element>3a</polymer-element>
         </body></html>''',
-    'a|web/test3b.html': '''
+        'a|web/test3b.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <polymer-element>3b</polymer-element>
         </body></html>''',
-    'a|web/test4a.html': '''
+        'a|web/test4a.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <polymer-element>4a</polymer-element>
         </body></html>''',
-    'a|web/test4b.html': '''
+        'a|web/test4b.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <polymer-element>4b</polymer-element>
         </body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('imports cycle, 1-step lasso', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'imports cycle, 1-step lasso',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         </head></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_2.html">
         </head><body><polymer-element>1</polymer-element></html>''',
-    'a|web/test_2.html': '''
+        'a|web/test_2.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         </head><body><polymer-element>2</polymer-element></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -324,39 +378,45 @@
         <polymer-element>1</polymer-element>
         </div>
         </body></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
         <polymer-element>2</polymer-element>
         </div>
         <polymer-element>1</polymer-element></body></html>''',
-    'a|web/test_2.html': '''
+        'a|web/test_2.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
         <polymer-element>1</polymer-element>
         </div>
         <polymer-element>2</polymer-element></body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('imports cycle, 1-step lasso, scripts too', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'imports cycle, 1-step lasso, scripts too',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         </head></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_2.html">
         </head><body><polymer-element>1</polymer-element>
         <script src="s1"></script></html>''',
-    'a|web/test_2.html': '''
+        'a|web/test_2.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         </head><body><polymer-element>2</polymer-element>
         <script src="s2"></script></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -366,7 +426,7 @@
         <script src="s1"></script>
         </div>
         </body></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -375,7 +435,7 @@
         </div>
         <polymer-element>1</polymer-element>
         <script src="s1"></script></body></html>''',
-    'a|web/test_2.html': '''
+        'a|web/test_2.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -384,30 +444,36 @@
         </div>
         <polymer-element>2</polymer-element>
         <script src="s2"></script></body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('imports cycle, 1-step lasso, Dart scripts too', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'imports cycle, 1-step lasso, Dart scripts too',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         </head></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_2.html">
         </head><body><polymer-element>1</polymer-element>
         <script type="application/dart" src="s1.dart"></script>
         </html>''',
-    'a|web/test_2.html': '''
+        'a|web/test_2.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         </head><body><polymer-element>2
         <script type="application/dart" src="s2.dart"></script>
         </polymer-element>
         </html>''',
-    'a|web/s1.dart': '',
-    'a|web/s2.dart': '',
-  }, {
-    'a|web/test.html': '''
+        'a|web/s1.dart': '',
+        'a|web/s2.dart': '',
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -415,7 +481,7 @@
         <polymer-element>1</polymer-element>
         </div>
         </body></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -424,7 +490,7 @@
         <polymer-element>1</polymer-element>
         <script type="application/dart" src="s1.dart"></script>
         </body></html>''',
-    'a|web/test_2.html': '''
+        'a|web/test_2.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -434,14 +500,19 @@
         <script type="application/dart" src="s2.dart"></script>
         </polymer-element>
         </body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('imports with Dart script after JS script', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'imports with Dart script after JS script',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         </head></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         </head><body>
@@ -451,9 +522,10 @@
         <script type="application/dart" src="s1.dart"></script>
         </polymer-element>
         'FOO'</body></html>''',
-    'a|web/s1.dart': '',
-  }, {
-    'a|web/test.html': '''
+        'a|web/s1.dart': '',
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -464,7 +536,7 @@
         'FOO'
         </div>
         </body></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <foo>42</foo><bar-baz></bar-baz>
@@ -473,27 +545,33 @@
         <script type="application/dart" src="s1.dart"></script>
         </polymer-element>
         'FOO'</body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('imports cycle, 2-step lasso', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'imports cycle, 2-step lasso',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         </head></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_2.html">
         </head><body><polymer-element>1</polymer-element></html>''',
-    'a|web/test_2.html': '''
+        'a|web/test_2.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_3.html">
         </head><body><polymer-element>2</polymer-element></html>''',
-    'a|web/test_3.html': '''
+        'a|web/test_3.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         </head><body><polymer-element>3</polymer-element></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -502,7 +580,7 @@
         <polymer-element>1</polymer-element>
         </div>
         </body></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -510,7 +588,7 @@
         <polymer-element>2</polymer-element>
         </div>
         <polymer-element>1</polymer-element></body></html>''',
-    'a|web/test_2.html': '''
+        'a|web/test_2.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -518,7 +596,7 @@
         <polymer-element>3</polymer-element>
         </div>
         <polymer-element>2</polymer-element></body></html>''',
-    'a|web/test_3.html': '''
+        'a|web/test_3.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -526,50 +604,62 @@
         <polymer-element>1</polymer-element>
         </div>
         <polymer-element>3</polymer-element></body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('imports cycle, self cycle', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'imports cycle, self cycle',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         </head></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         </head><body><polymer-element>1</polymer-element></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
         <polymer-element>1</polymer-element>
         </div>
         </body></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <polymer-element>1</polymer-element></body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('imports DAG', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'imports DAG',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_1.html">
         <link rel="import" href="test_2.html">
         </head></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_3.html">
         </head><body><polymer-element>1</polymer-element></body></html>''',
-    'a|web/test_2.html': '''
+        'a|web/test_2.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="test_3.html">
         </head><body><polymer-element>2</polymer-element></body></html>''',
-    'a|web/test_3.html': '''
+        'a|web/test_3.html': '''
         <!DOCTYPE html><html><head>
         </head><body><polymer-element>3</polymer-element></body></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
@@ -578,256 +668,332 @@
         <polymer-element>2</polymer-element>
         </div>
         </body></html>''',
-    'a|web/test_1.html': '''
+        'a|web/test_1.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
         <polymer-element>3</polymer-element>
         </div>
         <polymer-element>1</polymer-element></body></html>''',
-    'a|web/test_2.html': '''
+        'a|web/test_2.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <div hidden="">
         <polymer-element>3</polymer-element>
         </div>
         <polymer-element>2</polymer-element></body></html>''',
-    'a|web/test_3.html': '''
+        'a|web/test_3.html': '''
         <!DOCTYPE html><html><head>
         </head><body>
         <polymer-element>3</polymer-element></body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('missing html imports throw errors', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'missing html imports throw errors',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="foo.html">
         </head></html>''',
-  }, {}, [
-    'warning: ${inlineImportFail.create({
+      },
+      {},
+      messages: [
+        'warning: ${inlineImportFail.create({
           'error': 'Could not find asset a|web/foo.html.'
       }).snippet} '
-        '(web/test.html 1 8)',
-  ], StringFormatter.noNewlinesOrSurroundingWhitespace);
+            '(web/test.html 1 8)',
+      ],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('absolute uri', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'absolute uri',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="stylesheet" href="/foo.css">
         </head></html>''',
-    'a|web/test2.html': '''
+        'a|web/test2.html': '''
         <!DOCTYPE html><html><head>
         <link rel="stylesheet" href="http:example.com/bar.css">
         </head></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="stylesheet" href="/foo.css">
         </head></html>''',
-    'a|web/test2.html': '''
+        'a|web/test2.html': '''
         <!DOCTYPE html><html><head>
         <link rel="stylesheet" href="http:example.com/bar.css">
         </head></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
 
 void urlAttributeTests() {
-  testPhases('url attributes are normalized', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'url attributes are normalized',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="foo/test_1.html">
         <link rel="import" href="foo/test_2.html">
         </head></html>''',
-    'a|web/foo/test_1.html': '''
+        'a|web/foo/test_1.html': '''
         <script src="baz.jpg"></script>''',
-    'a|web/foo/test_2.html': '''
+        'a|web/foo/test_2.html': '''
         <foo-element src="baz.jpg"></foo-element>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head></head><body>
         <div hidden="">
         <script src="foo/baz.jpg"></script>
         <foo-element src="baz.jpg"></foo-element>
         </div>
         </body></html>''',
-    'a|web/foo/test_1.html': '''
+        'a|web/foo/test_1.html': '''
         <script src="baz.jpg"></script>''',
-    'a|web/foo/test_2.html': '''
+        'a|web/foo/test_2.html': '''
         <foo-element src="baz.jpg"></foo-element>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('paths with an invalid prefix are not normalized', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'paths with an invalid prefix are not normalized',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="packages/a/test.html">
         </head></html>''',
-    'a|lib/test.html': '''
+        'a|lib/test.html': '''
         <img src="[[bar]]">''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head></head><body>
         <div hidden="">
         <img src="[[bar]]">
         </div>
         </body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('relative paths followed by invalid characters are normalized',
-      phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'relative paths followed by invalid characters are normalized',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="foo/test.html">
         </head></html>''',
-    'a|web/foo/test.html': '''
+        'a|web/foo/test.html': '''
         <img src="baz/{{bar}}">
         <img src="./{{bar}}">''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head></head><body>
         <div hidden="">
         <img src="foo/baz/{{bar}}">
         <img src="foo/{{bar}}">
         </div>
         </body></html>''',
-  }, null, StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('relative paths in _* attributes are normalized', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'relative paths in _* attributes are normalized',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="foo/test.html">
         </head></html>''',
-    'a|web/foo/test.html': '''
+        'a|web/foo/test.html': '''
         <img _src="./{{bar}}">
         <a _href="./{{bar}}">test</a>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head></head><body>
         <div hidden="">
         <img _src="foo/{{bar}}">
         <a _href="foo/{{bar}}">test</a>
         </div>
         </body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('paths starting with a binding are treated as absolute', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'paths starting with a binding are treated as absolute',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="packages/a/foo.html">
         </head></html>''',
-    'a|lib/foo.html': '''
+        'a|lib/foo.html': '''
         <img _src="{{bar}}">
         <img _src="[[bar]]">''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head></head><body>
         <div hidden="">
           <img _src="{{bar}}">
           <img _src="[[bar]]">
         </div>
         </body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('arbitrary bindings can exist in paths', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'arbitrary bindings can exist in paths',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head></head><body>
         <img src="./{{(bar[2] + baz[\'foo\']) * 14 / foobar() - 0.5}}.jpg">
         <img src="./[[bar[2]]].jpg">
         </body></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head></head><body>
         <img src="{{(bar[2] + baz[\'foo\']) * 14 / foobar() - 0.5}}.jpg">
         <img src="[[bar[2]]].jpg">
         </body></html>''',
-  }, null, StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('multiple bindings can exist in paths', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'multiple bindings can exist in paths',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head></head><body>
         <img src="./{{bar[0]}}/{{baz[1]}}.{{extension}}">
         </body></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head></head><body>
         <img src="{{bar[0]}}/{{baz[1]}}.{{extension}}">
         </body></html>''',
-  }, null, StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('relative paths in deep imports', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'relative paths in deep imports',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="foo/foo.html">
         </head></html>''',
-    'a|web/foo/foo.html': '''
+        'a|web/foo/foo.html': '''
         <link rel="import" href="bar.html">''',
-    'a|web/foo/bar.html': '''
+        'a|web/foo/bar.html': '''
         <style rel="stylesheet" href="baz.css"></style>
         <style rel="stylesheet" href="../css/zap.css"></style>''',
-    'a|web/foo/baz.css': '',
-    'a|web/css/zap.css': '',
-  }, {
-    'a|web/test.html': '''
+        'a|web/foo/baz.css': '',
+        'a|web/css/zap.css': '',
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head></head><body>
         <div hidden="">
           <style rel="stylesheet" href="foo/baz.css"></style>
           <style rel="stylesheet" href="css/zap.css"></style>
         </div>
         </body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
 
 void entryPointTests() {
-  testPhases('one level deep entry points normalize correctly', phases, {
-    'a|web/test/test.html': '''
+  testPhases(
+      'one level deep entry points normalize correctly',
+      phases,
+      {
+        'a|web/test/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="../../packages/a/foo/foo.html">
         </head></html>''',
-    'a|lib/foo/foo.html': '''
+        'a|lib/foo/foo.html': '''
         <script rel="import" href="../../../packages/b/bar/bar.js">
         </script>''',
-    'b|lib/bar/bar.js': '''
+        'b|lib/bar/bar.js': '''
         console.log("here");''',
-  }, {
-    'a|web/test/test.html': '''
+      },
+      {
+        'a|web/test/test.html': '''
         <!DOCTYPE html><html><head></head><body>
         <div hidden="">
         <script rel="import" href="../packages/b/bar/bar.js"></script>
         </div>
         </body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('includes in entry points normalize correctly', phases, {
-    'a|web/test/test.html': '''
+  testPhases(
+      'includes in entry points normalize correctly',
+      phases,
+      {
+        'a|web/test/test.html': '''
         <!DOCTYPE html><html><head>
         <script src="packages/a/foo/bar.js"></script>
         </head></html>''',
-    'a|lib/foo/bar.js': '''
+        'a|lib/foo/bar.js': '''
         console.log("here");''',
-  }, {
-    'a|web/test/test.html': '''
+      },
+      {
+        'a|web/test/test.html': '''
         <!DOCTYPE html><html><head>
         <script src="../packages/a/foo/bar.js"></script>
         </head><body>
         </body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('two level deep entry points normalize correctly', phases, {
-    'a|web/test/well/test.html': '''
+  testPhases(
+      'two level deep entry points normalize correctly',
+      phases,
+      {
+        'a|web/test/well/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="../../../packages/a/foo/foo.html">
         </head></html>''',
-    'a|lib/foo/foo.html': '''
+        'a|lib/foo/foo.html': '''
         <script rel="import" href="../../../packages/b/bar/bar.js"></script>''',
-    'b|lib/bar/bar.js': '''
+        'b|lib/bar/bar.js': '''
         console.log("here");''',
-  }, {
-    'a|web/test/well/test.html': '''
+      },
+      {
+        'a|web/test/well/test.html': '''
         <!DOCTYPE html><html><head></head><body>
         <div hidden="">
         <script rel="import" href="../../packages/b/bar/bar.js"></script>
         </div>
         </body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
 
 // void templateTests() {
@@ -887,5 +1053,5 @@
 //             </dom-module>
 //           </body>
 //         </html>''',
-//   }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+//   }, messages: [], formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 // }
diff --git a/test/build/mirrors_remover_test.dart b/test/build/mirrors_remover_test.dart
index 37b43a3..53ae97e 100644
--- a/test/build/mirrors_remover_test.dart
+++ b/test/build/mirrors_remover_test.dart
@@ -10,7 +10,9 @@
 
 main() {
   var transformer = new MirrorsRemoverTransformer();
-  var phases = [[transformer]];
+  var phases = [
+    [transformer]
+  ];
 
   testPhases('basic', phases, {
     'a|lib/src/init.dart': '''
@@ -30,5 +32,5 @@
 
         foo() {}
         ''',
-  }, []);
+  }, messages: []);
 }
diff --git a/test/build/script_compactor_test.dart b/test/build/script_compactor_test.dart
index e0a84d8..11c8c96 100644
--- a/test/build/script_compactor_test.dart
+++ b/test/build/script_compactor_test.dart
@@ -10,7 +10,9 @@
 import 'package:test/test.dart';
 
 var transformer = new ScriptCompactorTransformer();
-var phases = [[transformer]];
+var phases = [
+  [transformer]
+];
 
 main() {
   group('basic', basicTests);
@@ -20,32 +22,41 @@
 }
 
 void basicTests() {
-  testPhases('single script', phases, {
-    'a|web/index.html': '''
+  testPhases(
+      'single script',
+      phases,
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html><html><head></head><body>
           <script type="application/dart" src="index.dart"></script>
         </body></html>''',
-    'a|web/index.dart': '''
+        'a|web/index.dart': '''
         library a.index;
         main(){}''',
-  }, {
-    'a|web/index.html': '''
+      },
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html><html><head></head><body>
         <script type="application/dart" src="index.bootstrap.dart"></script>
         </body></html>''',
-    'a|web/index.bootstrap.dart': '''
+        'a|web/index.bootstrap.dart': '''
         library a.web.index_bootstrap_dart;
 
         import 'index.dart' as i0;
 
         main() => i0.main();''',
-    'a|web/index.dart': '''
+        'a|web/index.dart': '''
         library a.index;
         main(){}''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('multiple scripts from nested html import', phases, {
-    'a|web/index.html': '''
+  testPhases(
+      'multiple scripts from nested html import',
+      phases,
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html><html>
           <head>
             <link rel="import" href="packages/b/a.html">
@@ -54,20 +65,23 @@
             <script type="application/dart" src="index.dart"></script>
           </body>
         </body></html>''',
-    'a|web/index.dart': '''
+        'a|web/index.dart': '''
         library a.index;
         main(){}''',
-    'b|lib/a.html': '''
+        'b|lib/a.html': '''
         <link rel="import" href="b/b.html">
         <link rel="import" href="../../packages/c/c.html">
         <script type="application/dart" src="a.dart"></script>''',
-    'b|lib/b/b.html': '<script type="application/dart" src="b.dart"></script>',
-    'b|lib/a.dart': 'library b.a;',
-    'b|lib/b/b.dart': 'library b.b.b;',
-    'c|lib/c.html': '<script type="application/dart" src="c.dart"></script>',
-    'c|lib/c.dart': 'library c.c;',
-  }, {
-    'a|web/index.html': '''
+        'b|lib/b/b.html':
+            '<script type="application/dart" src="b.dart"></script>',
+        'b|lib/a.dart': 'library b.a;',
+        'b|lib/b/b.dart': 'library b.b.b;',
+        'c|lib/c.html':
+            '<script type="application/dart" src="c.dart"></script>',
+        'c|lib/c.dart': 'library c.c;',
+      },
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html><html>
         <head>
           <link rel="import" href="packages/b/a.html">
@@ -75,7 +89,7 @@
         <body>
           <script type="application/dart" src="index.bootstrap.dart"></script>
         </body></html>''',
-    'a|web/index.bootstrap.dart': '''
+        'a|web/index.bootstrap.dart': '''
         library a.web.index_bootstrap_dart;
 
         import 'package:b/b/b.dart' as i0;
@@ -84,14 +98,19 @@
         import 'index.dart' as i3;
 
         main() => i3.main();''',
-    'b|lib/a.html': '''
+        'b|lib/a.html': '''
         <link rel="import" href="b/b.html">
         <link rel="import" href="../../packages/c/c.html">
         <script type="application/dart" src="a.dart"></script>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('inline scripts', phases, {
-    'a|web/index.html': '''
+  testPhases(
+      'inline scripts',
+      phases,
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -104,14 +123,15 @@
             </script>
           </body>
         </html>''',
-    'a|lib/foo.html': '''
+        'a|lib/foo.html': '''
         <script type="application/dart">
           library a.foo;
 
           import 'bar.dart';
         </script>''',
-  }, {
-    'a|web/index.html': '''
+      },
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -121,251 +141,325 @@
             <script type="application/dart" src="index.bootstrap.dart"></script>
           </body>
         </html>''',
-    'a|web/index.html.1.dart': '''
+        'a|web/index.html.1.dart': '''
         library a.index;
         main(){}''',
-    'a|web/index.html.0.dart': '''
+        'a|web/index.html.0.dart': '''
         library a.foo;
 
         import 'package:a/bar.dart';''',
-    'a|web/index.bootstrap.dart': '''
+        'a|web/index.bootstrap.dart': '''
         library a.web.index_bootstrap_dart;
 
         import 'index.html.0.dart' as i0;
         import 'index.html.1.dart' as i1;
 
         main() => i1.main();''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('Cleans library names generated from file paths.', phases, {
-    'a|web/01_test.html': '''
+  testPhases(
+      'Cleans library names generated from file paths.',
+      phases,
+      {
+        'a|web/01_test.html': '''
         <!DOCTYPE html><html><head>
         <script type="application/dart">/*1*/</script>
         </head></html>''',
-    'a|web/foo_02_test.html': '''
+        'a|web/foo_02_test.html': '''
         <!DOCTYPE html><html><head>
         <script type="application/dart">/*2*/</script>
         </head></html>''',
-    'a|web/test_03.html': '''
+        'a|web/test_03.html': '''
         <!DOCTYPE html><html><head>
         <script type="application/dart">/*3*/</script>
         </head></html>''',
-    'a|web/*test_%foo_04!.html': '''
+        'a|web/*test_%foo_04!.html': '''
         <!DOCTYPE html><html><head>
         <script type="application/dart">/*4*/</script>
         </head></html>''',
-    'a|web/%05_test.html': '''
+        'a|web/%05_test.html': '''
         <!DOCTYPE html><html><head>
         <script type="application/dart">/*5*/</script>
         </head></html>''',
-  }, {
-    // Appends an _ if it starts with a number.
-    'a|web/01_test.html.0.dart': 'library a.web._01_test_html_0;\n/*1*/',
-    // Allows numbers in the middle.
-    'a|web/foo_02_test.html.0.dart': 'library a.web.foo_02_test_html_0;\n/*2*/',
-    // Allows numbers at the end.
-    'a|web/test_03.html.0.dart': 'library a.web.test_03_html_0;\n/*3*/',
-    // Replaces invalid characters with _.
-    'a|web/*test_%foo_04!.html.0.dart':
-        'library a.web._test__foo_04__html_0;\n/*4*/',
-    // Replace invalid character followed by number.
-    'a|web/%05_test.html.0.dart': 'library a.web._05_test_html_0;\n/*5*/',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      {
+        // Appends an _ if it starts with a number.
+        'a|web/01_test.html.0.dart': 'library a.web._01_test_html_0;\n/*1*/',
+        // Allows numbers in the middle.
+        'a|web/foo_02_test.html.0.dart':
+            'library a.web.foo_02_test_html_0;\n/*2*/',
+        // Allows numbers at the end.
+        'a|web/test_03.html.0.dart': 'library a.web.test_03_html_0;\n/*3*/',
+        // Replaces invalid characters with _.
+        'a|web/*test_%foo_04!.html.0.dart':
+            'library a.web._test__foo_04__html_0;\n/*4*/',
+        // Replace invalid character followed by number.
+        'a|web/%05_test.html.0.dart': 'library a.web._05_test_html_0;\n/*5*/',
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('file names with hyphens are ok', phases, {
-    'a|web/a-b.html': '''
+  testPhases(
+      'file names with hyphens are ok',
+      phases,
+      {
+        'a|web/a-b.html': '''
         <!DOCTYPE html><html><head></head><body>
           <script type="application/dart" src="a-b.dart"></script>
         </body></html>''',
-    'a|web/a-b.dart': '''
+        'a|web/a-b.dart': '''
         library a.a_b;
         main(){}''',
-  }, {
-    'a|web/a-b.html': '''
+      },
+      {
+        'a|web/a-b.html': '''
         <!DOCTYPE html><html><head></head><body>
         <script type="application/dart" src="a-b.bootstrap.dart"></script>
         </body></html>''',
-    'a|web/a-b.bootstrap.dart': '''
+        'a|web/a-b.bootstrap.dart': '''
         library a.web.a_b_bootstrap_dart;
 
         import 'a-b.dart' as i0;
 
         main() => i0.main();''',
-    'a|web/a-b.dart': '''
+        'a|web/a-b.dart': '''
         library a.a_b;
         main(){}''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('package names with hyphens give an error', phases, {
-    'a-b|web/a.html': '''
+  testPhases(
+      'package names with hyphens give an error',
+      phases,
+      {
+        'a-b|web/a.html': '''
         <!DOCTYPE html><html><head></head><body>
           <script type="application/dart" src="a.dart"></script>
         </body></html>''',
-    'a-b|web/a.dart': '''
+        'a-b|web/a.dart': '''
         library a.a;
         main(){}''',
-  }, {}, [
-    'error: Invalid package name `a-b`. Package names should be '
-    'valid dart identifiers, as indicated at '
-    'https://www.dartlang.org/tools/pub/pubspec.html#name.'
-  ], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      {},
+      messages: [
+        'error: Invalid package name `a-b`. Package names should be '
+            'valid dart identifiers, as indicated at '
+            'https://www.dartlang.org/tools/pub/pubspec.html#name.'
+      ],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('package names that start with a period are not allowed', phases, {
-    '.a|web/a.html': '''
+  testPhases(
+      'package names that start with a period are not allowed',
+      phases,
+      {
+        '.a|web/a.html': '''
         <!DOCTYPE html><html><head></head><body>
           <script type="application/dart" src="a.dart"></script>
         </body></html>''',
-    '.a|web/a.dart': '''
+        '.a|web/a.dart': '''
         library a.a;
         main(){}''',
-  }, {}, [
-    'error: Invalid package name `.a`. Package names should be '
-    'valid dart identifiers, as indicated at '
-    'https://www.dartlang.org/tools/pub/pubspec.html#name.'
-  ], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      {},
+      messages: [
+        'error: Invalid package name `.a`. Package names should be '
+            'valid dart identifiers, as indicated at '
+            'https://www.dartlang.org/tools/pub/pubspec.html#name.'
+      ],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('package names that end with a period are not allowed', phases, {
-    'a.|web/a.html': '''
+  testPhases(
+      'package names that end with a period are not allowed',
+      phases,
+      {
+        'a.|web/a.html': '''
         <!DOCTYPE html><html><head></head><body>
           <script type="application/dart" src="a.dart"></script>
         </body></html>''',
-    'a.|web/a.dart': '''
+        'a.|web/a.dart': '''
         library a.a;
         main(){}''',
-  }, {}, [
-    'error: Invalid package name `a.`. Package names should be '
-    'valid dart identifiers, as indicated at '
-    'https://www.dartlang.org/tools/pub/pubspec.html#name.'
-  ], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      {},
+      messages: [
+        'error: Invalid package name `a.`. Package names should be '
+            'valid dart identifiers, as indicated at '
+            'https://www.dartlang.org/tools/pub/pubspec.html#name.'
+      ],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('package names with double periods are not allowed', phases, {
-    'a..b|web/a.html': '''
+  testPhases(
+      'package names with double periods are not allowed',
+      phases,
+      {
+        'a..b|web/a.html': '''
         <!DOCTYPE html><html><head></head><body>
           <script type="application/dart" src="a.dart"></script>
         </body></html>''',
-    'a..b|web/a.dart': '''
+        'a..b|web/a.dart': '''
         library a.a;
         main(){}''',
-  }, {}, [
-    'error: Invalid package name `a..b`. Package names should be '
-    'valid dart identifiers, as indicated at '
-    'https://www.dartlang.org/tools/pub/pubspec.html#name.'
-  ], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      {},
+      messages: [
+        'error: Invalid package name `a..b`. Package names should be '
+            'valid dart identifiers, as indicated at '
+            'https://www.dartlang.org/tools/pub/pubspec.html#name.'
+      ],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('package names with internal periods are allowed', phases, {
-    'a.b|web/a.html': '''
+  testPhases(
+      'package names with internal periods are allowed',
+      phases,
+      {
+        'a.b|web/a.html': '''
         <!DOCTYPE html><html><head></head><body>
           <script type="application/dart" src="a.dart"></script>
         </body></html>''',
-    'a.b|web/a.dart': '''
+        'a.b|web/a.dart': '''
         library a.b.a;
         main(){}''',
-  }, {
-    'a.b|web/a.bootstrap.dart': '''
+      },
+      {
+        'a.b|web/a.bootstrap.dart': '''
       library a.b.web.a_bootstrap_dart;
 
       import 'a.dart' as i0;
 
       main() => i0.main();''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
 
 void codeExtractorTests() {
-  testPhases('no dart script', phases, {
-    'a|web/test.html': '<!DOCTYPE html><html></html>',
-  }, {}, [
-    'error: Found either zero or multiple dart scripts in the entry point '
-        '`web/test.html`. Exactly one was expected.',
-  ], StringFormatter.noNewlinesOrSurroundingWhitespace);
+  testPhases('no dart script', phases,
+      {'a|web/test.html': '<!DOCTYPE html><html></html>',}, {},
+      messages: [
+        'error: Found either zero or multiple dart scripts in the entry point '
+            '`web/test.html`. Exactly one was expected.',
+      ],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('single script, no library in script', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'single script, no library in script',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <script type="application/dart">main() { }</script>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
           <script type="application/dart" src="test.bootstrap.dart">
           </script>
         </head><body></body></html>''',
-    'a|web/test.html.0.dart': '''
+        'a|web/test.html.0.dart': '''
         library a.web.test_html_0;
         main() { }''',
-    'a|web/test.bootstrap.dart': '''
+        'a|web/test.bootstrap.dart': '''
         library a.web.test_bootstrap_dart;
 
         import 'test.html.0.dart' as i0;
 
         main() => i0.main();''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('single script, with library', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'single script, with library',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <script type="application/dart">
           library f;
           main() { }
         </script>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
           <script type="application/dart" src="test.bootstrap.dart">
           </script>
         </head><body></body></html>''',
-    'a|web/test.html.0.dart': '''
+        'a|web/test.html.0.dart': '''
         library f;
         main() { }''',
-    'a|web/test.bootstrap.dart': '''
+        'a|web/test.bootstrap.dart': '''
         library a.web.test_bootstrap_dart;
 
         import 'test.html.0.dart' as i0;
 
         main() => i0.main();''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('under lib/ directory not transformed', phases, {
-    'a|lib/test.html': '''
+  testPhases(
+      'under lib/ directory not transformed',
+      phases,
+      {
+        'a|lib/test.html': '''
         <!DOCTYPE html><html><head>
         <script type="application/dart">
           library f;
           main() { }
         </script>''',
-  }, {
-    'a|lib/test.html': '''
+      },
+      {
+        'a|lib/test.html': '''
         <!DOCTYPE html><html><head>
         <script type="application/dart">
           library f;
           main() { }
         </script>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('multiple scripts - error', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'multiple scripts - error',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <script type="application/dart">
             library a1;
             main1() { }
         </script>
         <script type="application/dart">library a2;\nmain2() { }</script>''',
-  }, {}, [
-    'error: Found either zero or multiple dart scripts in the entry point '
-        '`web/test.html`. Exactly one was expected.',
-  ], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      {},
+      messages: [
+        'error: Found either zero or multiple dart scripts in the entry point '
+            '`web/test.html`. Exactly one was expected.',
+      ],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('multiple imported scripts', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'multiple imported scripts',
+      phases,
+      {
+        'a|web/test.html': '''
         <link rel="import" href="test2.html">
         <link rel="import" href="bar/test.html">
         <link rel="import" href="packages/a/foo/test.html">
         <link rel="import" href="packages/b/test.html">
         <script type="application/dart" src="test.dart"></script>''',
-    'a|web/test.dart': 'library a.test;',
-    'a|web/test2.html': '<script type="application/dart">main1() { }',
-    'a|web/bar/test.html': '<script type="application/dart">main2() { }',
-    'a|lib/foo/test.html': '<script type="application/dart">main3() { }',
-    'b|lib/test.html': '<script type="application/dart">main4() { }',
-  }, {
-    'a|web/test.html': '''
+        'a|web/test.dart': 'library a.test;',
+        'a|web/test2.html': '<script type="application/dart">main1() { }',
+        'a|web/bar/test.html': '<script type="application/dart">main2() { }',
+        'a|lib/foo/test.html': '<script type="application/dart">main3() { }',
+        'b|lib/test.html': '<script type="application/dart">main4() { }',
+      },
+      {
+        'a|web/test.html': '''
         <html>
           <head>
             <link rel="import" href="test2.html">
@@ -374,7 +468,7 @@
             <link rel="import" href="packages/b/test.html">
             <script type="application/dart" src="test.bootstrap.dart"></script>
           </head><body></body></html>''',
-    'a|web/test.bootstrap.dart': '''
+        'a|web/test.bootstrap.dart': '''
         library a.web.test_bootstrap_dart;
         import 'test.html.0.dart' as i0;
         import 'test.html.1.dart' as i1;
@@ -384,30 +478,35 @@
 
         main() => i4.main();
         ''',
-    'a|web/test.html.0.dart': '''
+        'a|web/test.html.0.dart': '''
         library a.web.test_html_0;
         main1() { }''',
-    'a|web/test.html.1.dart': '''
+        'a|web/test.html.1.dart': '''
         library a.web.test_html_1;
         main2() { }''',
-    'a|web/test.html.2.dart': '''
+        'a|web/test.html.2.dart': '''
         library a.web.test_html_2;
         main3() { }''',
-    'a|web/test.html.3.dart': '''
+        'a|web/test.html.3.dart': '''
         library a.web.test_html_3;
         main4() { }''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
 
 dartUriTests() {
-  testPhases('from web folder', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'from web folder',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
           <link rel="import" href="test2/foo.html">
           <script type="application/dart" src="test.dart"></script>
         </head><body></body></html>''',
-    'a|web/test.dart': 'library a.test;',
-    'a|web/test2/foo.html': '''
+        'a|web/test.dart': 'library a.test;',
+        'a|web/test2/foo.html': '''
       <!DOCTYPE html><html><head></head><body>
       <script type="application/dart">
         import 'package:qux/qux.dart';
@@ -416,41 +515,47 @@
         part 'baz.dart';
       </script>
       </body></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
           <link rel="import" href="test2/foo.html">
           <script type="application/dart" src="test.bootstrap.dart"></script>
         </head><body></body></html>''',
-    'a|web/test.html.0.dart': '''
+        'a|web/test.html.0.dart': '''
         library a.web.test_html_0;
 
         import 'package:qux/qux.dart';
         import 'test2/foo.dart';
         export 'test2/bar.dart';
         part 'test2/baz.dart';''',
-    'a|web/test2/foo.html': '''
+        'a|web/test2/foo.html': '''
         <!DOCTYPE html><html><head></head><body>
           <script type="application/dart" src="foo.bootstrap.dart">
           </script>
         </body></html>''',
-    'a|web/test2/foo.html.0.dart': '''
+        'a|web/test2/foo.html.0.dart': '''
         library a.web.test2.foo_html_0;
 
         import 'package:qux/qux.dart';
         import 'foo.dart';
         export 'bar.dart';
         part 'baz.dart';''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('from lib folder', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'from lib folder',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
         <link rel="import" href="packages/a/test2/foo.html">
         <script type="application/dart" src="test.dart"></script>
         </head><body></body></html>''',
-    'a|web/test.dart': 'library a.test;',
-    'a|lib/test2/foo.html': '''
+        'a|web/test.dart': 'library a.test;',
+        'a|lib/test2/foo.html': '''
         <!DOCTYPE html><html><head></head><body>
         <script type="application/dart">
           import 'package:qux/qux.dart';
@@ -459,20 +564,21 @@
           part 'baz.dart';
         </script>
         </body></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
           <link rel="import" href="packages/a/test2/foo.html">
           <script type="application/dart" src="test.bootstrap.dart"></script>
         </head><body></body></html>''',
-    'a|web/test.html.0.dart': '''
+        'a|web/test.html.0.dart': '''
         library a.web.test_html_0;
 
         import 'package:qux/qux.dart';
         import 'package:a/test2/foo.dart';
         export 'package:a/test2/bar.dart';
         part 'package:a/test2/baz.dart';''',
-    'a|lib/test2/foo.html': '''
+        'a|lib/test2/foo.html': '''
         <!DOCTYPE html><html><head></head><body>
         <script type="application/dart">
           import 'package:qux/qux.dart';
@@ -481,16 +587,21 @@
           part 'baz.dart';
         </script>
         </body></html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('from another pkg', phases, {
-    'a|web/test.html': '''
+  testPhases(
+      'from another pkg',
+      phases,
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
           <link rel="import" href="packages/b/test2/foo.html">
           <script type="application/dart" src="test.dart"></script>
         </head><body></body></html>''',
-    'a|web/test.dart': 'library a.test;',
-    'b|lib/test2/foo.html': '''
+        'a|web/test.dart': 'library a.test;',
+        'b|lib/test2/foo.html': '''
       <!DOCTYPE html><html><head></head><body>
       <script type="application/dart">
       import 'package:qux/qux.dart';
@@ -499,20 +610,23 @@
       part 'baz.dart';
       </script>
       </body></html>''',
-  }, {
-    'a|web/test.html': '''
+      },
+      {
+        'a|web/test.html': '''
         <!DOCTYPE html><html><head>
           <link rel="import" href="packages/b/test2/foo.html">
           <script type="application/dart" src="test.bootstrap.dart"></script>
         </head><body></body></html>''',
-    'a|web/test.html.0.dart': '''
+        'a|web/test.html.0.dart': '''
         library a.web.test_html_0;
 
         import 'package:qux/qux.dart';
         import 'package:b/test2/foo.dart';
         export 'package:b/test2/bar.dart';
         part 'package:b/test2/baz.dart';''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
 
 validateUriTests() {
@@ -521,7 +635,7 @@
         <!DOCTYPE html><html><body>
         <script type="application/dart" src="a.dart"></script>
         </body></html>''',
-  }, {}, [
+  }, {}, messages: [
     'warning: ${scriptFileNotFound.create({'url': 'a|web/a.dart'}).snippet} '
         '(web/test.html 1 8)',
   ]);
diff --git a/test/build/test_compatibility_test.dart b/test/build/test_compatibility_test.dart
index dc6e3cb..37f2012 100644
--- a/test/build/test_compatibility_test.dart
+++ b/test/build/test_compatibility_test.dart
@@ -12,8 +12,13 @@
 var end = new RewriteScriptToXDartTest(null);
 
 main() {
-  testPhases('can rewrite x-dart-test link tags to script tags', [[start]], {
-    'a|test/index.html': '''
+  testPhases(
+      'can rewrite x-dart-test link tags to script tags',
+      [
+        [start]
+      ],
+      {
+        'a|test/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -21,8 +26,9 @@
           </head>
           <body></body>
         </html>''',
-  }, {
-    'a|test/index.html': '''
+      },
+      {
+        'a|test/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -31,10 +37,17 @@
           </head>
           <body></body>
         </html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('can rewrite script tags to x-dart-test link tags', [[end]], {
-    'a|test/index.html': '''
+  testPhases(
+      'can rewrite script tags to x-dart-test link tags',
+      [
+        [end]
+      ],
+      {
+        'a|test/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -43,8 +56,9 @@
           </head>
           <body></body>
         </html>''',
-  }, {
-    'a|test/index.html': '''
+      },
+      {
+        'a|test/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -52,10 +66,18 @@
           </head>
           <body></body>
         </html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('restores original application at the end', [[start], [end]], {
-    'a|test/index.html': '''
+  testPhases(
+      'restores original application at the end',
+      [
+        [start],
+        [end]
+      ],
+      {
+        'a|test/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -63,8 +85,9 @@
           </head>
           <body></body>
         </html>''',
-  }, {
-    'a|test/index.html': '''
+      },
+      {
+        'a|test/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -72,5 +95,7 @@
           </head>
           <body></body>
         </html>''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
diff --git a/test/build/transformer_test.dart b/test/build/transformer_test.dart
index 35bc330..0e05cf8 100644
--- a/test/build/transformer_test.dart
+++ b/test/build/transformer_test.dart
@@ -11,11 +11,16 @@
 
 var transformer = new WebComponentsTransformerGroup(
     new TransformOptions(['web/index.html', 'test/index.html'], false));
-var phases = [[transformer]];
+var phases = [
+  [transformer]
+];
 
 main() {
-  testPhases('full app', phases, {
-    'a|web/index.html': '''
+  testPhases(
+      'full app',
+      phases,
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -26,7 +31,7 @@
           </body>
         </html>
         ''',
-    'a|web/index.dart': '''
+        'a|web/index.dart': '''
         library a;
 
         import 'package:initialize/initialize.dart';
@@ -34,15 +39,15 @@
         @initMethod
         startup() {}
         ''',
-    'b|lib/foo.html': '''
+        'b|lib/foo.html': '''
         <link rel="import" href="bar.html">
         <script type="application/dart" src="foo.dart"></script>
         <div>foo</div>
         ''',
-    'b|lib/foo.dart': '''
+        'b|lib/foo.dart': '''
         library b.foo;
         ''',
-    'b|lib/bar.html': '''
+        'b|lib/bar.html': '''
         <script type="application/dart">
           // Must use package:urls inside inline script tags,
           @HtmlImport('package:b/bar_nodart.html')
@@ -57,13 +62,15 @@
         </script>
         <div>bar</div>
         ''',
-    'b|lib/bar_nodart.html': '''
+        'b|lib/bar_nodart.html': '''
         <div>bar no_dart!</div>
         ''',
-    'initialize|lib/initialize.dart': mockInitialize,
-    'web_components|lib/html_import_annotation.dart': mockHtmlImportAnnotation,
-  }, {
-    'a|web/index.html': '''
+        'initialize|lib/initialize.dart': mockInitialize,
+        'web_components|lib/html_import_annotation.dart':
+            mockHtmlImportAnnotation,
+      },
+      {
+        'a|web/index.html': '''
         <!DOCTYPE html>
         <html>
           <head></head>
@@ -78,7 +85,7 @@
           </body>
         </html>
         ''',
-    'a|web/index.bootstrap.initialize.dart': '''
+        'a|web/index.bootstrap.initialize.dart': '''
         import 'package:initialize/src/static_loader.dart';
         import 'package:initialize/initialize.dart';
         import 'index.bootstrap.dart' as i0;
@@ -95,7 +102,7 @@
           return i0.main();
         }
         ''',
-    'a|web/index.bootstrap.dart': '''
+        'a|web/index.bootstrap.dart': '''
         library a.web.index_bootstrap_dart;
 
         import 'index.html.0.dart' as i0;
@@ -104,7 +111,7 @@
 
         main() => i2.main();
         ''',
-    'a|web/index.html.0.dart': '''
+        'a|web/index.html.0.dart': '''
         // Must use package:urls inside inline script tags,
         @HtmlImport('package:b/bar_nodart.html')
         library b.bar;
@@ -116,10 +123,15 @@
         @initMethod
         bar() {}
         ''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('imports go above the dart script', phases, {
-    'b|web/index.html': '''
+  testPhases(
+      'imports go above the dart script',
+      phases,
+      {
+        'b|web/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -131,29 +143,31 @@
           </body>
         </html>
         ''',
-    'b|web/index.dart': '''
+        'b|web/index.dart': '''
         @HtmlImport('package:b/b.html')
         library b;
 
         import 'package:web_components/html_import_annotation.dart';
         import 'package:c/c.dart';
         ''',
-    'b|lib/b.html': '''
+        'b|lib/b.html': '''
         <div>b</div>
         ''',
-    'c|lib/c.dart': '''
+        'c|lib/c.dart': '''
         @HtmlImport('c.html')
         library c;
 
         import 'package:web_components/html_import_annotation.dart';
         ''',
-    'c|lib/c.html': '''
+        'c|lib/c.html': '''
         <div>c</div>
         ''',
-    'initialize|lib/initialize.dart': mockInitialize,
-    'web_components|lib/html_import_annotation.dart': mockHtmlImportAnnotation,
-  }, {
-    'b|web/index.html': '''
+        'initialize|lib/initialize.dart': mockInitialize,
+        'web_components|lib/html_import_annotation.dart':
+            mockHtmlImportAnnotation,
+      },
+      {
+        'b|web/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -170,10 +184,15 @@
           </body>
         </html>
         ''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-  testPhases('test compatibility', phases, {
-    'a|test/index.html': '''
+  testPhases(
+      'test compatibility',
+      phases,
+      {
+        'a|test/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -183,15 +202,17 @@
           <body></body>
         </html>
         ''',
-    'a|test/index.dart': '''
+        'a|test/index.dart': '''
         library a;
 
         main() {}
         ''',
-    'initialize|lib/initialize.dart': mockInitialize,
-    'web_components|lib/html_import_annotation.dart': mockHtmlImportAnnotation,
-  }, {
-    'a|test/index.html': '''
+        'initialize|lib/initialize.dart': mockInitialize,
+        'web_components|lib/html_import_annotation.dart':
+            mockHtmlImportAnnotation,
+      },
+      {
+        'a|test/index.html': '''
         <!DOCTYPE html>
         <html>
           <head>
@@ -201,5 +222,7 @@
           <body></body>
         </html>
         ''',
-  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
diff --git a/test/html_import_annotation_test.dart b/test/html_import_annotation_test.dart
index d935e57..64b7132 100644
--- a/test/html_import_annotation_test.dart
+++ b/test/html_import_annotation_test.dart
@@ -8,10 +8,11 @@
 import 'dart:html';
 import 'package:test/test.dart';
 import 'package:web_components/web_components.dart';
-import 'foo/bar.dart';
+import 'foo/bar.dart' as foo_bar;
 
 const String importPath = 'my_import.html';
 
+/// Uses [foo_bar].
 main() async {
   await initWebComponents();
 
diff --git a/test/init_web_components_test.dart b/test/init_web_components_test.dart
index cd418e2..4633963 100644
--- a/test/init_web_components_test.dart
+++ b/test/init_web_components_test.dart
@@ -19,9 +19,12 @@
         const LibraryIdentifier(
             #web_components.test.deps.b, null, 'deps/b.dart'),
         // This one changes based on deploy mode because its an inline script.
-        const LibraryIdentifier(#web_components.test.deps.c, null, deployMode
-            ? 'init_web_components_test.html.0.dart'
-            : 'deps/c.html'),
+        const LibraryIdentifier(
+            #web_components.test.deps.c,
+            null,
+            deployMode
+                ? 'init_web_components_test.html.0.dart'
+                : 'deps/c.html'),
         const LibraryIdentifier(
             #web_components.test.deps.a, null, 'deps/a.dart'),
         const LibraryIdentifier(#web_components.test.init_web_components_test,
diff --git a/test/interop_test.dart b/test/interop_test.dart
index 30bde10..0b7fcc5 100644
--- a/test/interop_test.dart
+++ b/test/interop_test.dart
@@ -5,7 +5,6 @@
 library template_wrappers_test;
 
 import 'dart:html';
-import 'dart:async';
 import 'dart:js' show context, JsObject;
 import 'package:test/test.dart';
 import 'package:web_components/interop.dart';
@@ -42,13 +41,13 @@
     onlyUpgradeNewElements();
     registerDartType('x-d', XDWrapper); // late on purpose.
 
-    a = document.querySelector('x-a');
+    a = document.querySelector('x-a') as XAWrapper;
     expect(a is HtmlElement, isTrue, reason: 'x-a is HtmlElement');
     expect(a is XAWrapper, isTrue, reason: 'x-a is upgraded to XAWrapper');
     expect(a.x, 0);
     expect(a.wrapperCount, 0);
 
-    b = document.querySelector('[is=x-b]');
+    b = document.querySelector('[is=x-b]') as XBWrapper;
     expect(b is DivElement, isTrue, reason: 'x-b is DivElement');
     expect(b is XBWrapper, isTrue, reason: 'x-b is upgraded to XBWrapper');
     expect(b.x, 1);
@@ -75,7 +74,7 @@
     expect(a is HtmlElement, isTrue, reason: 'x-a is HtmlElement');
     expect(a is XAWrapper, isTrue, reason: 'x-a is upgraded to XAWrapper');
     expect(a.x, 3);
-    expect(a.wrapperCount, 2);
+    expect((a as XAWrapper).wrapperCount, 2);
 
     context.callMethod('addB');
     list = document.querySelectorAll('[is=x-b]');
@@ -84,7 +83,7 @@
     expect(b is DivElement, isTrue, reason: 'x-b is DivElement');
     expect(b is XBWrapper, isTrue, reason: 'x-b is upgraded to XBWrapper');
     expect(b.x, 4);
-    expect(b.wrapperCount, 3);
+    expect((b as XBWrapper).wrapperCount, 3);
 
     // New instances of x-d should be upgraded regardless.
     context.callMethod('addD');
@@ -94,7 +93,7 @@
     expect(d is HtmlElement, isTrue, reason: 'x-d is HtmlElement');
     expect(d is XDWrapper, isTrue, reason: 'x-d is upgraded to XDWrapper');
     expect(d.x, 5);
-    expect(d.wrapperCount, 4);
+    expect((d as XDWrapper).wrapperCount, 4);
   }, skip: 'https://github.com/dart-lang/web-components/issues/38');
 
   test('events seen if Dart type is registered before registerElement', () {
@@ -106,7 +105,7 @@
     c = document.querySelector('x-c');
     expect(c is XCWrapper, isTrue);
     expect(c.x, 6);
-    expect(c.wrapperCount, 5);
+    expect((c as XCWrapper).wrapperCount, 5);
 
     context.callMethod('addC');
     var list = document.querySelectorAll('x-c');
@@ -116,7 +115,7 @@
     expect(c is HtmlElement, isTrue, reason: 'x-c is HtmlElement');
     expect(c is XCWrapper, isTrue, reason: 'x-c is upgraded to XCWrapper');
     expect(c.x, 7);
-    expect(c.wrapperCount, 6);
+    expect((c as XCWrapper).wrapperCount, 6);
   }, skip: 'https://github.com/dart-lang/web-components/issues/38');
 
   test('element can extend another element', () {
@@ -129,6 +128,7 @@
     expect(e.y, 9);
   }, skip: 'https://github.com/dart-lang/web-components/issues/38');
 }
+
 int _count = 0;
 
 abstract class Wrapper {
