diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4630daf..460ecb7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+#### 0.12.1
+  * Update analyzer to `^0.27.0` and update to the test package.
+
 #### 0.12.0+4
   * The transformer will now give an informative error on package names with
     hyphens.
diff --git a/e2e_test/html_imports/pubspec.yaml b/e2e_test/html_imports/pubspec.yaml
index 996c03b..c7afae9 100644
--- a/e2e_test/html_imports/pubspec.yaml
+++ b/e2e_test/html_imports/pubspec.yaml
@@ -1,11 +1,10 @@
 name: html_imports
 dependencies:
-  browser: '^0.10.0'
   initialize: any
   web_components:
     path: '../../'
 dev_dependencies:
-  unittest: '^0.11.0'
+  test: '^0.12.0'
 transformers:
 - web_components:
     $include: '**/*_test.html'
diff --git a/e2e_test/html_imports/test/basic_test.dart b/e2e_test/html_imports/test/basic_test.dart
index 0f1aee8..c03e79d 100644
--- a/e2e_test/html_imports/test/basic_test.dart
+++ b/e2e_test/html_imports/test/basic_test.dart
@@ -1,24 +1,22 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+@TestOn('browser')
 @HtmlImport('packages/html_imports/theme.html')
 library e2e_test.html_imports.basic_test;
 
 import 'dart:html';
 import 'package:initialize/initialize.dart' as init;
 import 'package:web_components/html_import_annotation.dart';
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
-main() {
-  useHtmlConfiguration();
-
+main() async {
   // Waits until all html imports are loaded.
-  init.run().then((_) {
-    test('text is red', () {
-      var p = document.createElement('p');
-      document.body.append(p);
-      expect(p.getComputedStyle().color, 'rgb(255, 0, 0)');
-    });
+  await init.run();
+
+  test('text is red', () {
+    var p = document.createElement('p');
+    document.body.append(p);
+    expect(p.getComputedStyle().color, 'rgb(255, 0, 0)');
   });
 }
diff --git a/e2e_test/html_imports/test/basic_test.html b/e2e_test/html_imports/test/basic_test.html
index e899e5d..c1d95f6 100644
--- a/e2e_test/html_imports/test/basic_test.html
+++ b/e2e_test/html_imports/test/basic_test.html
@@ -4,9 +4,7 @@
     <meta name="dart.unittest" content="full-stack-traces">
   </head>
   <body>
-    <script type="text/javascript"
-            src="/root_dart/tools/testing/dart/test_controller.js"></script>
-    <script type="application/dart" src="basic_test.dart"></script>
-    <script src="packages/browser/dart.js"></script>
+    <link rel="x-dart-test" href="basic_test.dart">
+    <script src="packages/test/dart.js"></script>
   </body>
 </html>
diff --git a/lib/build/html_import_annotation_recorder.dart b/lib/build/html_import_annotation_recorder.dart
index ba5d2ab..9474d69 100644
--- a/lib/build/html_import_annotation_recorder.dart
+++ b/lib/build/html_import_annotation_recorder.dart
@@ -67,11 +67,11 @@
     if (annotationElement.element is PropertyAccessorElement) {
       originalImportPath = resolver.evaluateConstant(
               element.library, annotation.name).value.fields[
-          'filePath'].stringValue;
+          'filePath'].toStringValue();
     } else {
       assert(annotationElement.element is ConstructorElement);
       originalImportPath = resolver.evaluateConstant(element.library,
-          annotation.arguments.arguments.first).value.stringValue;
+          annotation.arguments.arguments.first).value.toStringValue();
     }
 
     var libPath;
diff --git a/pubspec.yaml b/pubspec.yaml
index a6672d8..c6fd6d0 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: web_components
-version: 0.12.0+4
+version: 0.12.1
 author: Polymer.dart Authors <web-ui-dev@dartlang.org>
 homepage: https://github.com/dart-lang/web-components/
 description: >
@@ -10,14 +10,14 @@
   elements, by hiding DOM subtrees under shadow roots. HTML Imports let authors
   bundle code and HTML as if they were libraries.
 dependencies:
-  analyzer: '>=0.22.4 <0.27.0'
+  analyzer: '^0.27.0'
   barback: '>=0.14.2 <0.16.0'
-  code_transformers: '^0.2.7'
+  code_transformers: '^0.3.0'
   html: '^0.12.0'
   initialize: '^0.6.0'
   path: '^1.3.0'
 dev_dependencies:
-  unittest: '^0.11.0'
+  test: '^0.12.0'
   browser: '^0.10.0'
 transformers:
 - web_components/build/mirrors_remover:
@@ -29,6 +29,8 @@
       - test/custom_element_proxy_test.html
       - test/html_import_annotation_test.html
       - test/init_web_components_test.html
+- test/pub_serve:
+    $include: test/**_test{.*,}.dart
 
 environment:
   sdk: ">=1.9.0-dev.7.1 <2.0.0"
diff --git a/test/build/html_import_annotation_recorder_test.dart b/test/build/html_import_annotation_recorder_test.dart
index a6e832c..0b0fa0d 100644
--- a/test/build/html_import_annotation_recorder_test.dart
+++ b/test/build/html_import_annotation_recorder_test.dart
@@ -1,13 +1,13 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+@TestOn('vm')
 library web_components.test.build.html_import_annotation_recorder_test;
 
 import 'package:code_transformers/tests.dart' hide testPhases;
 import 'package:web_components/build/html_import_annotation_recorder.dart';
 import 'package:initialize/transformer.dart';
-import 'package:unittest/compact_vm_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'common.dart';
 
 testPhases(String name, Map<String, String> inputs,
@@ -29,8 +29,6 @@
 }
 
 main() {
-  useCompactVMConfiguration();
-
   testPhases('basic', {
     'a|web/index.dart': '''
         @HtmlImport('index.html')
diff --git a/test/build/import_crawler_test.dart b/test/build/import_crawler_test.dart
index 50d6d80..cf0b3de 100644
--- a/test/build/import_crawler_test.dart
+++ b/test/build/import_crawler_test.dart
@@ -1,6 +1,7 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+@TestOn('vm')
 library web_components.test.build.import_crawler_test;
 
 import 'dart:async';
@@ -10,7 +11,7 @@
 import 'package:html/dom.dart' show Document;
 import 'package:web_components/build/common.dart';
 import 'package:web_components/build/import_crawler.dart';
-import 'package:unittest/compact_vm_config.dart';
+import 'package:test/test.dart';
 
 class _TestTransformer extends Transformer {
   final String _entryPoint;
@@ -48,7 +49,6 @@
 }
 
 main() {
-  useCompactVMConfiguration();
   runTests([[new _TestTransformer('web/index.html')]]);
   // Test with a preparsed original document as well.
   runTests([[new _TestTransformer('web/index.html', true)]]);
diff --git a/test/build/import_inliner_test.dart b/test/build/import_inliner_test.dart
index 046fcf4..f31fe4e 100644
--- a/test/build/import_inliner_test.dart
+++ b/test/build/import_inliner_test.dart
@@ -1,865 +1,43 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+@TestOn('vm')
 library web_components.test.build.import_inliner_test;
 
 import 'package:code_transformers/tests.dart';
 import 'package:web_components/build/import_inliner.dart';
 import 'package:web_components/build/messages.dart';
-import 'package:unittest/compact_vm_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 var transformer = new ImportInlinerTransformer(null, ['{{', '[[']);
 var phases = [[transformer]];
 
 main() {
-  useCompactVMConfiguration();
-
-//  group('rel=import', importTests);
-//  group('url attributes', urlAttributeTests);
-//  group('deep entrypoints', entryPointTests);
-  group('templates', templateTests);
+  group('rel=import', importTests);
+  group('url attributes', urlAttributeTests);
+  group('deep entrypoints', entryPointTests);
+  // group('templates', templateTests);
 }
 
-//void importTests() {
-//  testPhases('no imports', phases, {
-//    'a|web/index.html': '''
-//        <!DOCTYPE html><html><head></head><body></body></html>''',
-//  }, {
-//    'a|web/index.html': '''
-//        <!DOCTYPE html><html><head></head><body></body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <div>hello from foo!</div>
-//        <script type="application/dart" src="foo.dart"></script>
-//        ''',
-//  }, {
-//    'a|web/index.html': '''
-//        <!DOCTYPE html>
-//        <html>
-//          <head></head>
-//          <body>
-//            <div hidden="">
-//              <div>hello from foo!</div>
-//            </div>
-//          </body>
-//        </html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!DOCTYPE html><html><head><script>/*third*/</script>
-//        </head><body><polymer-element>2</polymer-element></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>
-//        </head><body>
-//        <div hidden="">
-//        <script>/*third*/</script>
-//        <polymer-element>2</polymer-element>
-//        <script>/*forth*/</script>
-//        </div>
-//        </body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  testPhases('preserves order of scripts, extract Dart 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="test2.html">
-//            <script type="application/dart">/*fifth*/</script>
-//          </head>
-//        </html>''',
-//    'a|web/test2.html': '''
-//        <!DOCTYPE html>
-//        <html>
-//          <head>
-//            <script>/*third*/</script>
-//            <script type="application/dart">/*forth*/</script>
-//          </head>
-//          <body>
-//            <polymer-element>2</polymer-element>
-//          </body>
-//        </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>
-//          </head>
-//          <body>
-//            <div hidden="">
-//            <script>/*third*/</script>
-//            <polymer-element>2</polymer-element>
-//            <script type="application/dart">/*fifth*/</script>
-//            </div>
-//          </body>
-//        </html>''',
-//    'a|web/test2.html': '''
-//        <!DOCTYPE html>
-//        <html>
-//          <head>
-//            <script>/*third*/</script>
-//            <script type="application/dart">/*forth*/</script>
-//          </head>
-//          <body>
-//            <polymer-element>2</polymer-element>
-//          </body>
-//        </html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>2</polymer-element></html>''',
-//  }, {
-//    'a|lib/test.html': '''
-//        <!DOCTYPE html><html><head>
-//        <link rel="import" href="test2.html">
-//        </head></html>''',
-//    'a|lib/test2.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>2</polymer-element></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>2</polymer-element></html>''',
-//    'a|web/test3.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>3</polymer-element></html>''',
-//  }, {
-//    'a|web/test.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>2</polymer-element>
-//        <polymer-element>3</polymer-element>
-//        </div>
-//        </body></html>''',
-//    'a|web/test2.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>2</polymer-element></html>''',
-//    'a|web/test3.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>3</polymer-element></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!DOCTYPE html><html><head>
-//        <link rel="import" href="assets/b/test3.html">
-//        </head><body><polymer-element>2</polymer-element></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': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>4</polymer-element></html>''',
-//  }, {
-//    'a|web/test.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>4</polymer-element>
-//        <polymer-element>3</polymer-element>
-//        <polymer-element>2</polymer-element>
-//        </div>
-//        </body></html>''',
-//    'a|web/test2.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>4</polymer-element>
-//        <polymer-element>3</polymer-element>
-//        </div>
-//        <polymer-element>2</polymer-element>
-//        </body></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': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>4</polymer-element></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!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': '''
-//        <!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': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>3a</polymer-element></body></html>''',
-//    'a|web/test3b.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>3b</polymer-element></body></html>''',
-//    'a|web/test4a.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>4a</polymer-element></body></html>''',
-//    'a|web/test4b.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>4b</polymer-element></body></html>''',
-//  }, {
-//    'a|web/test.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>3a</polymer-element>
-//        <polymer-element>3b</polymer-element>
-//        <polymer-element>2a</polymer-element>
-//        <polymer-element>4a</polymer-element>
-//        <polymer-element>4b</polymer-element>
-//        <polymer-element>2b</polymer-element>
-//        </div>
-//        </body></html>''',
-//    'a|web/test2a.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>3a</polymer-element>
-//        <polymer-element>3b</polymer-element>
-//        </div>
-//        <polymer-element>2a</polymer-element>
-//        </body></html>''',
-//    'a|web/test2b.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>4a</polymer-element>
-//        <polymer-element>4b</polymer-element>
-//        </div>
-//        <polymer-element>2b</polymer-element>
-//        </body></html>''',
-//    'a|web/test3a.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <polymer-element>3a</polymer-element>
-//        </body></html>''',
-//    'a|web/test3b.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <polymer-element>3b</polymer-element>
-//        </body></html>''',
-//    'a|web/test4a.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <polymer-element>4a</polymer-element>
-//        </body></html>''',
-//    'a|web/test4b.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <polymer-element>4b</polymer-element>
-//        </body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!DOCTYPE html><html><head>
-//        <link rel="import" href="test_2.html">
-//        </head><body><polymer-element>1</polymer-element></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': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>2</polymer-element>
-//        <polymer-element>1</polymer-element>
-//        </div>
-//        </body></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': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>1</polymer-element>
-//        </div>
-//        <polymer-element>2</polymer-element></body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!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': '''
-//        <!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': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>2</polymer-element>
-//        <script src="s2"></script>
-//        <polymer-element>1</polymer-element>
-//        <script src="s1"></script>
-//        </div>
-//        </body></html>''',
-//    'a|web/test_1.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>2</polymer-element>
-//        <script src="s2"></script>
-//        </div>
-//        <polymer-element>1</polymer-element>
-//        <script src="s1"></script></body></html>''',
-//    'a|web/test_2.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>1</polymer-element>
-//        <script src="s1"></script>
-//        </div>
-//        <polymer-element>2</polymer-element>
-//        <script src="s2"></script></body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!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': '''
-//        <!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': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>2</polymer-element>
-//        <polymer-element>1</polymer-element>
-//        </div>
-//        </body></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>
-//        <script type="application/dart" src="s1.dart"></script>
-//        </body></html>''',
-//    'a|web/test_2.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>1</polymer-element>
-//        </div>
-//        <polymer-element>2
-//        <script type="application/dart" src="s2.dart"></script>
-//        </polymer-element>
-//        </body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!DOCTYPE html><html><head>
-//        <link rel="import" href="test_1.html">
-//        </head><body>
-//        <foo>42</foo><bar-baz></bar-baz>
-//        <polymer-element>1'
-//        <script src="s1.js"></script>
-//        <script type="application/dart" src="s1.dart"></script>
-//        </polymer-element>
-//        'FOO'</body></html>''',
-//    'a|web/s1.dart': '',
-//  }, {
-//    'a|web/test.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <foo>42</foo><bar-baz></bar-baz>
-//        <polymer-element>1'
-//        <script src="s1.js"></script>
-//        </polymer-element>
-//        'FOO'
-//        </div>
-//        </body></html>''',
-//    'a|web/test_1.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <foo>42</foo><bar-baz></bar-baz>
-//        <polymer-element>1'
-//        <script src="s1.js"></script>
-//        <script type="application/dart" src="s1.dart"></script>
-//        </polymer-element>
-//        'FOO'</body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!DOCTYPE html><html><head>
-//        <link rel="import" href="test_2.html">
-//        </head><body><polymer-element>1</polymer-element></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': '''
-//        <!DOCTYPE html><html><head>
-//        <link rel="import" href="test_1.html">
-//        </head><body><polymer-element>3</polymer-element></html>''',
-//  }, {
-//    'a|web/test.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>3</polymer-element>
-//        <polymer-element>2</polymer-element>
-//        <polymer-element>1</polymer-element>
-//        </div>
-//        </body></html>''',
-//    'a|web/test_1.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>3</polymer-element>
-//        <polymer-element>2</polymer-element>
-//        </div>
-//        <polymer-element>1</polymer-element></body></html>''',
-//    'a|web/test_2.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>1</polymer-element>
-//        <polymer-element>3</polymer-element>
-//        </div>
-//        <polymer-element>2</polymer-element></body></html>''',
-//    'a|web/test_3.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>2</polymer-element>
-//        <polymer-element>1</polymer-element>
-//        </div>
-//        <polymer-element>3</polymer-element></body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!DOCTYPE html><html><head>
-//        <link rel="import" href="test_1.html">
-//        </head><body><polymer-element>1</polymer-element></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': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <polymer-element>1</polymer-element></body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!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': '''
-//        <!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': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body><polymer-element>3</polymer-element></body></html>''',
-//  }, {
-//    'a|web/test.html': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <div hidden="">
-//        <polymer-element>3</polymer-element>
-//        <polymer-element>1</polymer-element>
-//        <polymer-element>2</polymer-element>
-//        </div>
-//        </body></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': '''
-//        <!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': '''
-//        <!DOCTYPE html><html><head>
-//        </head><body>
-//        <polymer-element>3</polymer-element></body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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({
-//          'error': 'Could not find asset a|web/foo.html.'
-//      }).snippet} '
-//        '(web/test.html 1 8)',
-//  ], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  testPhases('absolute uri', phases, {
-//    'a|web/test.html': '''
-//        <!DOCTYPE html><html><head>
-//        <link rel="stylesheet" href="/foo.css">
-//        </head></html>''',
-//    'a|web/test2.html': '''
-//        <!DOCTYPE html><html><head>
-//        <link rel="stylesheet" href="http://example.com/bar.css">
-//        </head></html>''',
-//  }, {
-//    'a|web/test.html': '''
-//        <!DOCTYPE html><html><head>
-//        <link rel="stylesheet" href="/foo.css">
-//        </head></html>''',
-//    'a|web/test2.html': '''
-//        <!DOCTYPE html><html><head>
-//        <link rel="stylesheet" href="http://example.com/bar.css">
-//        </head></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//}
-//
-//void urlAttributeTests() {
-//  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': '''
-//        <script src="baz.jpg"></script>''',
-//    'a|web/foo/test_2.html': '''
-//        <foo-element src="baz.jpg"></foo-element>''',
-//  }, {
-//    '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': '''
-//        <script src="baz.jpg"></script>''',
-//    'a|web/foo/test_2.html': '''
-//        <foo-element src="baz.jpg"></foo-element>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <img src="[[bar]]">''',
-//  }, {
-//    'a|web/test.html': '''
-//        <!DOCTYPE html><html><head></head><body>
-//        <div hidden="">
-//        <img src="[[bar]]">
-//        </div>
-//        </body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <img src="baz/{{bar}}">
-//        <img src="./{{bar}}">''',
-//  }, {
-//    '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);
-//
-//  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': '''
-//        <img _src="./{{bar}}">
-//        <a _href="./{{bar}}">test</a>''',
-//  }, {
-//    '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);
-//
-//  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': '''
-//        <img _src="{{bar}}">
-//        <img _src="[[bar]]">''',
-//  }, {
-//    'a|web/test.html': '''
-//        <!DOCTYPE html><html><head></head><body>
-//        <div hidden="">
-//          <img _src="{{bar}}">
-//          <img _src="[[bar]]">
-//        </div>
-//        </body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <!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);
-//
-//  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': '''
-//        <!DOCTYPE html><html><head></head><body>
-//        <img src="{{bar[0]}}/{{baz[1]}}.{{extension}}">
-//        </body></html>''',
-//  }, null, StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <link rel="import" href="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': '''
-//        <!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);
-//}
-//
-//void entryPointTests() {
-//  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': '''
-//        <script rel="import" href="../../../packages/b/bar/bar.js">
-//        </script>''',
-//    'b|lib/bar/bar.js': '''
-//        console.log("here");''',
-//  }, {
-//    '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);
-//
-//  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': '''
-//        console.log("here");''',
-//  }, {
-//    'a|web/test/test.html': '''
-//        <!DOCTYPE html><html><head>
-//        <script src="../packages/a/foo/bar.js"></script>
-//        </head><body>
-//        </body></html>''',
-//  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
-//
-//  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': '''
-//        <script rel="import" href="../../../packages/b/bar/bar.js"></script>''',
-//    'b|lib/bar/bar.js': '''
-//        console.log("here");''',
-//  }, {
-//    '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);
-//}
+void importTests() {
+  testPhases('no imports', phases, {
+    'a|web/index.html': '''
+        <!DOCTYPE html><html><head></head><body></body></html>''',
+  }, {
+    'a|web/index.html': '''
+        <!DOCTYPE html><html><head></head><body></body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
 
-void templateTests() {
-  testPhases('allows template inside table', phases, {
+  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>
-            <dom-module id="hello-element">
-              <template>
-                <table>
-                  <thead>
-                    <tr><th>first</th><th>last</th></tr>
-                  </thead>
-                  <tbody>
-                    <template is="dom-repeat" items="{{data}}">
-                      <tr>
-                        <td>{{item.first}}</td>
-                        <td>{{item.last}}</td>
-                      </tr>
-                    </template>
-                  </tbody>
-                </table>
-              </template>
-            </dom-module>
-          </body>
+          <body></body>
         </html>''',
     'a|lib/foo.html': '''
-        <div>hello!</div>
+        <div>hello from foo!</div>
+        <script type="application/dart" src="foo.dart"></script>
         ''',
   }, {
     'a|web/index.html': '''
@@ -868,26 +46,846 @@
           <head></head>
           <body>
             <div hidden="">
-              <div>hello!</div>
+              <div>hello from foo!</div>
             </div>
-            <dom-module id="hello-element">
-              <template>
-                <table>
-                  <thead>
-                    <tr><th>first</th><th>last</th></tr>
-                  </thead>
-                  <tbody>
-                    <template is="dom-repeat" items="{{data}}">
-                      <tr>
-                        <td>{{item.first}}</td>
-                        <td>{{item.last}}</td>
-                      </tr>
-                    </template>
-                  </tbody>
-                </table>
-              </template>
-            </dom-module>
           </body>
         </html>''',
   }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!DOCTYPE html><html><head><script>/*third*/</script>
+        </head><body><polymer-element>2</polymer-element></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>
+        </head><body>
+        <div hidden="">
+        <script>/*third*/</script>
+        <polymer-element>2</polymer-element>
+        <script>/*forth*/</script>
+        </div>
+        </body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  testPhases('preserves order of scripts, extract Dart 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="test2.html">
+            <script type="application/dart">/*fifth*/</script>
+          </head>
+        </html>''',
+    'a|web/test2.html': '''
+        <!DOCTYPE html>
+        <html>
+          <head>
+            <script>/*third*/</script>
+            <script type="application/dart">/*forth*/</script>
+          </head>
+          <body>
+            <polymer-element>2</polymer-element>
+          </body>
+        </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>
+          </head>
+          <body>
+            <div hidden="">
+            <script>/*third*/</script>
+            <polymer-element>2</polymer-element>
+            <script type="application/dart">/*fifth*/</script>
+            </div>
+          </body>
+        </html>''',
+    'a|web/test2.html': '''
+        <!DOCTYPE html>
+        <html>
+          <head>
+            <script>/*third*/</script>
+            <script type="application/dart">/*forth*/</script>
+          </head>
+          <body>
+            <polymer-element>2</polymer-element>
+          </body>
+        </html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>2</polymer-element></html>''',
+  }, {
+    'a|lib/test.html': '''
+        <!DOCTYPE html><html><head>
+        <link rel="import" href="test2.html">
+        </head></html>''',
+    'a|lib/test2.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>2</polymer-element></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>2</polymer-element></html>''',
+    'a|web/test3.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>3</polymer-element></html>''',
+  }, {
+    'a|web/test.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>2</polymer-element>
+        <polymer-element>3</polymer-element>
+        </div>
+        </body></html>''',
+    'a|web/test2.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>2</polymer-element></html>''',
+    'a|web/test3.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>3</polymer-element></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!DOCTYPE html><html><head>
+        <link rel="import" href="assets/b/test3.html">
+        </head><body><polymer-element>2</polymer-element></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': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>4</polymer-element></html>''',
+  }, {
+    'a|web/test.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>4</polymer-element>
+        <polymer-element>3</polymer-element>
+        <polymer-element>2</polymer-element>
+        </div>
+        </body></html>''',
+    'a|web/test2.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>4</polymer-element>
+        <polymer-element>3</polymer-element>
+        </div>
+        <polymer-element>2</polymer-element>
+        </body></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': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>4</polymer-element></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!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': '''
+        <!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': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>3a</polymer-element></body></html>''',
+    'a|web/test3b.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>3b</polymer-element></body></html>''',
+    'a|web/test4a.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>4a</polymer-element></body></html>''',
+    'a|web/test4b.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>4b</polymer-element></body></html>''',
+  }, {
+    'a|web/test.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>3a</polymer-element>
+        <polymer-element>3b</polymer-element>
+        <polymer-element>2a</polymer-element>
+        <polymer-element>4a</polymer-element>
+        <polymer-element>4b</polymer-element>
+        <polymer-element>2b</polymer-element>
+        </div>
+        </body></html>''',
+    'a|web/test2a.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>3a</polymer-element>
+        <polymer-element>3b</polymer-element>
+        </div>
+        <polymer-element>2a</polymer-element>
+        </body></html>''',
+    'a|web/test2b.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>4a</polymer-element>
+        <polymer-element>4b</polymer-element>
+        </div>
+        <polymer-element>2b</polymer-element>
+        </body></html>''',
+    'a|web/test3a.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <polymer-element>3a</polymer-element>
+        </body></html>''',
+    'a|web/test3b.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <polymer-element>3b</polymer-element>
+        </body></html>''',
+    'a|web/test4a.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <polymer-element>4a</polymer-element>
+        </body></html>''',
+    'a|web/test4b.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <polymer-element>4b</polymer-element>
+        </body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!DOCTYPE html><html><head>
+        <link rel="import" href="test_2.html">
+        </head><body><polymer-element>1</polymer-element></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': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>2</polymer-element>
+        <polymer-element>1</polymer-element>
+        </div>
+        </body></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': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>1</polymer-element>
+        </div>
+        <polymer-element>2</polymer-element></body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!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': '''
+        <!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': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>2</polymer-element>
+        <script src="s2"></script>
+        <polymer-element>1</polymer-element>
+        <script src="s1"></script>
+        </div>
+        </body></html>''',
+    'a|web/test_1.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>2</polymer-element>
+        <script src="s2"></script>
+        </div>
+        <polymer-element>1</polymer-element>
+        <script src="s1"></script></body></html>''',
+    'a|web/test_2.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>1</polymer-element>
+        <script src="s1"></script>
+        </div>
+        <polymer-element>2</polymer-element>
+        <script src="s2"></script></body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!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': '''
+        <!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': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>2</polymer-element>
+        <polymer-element>1</polymer-element>
+        </div>
+        </body></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>
+        <script type="application/dart" src="s1.dart"></script>
+        </body></html>''',
+    'a|web/test_2.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>1</polymer-element>
+        </div>
+        <polymer-element>2
+        <script type="application/dart" src="s2.dart"></script>
+        </polymer-element>
+        </body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!DOCTYPE html><html><head>
+        <link rel="import" href="test_1.html">
+        </head><body>
+        <foo>42</foo><bar-baz></bar-baz>
+        <polymer-element>1'
+        <script src="s1.js"></script>
+        <script type="application/dart" src="s1.dart"></script>
+        </polymer-element>
+        'FOO'</body></html>''',
+    'a|web/s1.dart': '',
+  }, {
+    'a|web/test.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <foo>42</foo><bar-baz></bar-baz>
+        <polymer-element>1'
+        <script src="s1.js"></script>
+        </polymer-element>
+        'FOO'
+        </div>
+        </body></html>''',
+    'a|web/test_1.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <foo>42</foo><bar-baz></bar-baz>
+        <polymer-element>1'
+        <script src="s1.js"></script>
+        <script type="application/dart" src="s1.dart"></script>
+        </polymer-element>
+        'FOO'</body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!DOCTYPE html><html><head>
+        <link rel="import" href="test_2.html">
+        </head><body><polymer-element>1</polymer-element></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': '''
+        <!DOCTYPE html><html><head>
+        <link rel="import" href="test_1.html">
+        </head><body><polymer-element>3</polymer-element></html>''',
+  }, {
+    'a|web/test.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>3</polymer-element>
+        <polymer-element>2</polymer-element>
+        <polymer-element>1</polymer-element>
+        </div>
+        </body></html>''',
+    'a|web/test_1.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>3</polymer-element>
+        <polymer-element>2</polymer-element>
+        </div>
+        <polymer-element>1</polymer-element></body></html>''',
+    'a|web/test_2.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>1</polymer-element>
+        <polymer-element>3</polymer-element>
+        </div>
+        <polymer-element>2</polymer-element></body></html>''',
+    'a|web/test_3.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>2</polymer-element>
+        <polymer-element>1</polymer-element>
+        </div>
+        <polymer-element>3</polymer-element></body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!DOCTYPE html><html><head>
+        <link rel="import" href="test_1.html">
+        </head><body><polymer-element>1</polymer-element></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': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <polymer-element>1</polymer-element></body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!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': '''
+        <!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': '''
+        <!DOCTYPE html><html><head>
+        </head><body><polymer-element>3</polymer-element></body></html>''',
+  }, {
+    'a|web/test.html': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <div hidden="">
+        <polymer-element>3</polymer-element>
+        <polymer-element>1</polymer-element>
+        <polymer-element>2</polymer-element>
+        </div>
+        </body></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': '''
+        <!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': '''
+        <!DOCTYPE html><html><head>
+        </head><body>
+        <polymer-element>3</polymer-element></body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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({
+          'error': 'Could not find asset a|web/foo.html.'
+      }).snippet} '
+        '(web/test.html 1 8)',
+  ], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  testPhases('absolute uri', phases, {
+    'a|web/test.html': '''
+        <!DOCTYPE html><html><head>
+        <link rel="stylesheet" href="/foo.css">
+        </head></html>''',
+    'a|web/test2.html': '''
+        <!DOCTYPE html><html><head>
+        <link rel="stylesheet" href="http:example.com/bar.css">
+        </head></html>''',
+  }, {
+    'a|web/test.html': '''
+        <!DOCTYPE html><html><head>
+        <link rel="stylesheet" href="/foo.css">
+        </head></html>''',
+    'a|web/test2.html': '''
+        <!DOCTYPE html><html><head>
+        <link rel="stylesheet" href="http:example.com/bar.css">
+        </head></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
 }
+
+void urlAttributeTests() {
+  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': '''
+        <script src="baz.jpg"></script>''',
+    'a|web/foo/test_2.html': '''
+        <foo-element src="baz.jpg"></foo-element>''',
+  }, {
+    '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': '''
+        <script src="baz.jpg"></script>''',
+    'a|web/foo/test_2.html': '''
+        <foo-element src="baz.jpg"></foo-element>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <img src="[[bar]]">''',
+  }, {
+    'a|web/test.html': '''
+        <!DOCTYPE html><html><head></head><body>
+        <div hidden="">
+        <img src="[[bar]]">
+        </div>
+        </body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <img src="baz/{{bar}}">
+        <img src="./{{bar}}">''',
+  }, {
+    '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);
+
+  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': '''
+        <img _src="./{{bar}}">
+        <a _href="./{{bar}}">test</a>''',
+  }, {
+    '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);
+
+  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': '''
+        <img _src="{{bar}}">
+        <img _src="[[bar]]">''',
+  }, {
+    'a|web/test.html': '''
+        <!DOCTYPE html><html><head></head><body>
+        <div hidden="">
+          <img _src="{{bar}}">
+          <img _src="[[bar]]">
+        </div>
+        </body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <!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);
+
+  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': '''
+        <!DOCTYPE html><html><head></head><body>
+        <img src="{{bar[0]}}/{{baz[1]}}.{{extension}}">
+        </body></html>''',
+  }, null, StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <link rel="import" href="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': '''
+        <!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);
+}
+
+void entryPointTests() {
+  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': '''
+        <script rel="import" href="../../../packages/b/bar/bar.js">
+        </script>''',
+    'b|lib/bar/bar.js': '''
+        console.log("here");''',
+  }, {
+    '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);
+
+  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': '''
+        console.log("here");''',
+  }, {
+    'a|web/test/test.html': '''
+        <!DOCTYPE html><html><head>
+        <script src="../packages/a/foo/bar.js"></script>
+        </head><body>
+        </body></html>''',
+  }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+
+  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': '''
+        <script rel="import" href="../../../packages/b/bar/bar.js"></script>''',
+    'b|lib/bar/bar.js': '''
+        console.log("here");''',
+  }, {
+    '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);
+}
+
+// void templateTests() {
+//   testPhases('allows template inside table', phases, {
+//     'a|web/index.html': '''
+//         <!DOCTYPE html>
+//         <html>
+//           <head><link rel="import" href="packages/a/foo.html"></head>
+//           <body>
+//             <dom-module id="hello-element">
+//               <template>
+//                 <table>
+//                   <thead>
+//                     <tr><th>first</th><th>last</th></tr>
+//                   </thead>
+//                   <tbody>
+//                     <template is="dom-repeat" items="{{data}}">
+//                       <tr>
+//                         <td>{{item.first}}</td>
+//                         <td>{{item.last}}</td>
+//                       </tr>
+//                     </template>
+//                   </tbody>
+//                 </table>
+//               </template>
+//             </dom-module>
+//           </body>
+//         </html>''',
+//     'a|lib/foo.html': '''
+//         <div>hello!</div>
+//         ''',
+//   }, {
+//     'a|web/index.html': '''
+//         <!DOCTYPE html>
+//         <html>
+//           <head></head>
+//           <body>
+//             <div hidden="">
+//               <div>hello!</div>
+//             </div>
+//             <dom-module id="hello-element">
+//               <template>
+//                 <table>
+//                   <thead>
+//                     <tr><th>first</th><th>last</th></tr>
+//                   </thead>
+//                   <tbody>
+//                     <template is="dom-repeat" items="{{data}}">
+//                       <tr>
+//                         <td>{{item.first}}</td>
+//                         <td>{{item.last}}</td>
+//                       </tr>
+//                     </template>
+//                   </tbody>
+//                 </table>
+//               </template>
+//             </dom-module>
+//           </body>
+//         </html>''',
+//   }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
+// }
diff --git a/test/build/mirrors_remover_test.dart b/test/build/mirrors_remover_test.dart
index 0d3f2e4..b327133 100644
--- a/test/build/mirrors_remover_test.dart
+++ b/test/build/mirrors_remover_test.dart
@@ -1,16 +1,14 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+@TestOn('vm')
 library web_components.test.build.mirrors_remover_test;
 
 import 'package:code_transformers/tests.dart';
 import 'package:web_components/build/mirrors_remover.dart';
-import 'package:unittest/compact_vm_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 main() {
-  useCompactVMConfiguration();
-
   var transformer = new MirrorsRemoverTransformer();
   var phases = [[transformer]];
 
diff --git a/test/build/script_compactor_test.dart b/test/build/script_compactor_test.dart
index a72f3e6..a0c2ce3 100644
--- a/test/build/script_compactor_test.dart
+++ b/test/build/script_compactor_test.dart
@@ -1,20 +1,18 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+@TestOn('vm')
 library web_components.test.build.script_compactor_test;
 
 import 'package:code_transformers/tests.dart';
 import 'package:web_components/build/messages.dart';
 import 'package:web_components/build/script_compactor.dart';
-import 'package:unittest/compact_vm_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 var transformer = new ScriptCompactorTransformer();
 var phases = [[transformer]];
 
 main() {
-  useCompactVMConfiguration();
-
   group('basic', basicTests);
   group('code extraction tests', codeExtractorTests);
   group('fixes import/export/part URIs', dartUriTests);
diff --git a/test/build/test_compatibility_test.dart b/test/build/test_compatibility_test.dart
index 25272ac..19adfb8 100644
--- a/test/build/test_compatibility_test.dart
+++ b/test/build/test_compatibility_test.dart
@@ -1,19 +1,17 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+@TestOn('vm')
 library web_components.test.build.test_compatibility_test;
 
 import 'package:code_transformers/tests.dart';
 import 'package:web_components/build/test_compatibility.dart';
-import 'package:unittest/compact_vm_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 var start = new RewriteXDartTestToScript(null);
 var end = new RewriteScriptToXDartTest(null);
 
 main() {
-  useCompactVMConfiguration();
-
   testPhases('can rewrite x-dart-test link tags to script tags', [[start]], {
     'a|test/index.html': '''
         <!DOCTYPE html>
diff --git a/test/build/transformer_test.dart b/test/build/transformer_test.dart
index 446eced..df07267 100644
--- a/test/build/transformer_test.dart
+++ b/test/build/transformer_test.dart
@@ -1,11 +1,12 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+@TestOn('vm')
 library web_components.test.build.transformer_test;
 
 import 'package:code_transformers/tests.dart';
 import 'package:web_components/transformer.dart';
-import 'package:unittest/compact_vm_config.dart';
+import 'package:test/test.dart';
 import 'common.dart';
 
 var transformer = new WebComponentsTransformerGroup(
@@ -13,8 +14,6 @@
 var phases = [[transformer]];
 
 main() {
-  useCompactVMConfiguration();
-
   testPhases('full app', phases, {
     'a|web/index.html': '''
         <!DOCTYPE html>
diff --git a/test/custom_element_proxy_test.dart b/test/custom_element_proxy_test.dart
index a74942b..b20a213 100644
--- a/test/custom_element_proxy_test.dart
+++ b/test/custom_element_proxy_test.dart
@@ -1,13 +1,13 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+@TestOn('browser')
 library custom_element_proxy_test;
 
 import 'dart:async';
 import 'dart:html';
 import 'dart:js';
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:web_components/web_components.dart';
 
 @CustomElementProxy('basic-element')
@@ -32,7 +32,6 @@
 }
 
 main() {
-  useHtmlConfiguration();
   initWebComponents().then((_) {
     var container = querySelector('#container') as DivElement;
 
diff --git a/test/custom_element_proxy_test.html b/test/custom_element_proxy_test.html
index 87053ed..384fbfd 100644
--- a/test/custom_element_proxy_test.html
+++ b/test/custom_element_proxy_test.html
@@ -33,9 +33,7 @@
     });
   </script>
 
-  <script type="text/javascript"
-      src="/root_dart/tools/testing/dart/test_controller.js"></script>
-  <script type="application/dart" src="custom_element_proxy_test.dart"></script>
-  <script type="text/javascript" src="/packages/browser/dart.js"></script>
+  <link rel="x-dart-test" href="custom_element_proxy_test.dart">
+  <script src="packages/test/dart.js"></script>
 </body>
 </html>
diff --git a/test/custom_element_test.dart b/test/custom_element_test.dart
index 94a995a..734c0e5 100644
--- a/test/custom_element_test.dart
+++ b/test/custom_element_test.dart
@@ -1,12 +1,12 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+@TestOn('browser')
 library web_components.test.custom_element_test;
 
 import 'dart:async';
 import 'dart:html';
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:web_components/web_components.dart';
 
 @CustomElement('basic-element')
@@ -32,7 +32,6 @@
 }
 
 main() {
-  useHtmlConfiguration();
   initWebComponents().then((_) {
     var container = querySelector('#container') as DivElement;
 
diff --git a/test/custom_element_test.html b/test/custom_element_test.html
index 6041cd7..08220c2 100644
--- a/test/custom_element_test.html
+++ b/test/custom_element_test.html
@@ -22,9 +22,7 @@
   <div id="container">
   </div>
 
-  <script type="text/javascript"
-          src="packages/unittest/test_controller.js"></script>
-  <script type="application/dart" src="custom_element_test.dart"></script>
-  <script type="text/javascript" src="packages/browser/dart.js"></script>
+  <link rel="x-dart-test" href="custom_element_test.dart">
+  <script src="packages/test/dart.js"></script>
 </body>
 </html>
diff --git a/test/html_import_annotation_test.dart b/test/html_import_annotation_test.dart
index 6b81a58..d935e57 100644
--- a/test/html_import_annotation_test.dart
+++ b/test/html_import_annotation_test.dart
@@ -1,34 +1,27 @@
 // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+@TestOn('browser')
 @HtmlImport(importPath)
-// This one will throw a build time warning, but should still work dynamically.
-@HtmlImport('bad_import.html')
 library web_components.test.html_import_annotation;
 
 import 'dart:html';
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:web_components/web_components.dart';
 import 'foo/bar.dart';
 
 const String importPath = 'my_import.html';
 
-main() {
-  useHtmlConfiguration();
+main() async {
+  await initWebComponents();
 
   test('adds import to head', () {
-    return initWebComponents().then((_) {
-      var my_import = document.head.querySelector('link[href="$importPath"]');
-      expect(my_import, isNotNull);
-      expect(my_import.import.body.text, 'Hello world!\n');
+    var my_import = document.head.querySelector('link[href="$importPath"]');
+    expect(my_import, isNotNull);
+    expect(my_import.import.body.text, 'Hello world!\n');
 
-      var bar = document.head.querySelector('link[href="foo/bar.html"]');
-      expect(bar, isNotNull);
-      expect(bar.import.body.text, 'bar\n');
-
-      var bad = document.head.querySelector('link[href="bad_import.html"]');
-      expect(bad.import, isNull);
-    });
+    var bar = document.head.querySelector('link[href="foo/bar.html"]');
+    expect(bar, isNotNull);
+    expect(bar.import.body.text, 'bar\n');
   });
 }
diff --git a/test/html_import_annotation_test.html b/test/html_import_annotation_test.html
index a3455c5..8af5394 100644
--- a/test/html_import_annotation_test.html
+++ b/test/html_import_annotation_test.html
@@ -17,9 +17,7 @@
 <body>
   <h1> Running html_import_annotation test </h1>
 
-  <script type="text/javascript"
-      src="/root_dart/tools/testing/dart/test_controller.js"></script>
-  <script type="application/dart" src="html_import_annotation_test.dart"></script>
-  <script type="text/javascript" src="/packages/browser/dart.js"></script>
+  <link rel="x-dart-test" href="html_import_annotation_test.dart">
+  <script src="packages/test/dart.js"></script>
 </body>
 </html>
diff --git a/test/init_web_components_test.dart b/test/init_web_components_test.dart
index 9b66acf..cd418e2 100644
--- a/test/init_web_components_test.dart
+++ b/test/init_web_components_test.dart
@@ -2,10 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 @initializeTracker
+@TestOn('browser')
 library web_components.test.init_web_components_test;
 
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:initialize/initialize.dart' show LibraryIdentifier;
 import 'package:initialize/src/initialize_tracker.dart';
 import 'package:web_components/web_components.dart';
@@ -13,8 +13,6 @@
 const String importPath = 'my_import.html';
 
 main() {
-  useHtmlConfiguration();
-
   test('can initialize scripts from html imports', () {
     return initWebComponents().then((_) {
       var expectedInitializers = [
diff --git a/test/init_web_components_test.html b/test/init_web_components_test.html
index d418e6e..d8fd3dc 100644
--- a/test/init_web_components_test.html
+++ b/test/init_web_components_test.html
@@ -18,9 +18,7 @@
 <body>
   <h1> Running init_web_components test </h1>
 
-  <script type="text/javascript"
-      src="/root_dart/tools/testing/dart/test_controller.js"></script>
-  <script type="application/dart" src="init_web_components_test.dart"></script>
-  <script type="text/javascript" src="/packages/browser/dart.js"></script>
+  <link rel="x-dart-test" href="init_web_components_test.dart">
+  <script src="packages/test/dart.js"></script>
 </body>
 </html>
diff --git a/test/interop_test.dart b/test/interop_test.dart
index 20cce29..30bde10 100644
--- a/test/interop_test.dart
+++ b/test/interop_test.dart
@@ -1,19 +1,17 @@
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-
+@TestOn('browser')
 library template_wrappers_test;
 
 import 'dart:html';
 import 'dart:async';
 import 'dart:js' show context, JsObject;
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:web_components/interop.dart';
 import 'package:web_components/polyfill.dart';
 
 main() {
-  useHtmlConfiguration();
   setUp(() => customElementsReady);
 
   test('interop is supported', () {
@@ -67,7 +65,7 @@
     expect(c is HtmlElement, isTrue, reason: 'x-c is HtmlElement');
     expect(c is XCWrapper, isFalse, reason: 'x-c should not be upgraded yet');
     expect(_readX(c), null, reason: 'x-c has not been registered in JS yet');
-  });
+  }, skip: 'https://github.com/dart-lang/web-components/issues/38');
 
   test('anything created after registering Dart type is upgraded', () {
     context.callMethod('addA');
@@ -97,7 +95,7 @@
     expect(d is XDWrapper, isTrue, reason: 'x-d is upgraded to XDWrapper');
     expect(d.x, 5);
     expect(d.wrapperCount, 4);
-  });
+  }, skip: 'https://github.com/dart-lang/web-components/issues/38');
 
   test('events seen if Dart type is registered before registerElement', () {
     var c = document.querySelector('x-c');
@@ -119,7 +117,7 @@
     expect(c is XCWrapper, isTrue, reason: 'x-c is upgraded to XCWrapper');
     expect(c.x, 7);
     expect(c.wrapperCount, 6);
-  });
+  }, skip: 'https://github.com/dart-lang/web-components/issues/38');
 
   test('element can extend another element', () {
     registerDartType('x-e', XEWrapper);
@@ -129,7 +127,7 @@
     expect(e is XEWrapper, isTrue);
     expect(e.x, 8);
     expect(e.y, 9);
-  });
+  }, skip: 'https://github.com/dart-lang/web-components/issues/38');
 }
 int _count = 0;
 
diff --git a/test/interop_test.html b/test/interop_test.html
index 9b3e5fa..019beab 100644
--- a/test/interop_test.html
+++ b/test/interop_test.html
@@ -10,9 +10,9 @@
      .unittest-fail { background: #d55;}
      .unittest-error { background: #a11;}
   </style>
-  <script src="/packages/web_components/webcomponents.js"></script>
-  <script src="/packages/web_components/dart_support.js"></script>
-  <script src="/packages/web_components/interop_support.js"></script>
+  <script src="packages/web_components/webcomponents-lite.js"></script>
+  <script src="packages/web_components/interop_support.js"></script>
+  <script src="packages/web_components/dart_support.js"></script>
 </head>
 <body>
   <h1> Running interop_test </h1>
@@ -76,9 +76,8 @@
   <div is="x-b" id="i2"></div>
   <x-c id="i3"></x-c>
   <x-d id="i4"></x-d>
-  <script type="text/javascript"
-      src="/root_dart/tools/testing/dart/test_controller.js"></script>
-  <script type="application/dart" src="interop_test.dart"></script>
-  <script type="text/javascript" src="/packages/browser/dart.js"></script>
-</body>
+  <link rel="x-dart-test" href="interop_test.dart">
+  <script src="packages/test/dart.js"></script>
+  <!-- <script type="application/dart" src="interop_test.dart"></script>
+  <script src="packages/browser/dart.js"></script> -->
 </html>
diff --git a/test/location_wrapper_test.dart b/test/location_wrapper_test.dart
index a1c531a..6120d03 100644
--- a/test/location_wrapper_test.dart
+++ b/test/location_wrapper_test.dart
@@ -2,15 +2,13 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+@TestOn('browser')
 library template_wrappers_test;
 
 import 'dart:html';
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 main() {
-  useHtmlConfiguration();
-
   test('OK to access location with platform.js', () {
     expect(window.location.toString(), window.location.href);
   });
diff --git a/test/location_wrapper_test.html b/test/location_wrapper_test.html
index 21d59fd..ee18f17 100644
--- a/test/location_wrapper_test.html
+++ b/test/location_wrapper_test.html
@@ -15,9 +15,7 @@
 </head>
 <body>
   <h1> Running template_wrappers_test </h1>
-  <script type="text/javascript"
-      src="/root_dart/tools/testing/dart/test_controller.js"></script>
-  <script type="application/dart" src="location_wrapper_test.dart"></script>
-  <script type="text/javascript" src="/packages/browser/dart.js"></script>
+  <link rel="x-dart-test" href="location_wrapper_test.dart">
+  <script src="packages/test/dart.js"></script>
 </body>
 </html>
