diff --git a/lib/build/html_import_annotation_recorder.dart b/lib/build/html_import_annotation_recorder.dart
index 9474d69..d54b579 100644
--- a/lib/build/html_import_annotation_recorder.dart
+++ b/lib/build/html_import_annotation_recorder.dart
@@ -35,8 +35,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 '
@@ -65,13 +68,18 @@
 
     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..8703ead 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;
@@ -303,7 +306,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..7537cf6 100644
--- a/lib/build/script_compactor.dart
+++ b/lib/build/script_compactor.dart
@@ -162,8 +162,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));
         }
       });
     });
@@ -249,7 +249,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/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/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_inliner_test.dart b/test/build/import_inliner_test.dart
index b183538..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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, {}, messages: [
-    'warning: ${inlineImportFail.create({
+      },
+      {},
+      messages: [
+        'warning: ${inlineImportFail.create({
           'error': 'Could not find asset a|web/foo.html.'
       }).snippet} '
-        '(web/test.html 1 8)',
-  ], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, formatter: 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>''',
-  }, formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
 
 // void templateTests() {
diff --git a/test/build/mirrors_remover_test.dart b/test/build/mirrors_remover_test.dart
index de1a70c..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': '''
diff --git a/test/build/script_compactor_test.dart b/test/build/script_compactor_test.dart
index 225783d..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(){}''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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();''',
-  }, messages: [], formatter: 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*/',
-  }, messages: [], formatter: 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(){}''',
-  }, messages: [], formatter: 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(){}''',
-  }, {}, 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);
+      },
+      {},
+      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(){}''',
-  }, {}, 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);
+      },
+      {},
+      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(){}''',
-  }, {}, 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);
+      },
+      {},
+      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(){}''',
-  }, {}, 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);
+      },
+      {},
+      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();''',
-  }, messages: [], formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
 
 void codeExtractorTests() {
-  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('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();''',
-  }, messages: [], formatter: 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();''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, {}, messages: [
-    'error: Found either zero or multiple dart scripts in the entry point '
-        '`web/test.html`. Exactly one was expected.',
-  ], formatter: 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() { }''',
-  }, messages: [], formatter: 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';''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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';''',
-  }, messages: [], formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
 
 validateUriTests() {
diff --git a/test/build/test_compatibility_test.dart b/test/build/test_compatibility_test.dart
index f27071a..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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: 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>''',
-  }, messages: [], formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
diff --git a/test/build/transformer_test.dart b/test/build/transformer_test.dart
index 9542ca8..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() {}
         ''',
-  }, messages: [], formatter: 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>
         ''',
-  }, messages: [], formatter: 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>
         ''',
-  }, messages: [], formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
+      },
+      messages: [],
+      formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
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..0155eda 100644
--- a/test/interop_test.dart
+++ b/test/interop_test.dart
@@ -129,6 +129,7 @@
     expect(e.y, 9);
   }, skip: 'https://github.com/dart-lang/web-components/issues/38');
 }
+
 int _count = 0;
 
 abstract class Wrapper {
