update analyzer and fix some tests
diff --git a/.gitignore b/.gitignore
index 6e8cd5c..18fee07 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
 .pub
 /build/
 packages
+.packages
 
 # Or the files created by dart2js.
 *.dart.js
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5e2672e..068e580 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+#### 0.12.0+3
+  * Update analyzer dependency to `<0.27.0` and fix up some tests.
+
 #### 0.12.0+2
   * Don't create new resolvers each time the transformer runs on a file.
 
diff --git a/pubspec.yaml b/pubspec.yaml
index 07fbdaa..2c9e114 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: web_components
-version: 0.12.0+2
+version: 0.12.0+3
 author: Polymer.dart Authors <web-ui-dev@dartlang.org>
 homepage: https://github.com/dart-lang/web-components/
 description: >
@@ -10,7 +10,7 @@
   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.26.0'
+  analyzer: '>=0.22.4 <0.27.0'
   barback: '>=0.14.2 <0.16.0'
   code_transformers: '^0.2.7'
   html: '^0.12.0'
diff --git a/test/custom_element_proxy_test.dart b/test/custom_element_proxy_test.dart
index 5fa11e0..a74942b 100644
--- a/test/custom_element_proxy_test.dart
+++ b/test/custom_element_proxy_test.dart
@@ -42,7 +42,8 @@
 
     test('basic custom element', () {
       container.append(new BasicElement());
-      container.appendHtml('<basic-element></basic_element>');
+      container.appendHtml('<basic-element></basic_element>',
+          treeSanitizer: nullSanitizer);
       // TODO(jakemac): after appendHtml elements are upgraded asynchronously,
       // why? https://github.com/dart-lang/web-components/issues/4
       return new Future(() {}).then((_) {
@@ -58,7 +59,8 @@
 
     test('extends custom element', () {
       container.append(new ExtendedElement());
-      container.appendHtml('<input is="extended-element" />');
+      container.appendHtml('<input is="extended-element" />',
+          treeSanitizer: nullSanitizer);
       // TODO(jakemac): after appendHtml elements are upgraded asynchronously,
       // why? https://github.com/dart-lang/web-components/issues/4
       return new Future(() {}).then((_) {
@@ -71,3 +73,10 @@
     });
   });
 }
+
+class NullTreeSanitizer implements NodeTreeSanitizer {
+  const NullTreeSanitizer();
+  void sanitizeTree(Node node) {}
+}
+
+final nullSanitizer = const NullTreeSanitizer();
diff --git a/test/custom_element_test.dart b/test/custom_element_test.dart
index 641c8c9..94a995a 100644
--- a/test/custom_element_test.dart
+++ b/test/custom_element_test.dart
@@ -47,9 +47,9 @@
     test('basic custom element', () {
       expect(document.querySelector('basic-element') is BasicElement, isTrue);
       container.append(new BasicElement());
-      container.appendHtml('<basic-element></basic-element>');
-      // TODO(jakemac): after appendHtml elements are upgraded asynchronously,
-      // why? https://github.com/dart-lang/web-components/issues/4
+      container.appendHtml('<basic-element></basic-element>',
+          treeSanitizer: nullSanitizer);
+      // elements are upgraded asynchronously
       return new Future(() {}).then((_) {
         var elements = container.querySelectorAll('basic-element');
         expect(elements.length, 2);
@@ -62,9 +62,9 @@
     test('child custom element', () {
       expect(document.querySelector('child-element') is ChildElement, isTrue);
       container.append(new ChildElement());
-      container.appendHtml('<child-element></child-element>');
-      // TODO(jakemac): after appendHtml elements are upgraded asynchronously,
-      // why? https://github.com/dart-lang/web-components/issues/4
+      container.appendHtml('<child-element></child-element>',
+          treeSanitizer: nullSanitizer);
+      // elements are upgraded asynchronously
       return new Future(() {}).then((_) {
         var elements = container.querySelectorAll('child-element');
         expect(elements.length, 2);
@@ -77,9 +77,9 @@
     test('extends input element', () {
       expect(document.querySelector('input') is ExtendedElement, isTrue);
       container.append(new ExtendedElement());
-      container.appendHtml('<input is="extended-element" />');
-      // TODO(jakemac): after appendHtml elements are upgraded asynchronously,
-      // why? https://github.com/dart-lang/web-components/issues/4
+      container.appendHtml('<input is="extended-element" />',
+          treeSanitizer: nullSanitizer);
+      // elements are upgraded asynchronously
       return new Future(() {}).then((_) {
         var elements = container.querySelectorAll('input');
         expect(elements.length, 2);
@@ -90,3 +90,10 @@
     });
   });
 }
+
+class NullTreeSanitizer implements NodeTreeSanitizer {
+  const NullTreeSanitizer();
+  void sanitizeTree(Node node) {}
+}
+
+final nullSanitizer = const NullTreeSanitizer();
diff --git a/test/custom_element_test.html b/test/custom_element_test.html
index a93c32a..6041cd7 100644
--- a/test/custom_element_test.html
+++ b/test/custom_element_test.html
@@ -23,7 +23,7 @@
   </div>
 
   <script type="text/javascript"
-      src="/root_dart/tools/testing/dart/test_controller.js"></script>
+          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>
 </body>