Merge pull request #42 from dart-lang/0.6.2

update to analyzer 0.27.0 and the test package
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b1dbc70..da0a5c4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.6.2
+
+* Update analyzer to `>=0.27.0 <0.28.0`.
+
 ## 0.6.1+2
 
 * Update analyzer to `<0.27.0` and dart_style to `<0.3.0`.
diff --git a/lib/build/initializer_plugin.dart b/lib/build/initializer_plugin.dart
index 8822dc4..efca427 100644
--- a/lib/build/initializer_plugin.dart
+++ b/lib/build/initializer_plugin.dart
@@ -4,6 +4,7 @@
 library initialize.build.initializer_plugin;
 
 import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/constant.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:barback/barback.dart';
 import 'package:code_transformers/resolver.dart';
@@ -58,10 +59,8 @@
   /// [ElementAnnotation] that was found.
   String buildMeta(InitializerPluginData pluginData) {
     var logger = pluginData.logger;
-    var element = pluginData.initializer.targetElement;
     var elementAnnotation = pluginData.initializer.annotationElement;
     var elementAnnotationElement = elementAnnotation.element;
-    var libraryPrefixes = pluginData.libraryPrefixes;
     if (elementAnnotationElement is ConstructorElement) {
       return buildConstructorMeta(elementAnnotation, pluginData);
     } else if (elementAnnotationElement is PropertyAccessorElement) {
@@ -264,7 +263,8 @@
     return buffer.toString();
   }
 
-  _evaluateExpression(Expression expression, InitializerPluginData pluginData) {
+  _evaluateExpression(
+      Expression expression, InitializerPluginData pluginData) {
     var logger = pluginData.logger;
     var result = pluginData.resolver.evaluateConstant(
         pluginData.initializer.targetElement.library, expression);
@@ -273,15 +273,17 @@
           'And got the following errors: ${result.errors}.');
       return null;
     }
-    var value = result.value.value;
+
+    var value = _getValue(result.value);
+
     if (value == null) {
       logger.error('Unsupported expression in initializer, found '
           '$expression. Please file a bug at '
           'https://github.com/dart-lang/initialize/issues');
-      return null;
     }
 
     if (value is String) value = _stringValue(value);
+
     return value;
   }
 
@@ -291,4 +293,31 @@
     value = value.replaceAll(r'\', r'\\').replaceAll(r"'", r"\'");
     return "'$value'";
   }
+
+  // Gets an actual value for a [DartObject].
+  _getValue(DartObject object) {
+    if (object == null) return null;
+    var value = object.toBoolValue() ??
+        object.toDoubleValue() ??
+        object.toIntValue() ??
+        object.toStringValue();
+    if (value == null) {
+      value = object.toListValue();
+      if (value != null) {
+        return value.map((DartObject element) => _getValue(element)).toList();
+      }
+      Map<DartObject, DartObject> map = object.toMapValue();
+      if (map != null) {
+        Map result = {};
+        map.forEach((DartObject key, DartObject value) {
+          dynamic mappedKey = _getValue(key);
+          if (mappedKey != null) {
+            result[mappedKey] = _getValue(value);
+          }
+        });
+        return result;
+      }
+    }
+    return value;
+  }
 }
diff --git a/lib/transformer.dart b/lib/transformer.dart
index a1f01fa..4a3833a 100644
--- a/lib/transformer.dart
+++ b/lib/transformer.dart
@@ -237,7 +237,7 @@
     if (element.metadata.isEmpty) return found;
 
     var metaNodes;
-    var node = element.node;
+    var node = element.computeNode();
     if (node is SimpleIdentifier && node.parent is LibraryIdentifier) {
       metaNodes = node.parent.parent.metadata;
     } else if (node is ClassDeclaration || node is FunctionDeclaration) {
diff --git a/pubspec.yaml b/pubspec.yaml
index b9ade8b..fff4c58 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,12 +1,12 @@
 name: initialize
-version: 0.6.1+2
+version: 0.6.2
 author: Polymer.dart Authors <web@dartlang.org>
 description: Generic building blocks for doing static initialization.
 homepage: https://github.com/dart-lang/initialize
 dependencies:
-  analyzer: '>=0.15.6 <0.27.0'
+  analyzer: '>=0.27.0 <0.28.0'
   barback: '>=0.14.2 <0.16.0'
-  code_transformers: '>=0.2.7 <0.3.0'
+  code_transformers: '>=0.3.0 <0.4.0'
   dart_style: '>=0.1.3 <0.3.0'
   glob: ">=1.0.4 <2.0.0"
   html: '>=0.12.0 <0.13.0'
@@ -14,7 +14,7 @@
 dev_dependencies:
   test_package:
     path: test_package
-  unittest: '>=0.10.0 <0.12.0'
+  test: '>=0.12.0 <0.13.0'
 environment:
   sdk: ">=1.9.0-dev.7.1 <2.0.0"
 transformers:
@@ -32,5 +32,7 @@
       - test/initializer_custom_filter_test.dart
       - test/initializer_type_filter_test.dart
       - test/init_method_test.dart
+- test/pub_serve:
+    $include: test/**_test{.*,}.dart
 - $dart2js:
     $exclude: '**/*.dart'
diff --git a/test/common.dart b/test/common.dart
index f121be5..d730bc9 100644
--- a/test/common.dart
+++ b/test/common.dart
@@ -5,7 +5,7 @@
 
 import 'package:barback/barback.dart';
 import 'package:code_transformers/src/test_harness.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 testPhases(String testName, List<List<Transformer>> phases,
     Map<String, String> inputFiles, Map<String, String> expectedFiles,
diff --git a/test/deferred_library_test.dart b/test/deferred_library_test.dart
index 2b480ae..b25fe0d 100644
--- a/test/deferred_library_test.dart
+++ b/test/deferred_library_test.dart
@@ -7,12 +7,9 @@
 import 'foo.dart' deferred as foo;
 import 'package:initialize/src/initialize_tracker.dart';
 import 'package:initialize/initialize.dart';
-import 'package:unittest/unittest.dart';
-import 'package:unittest/compact_vm_config.dart';
+import 'package:test/test.dart';
 
 main() {
-  useCompactVMConfiguration();
-
   test('annotations can be loaded lazily', () {
     // Initialize everything not in deferred imports.
     return run().then((_) {
diff --git a/test/init_method_test.dart b/test/init_method_test.dart
index 55fa282..ff88925 100644
--- a/test/init_method_test.dart
+++ b/test/init_method_test.dart
@@ -4,15 +4,12 @@
 library initialize.init_method_test;
 
 import 'package:initialize/initialize.dart';
-import 'package:unittest/unittest.dart';
-import 'package:unittest/compact_vm_config.dart';
+import 'package:test/test.dart';
 
 int calledFoo = 0;
 int calledBar = 0;
 
 main() {
-  useCompactVMConfiguration();
-
   // Run all initializers.
   run().then((_) {
     test('initMethod annotation invokes functions once', () {
diff --git a/test/initializer_custom_filter_test.dart b/test/initializer_custom_filter_test.dart
index f8f789d..5280069 100644
--- a/test/initializer_custom_filter_test.dart
+++ b/test/initializer_custom_filter_test.dart
@@ -5,13 +5,10 @@
 
 import 'dart:async';
 import 'package:initialize/initialize.dart';
-import 'package:unittest/unittest.dart';
-import 'package:unittest/compact_vm_config.dart';
+import 'package:test/test.dart';
 import 'package:initialize/src/initialize_tracker.dart';
 
 main() {
-  useCompactVMConfiguration();
-
   test('filter option limits which types of annotations will be ran', () {
     var originalSize;
     return runPhase(1).then((_) {
diff --git a/test/initializer_cycle_error_test.dart b/test/initializer_cycle_error_test.dart
index bc5c8a3..4d9ea59 100644
--- a/test/initializer_cycle_error_test.dart
+++ b/test/initializer_cycle_error_test.dart
@@ -5,12 +5,9 @@
 
 import 'cycle_a.dart'; // Causes a cycle.
 import 'package:initialize/initialize.dart';
-import 'package:unittest/unittest.dart';
-import 'package:unittest/compact_vm_config.dart';
+import 'package:test/test.dart';
 
 main() {
-  useCompactVMConfiguration();
-
   test('super class cycles are not supported', () {
     expect(run, throwsUnsupportedError);
   });
diff --git a/test/initializer_from_test.dart b/test/initializer_from_test.dart
index 30587f5..3b2362d 100644
--- a/test/initializer_from_test.dart
+++ b/test/initializer_from_test.dart
@@ -6,26 +6,29 @@
 
 import 'package:initialize/src/initialize_tracker.dart';
 import 'package:initialize/initialize.dart';
-import 'package:unittest/unittest.dart';
-import 'package:unittest/compact_vm_config.dart';
-import 'package:test_package/bar.dart'; // Used for annotations
+import 'package:test/test.dart';
+import 'package:test_package/bar.dart' as bar;
 
+/// Uses [bar]
 main() {
-  useCompactVMConfiguration();
+  test('The `from` option', () async {
+    final expectedNames = <LibraryIdentifier>[];
 
-  test('The `from` option', () {
-    var expectedNames = [];
-    return run(from: Uri.parse('package:test_package/bar.dart')).then((_) {
-      // First just run on the test packages bar.dart file.
-      expectedNames.add(const LibraryIdentifier(
-          #test_package.bar, 'test_package', 'bar.dart'));
-      expect(InitializeTracker.seen, expectedNames);
-    }).then((_) => run()).then((_) {
-      // Now we run on the rest (just this file).
-      expectedNames.add(const LibraryIdentifier(
-          #initialize.test.initializer_from_test, null,
-          'initializer_from_test.dart'));
-      expect(InitializeTracker.seen, expectedNames);
-    });
+    // First just run on the test packages bar.dart file.
+    await run(from: Uri.parse('package:test_package/bar.dart'));
+    expectedNames.add(
+        const LibraryIdentifier(#test_package.bar, 'test_package', 'bar.dart'));
+    expect(InitializeTracker.seen, expectedNames);
+
+    // Now we run on the rest (just this file).
+    await run();
+    expect(InitializeTracker.seen.length, 2);
+    // Don't know what the path will be, so have to explicitly check fields
+    // and use an [endsWith] matcher for the path.
+    expect(InitializeTracker.seen[1].name,
+        #initialize.test.initializer_from_test);
+    expect(InitializeTracker.seen[1].package, isNull);
+    expect(
+        InitializeTracker.seen[1].path, endsWith('initializer_from_test.dart'));
   });
 }
diff --git a/test/initializer_parts_test.dart b/test/initializer_parts_test.dart
index fc77886..c296478 100644
--- a/test/initializer_parts_test.dart
+++ b/test/initializer_parts_test.dart
@@ -6,15 +6,12 @@
 
 import 'package:initialize/src/initialize_tracker.dart';
 import 'package:initialize/initialize.dart';
-import 'package:unittest/unittest.dart';
-import 'package:unittest/compact_vm_config.dart';
+import 'package:test/test.dart';
 
 part 'parts/foo.dart';
 part 'parts/bar.dart';
 
 main() {
-  useCompactVMConfiguration();
-
   // Run all initializers.
   run().then((_) {
     test('parts', () {
diff --git a/test/initializer_super_test.dart b/test/initializer_super_test.dart
index 66e6e76..bb84100 100644
--- a/test/initializer_super_test.dart
+++ b/test/initializer_super_test.dart
@@ -5,12 +5,9 @@
 
 import 'package:initialize/src/initialize_tracker.dart';
 import 'package:initialize/initialize.dart';
-import 'package:unittest/unittest.dart';
-import 'package:unittest/compact_vm_config.dart';
+import 'package:test/test.dart';
 
 main() {
-  useCompactVMConfiguration();
-
   // Run all initializers.
   run().then((_) {
     test('annotations are seen in post-order with superclasses first', () {
diff --git a/test/initializer_test.dart b/test/initializer_test.dart
index 1488b1d..927c3bb 100644
--- a/test/initializer_test.dart
+++ b/test/initializer_test.dart
@@ -8,12 +8,9 @@
 import 'package:initialize/src/initialize_tracker.dart';
 import 'package:initialize/initialize.dart';
 import 'package:test_package/foo.dart';
-import 'package:unittest/unittest.dart';
-import 'package:unittest/compact_vm_config.dart';
+import 'package:test/test.dart';
 
 main() {
-  useCompactVMConfiguration();
-
   // Run all initializers.
   run().then((_) {
     test('annotations are seen in post-order with superclasses first', () {
diff --git a/test/initializer_type_filter_test.dart b/test/initializer_type_filter_test.dart
index b5ebb92..baa0a6d 100644
--- a/test/initializer_type_filter_test.dart
+++ b/test/initializer_type_filter_test.dart
@@ -4,16 +4,13 @@
 library initialize.initializer_type_filter_test;
 
 import 'package:initialize/initialize.dart';
-import 'package:unittest/unittest.dart';
-import 'package:unittest/compact_vm_config.dart';
+import 'package:test/test.dart';
 
 // Initializers will mess with this value, and it gets reset to 0 at the
 // start of every test.
 var total;
 
 main() {
-  useCompactVMConfiguration();
-
   setUp(() {
     total = 0;
   });
diff --git a/test/transformer_test.dart b/test/transformer_test.dart
index 3b637c7..da80f4a 100644
--- a/test/transformer_test.dart
+++ b/test/transformer_test.dart
@@ -7,14 +7,11 @@
 import 'package:analyzer/src/generated/element.dart';
 import 'package:dart_style/dart_style.dart';
 import 'package:initialize/transformer.dart';
-import 'package:unittest/compact_vm_config.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 var formatter = new DartFormatter();
 
 main() {
-  useCompactVMConfiguration();
-
   group('Html entry points', htmlEntryPointTests);
   group('Dart entry points', dartEntryPointTests);
   group('InitializerPlugins', pluginTests);