| Index: packages/observable/test/observable_list_test.dart
 | 
| diff --git a/packages/observe/test/observable_list_test.dart b/packages/observable/test/observable_list_test.dart
 | 
| similarity index 78%
 | 
| rename from packages/observe/test/observable_list_test.dart
 | 
| rename to packages/observable/test/observable_list_test.dart
 | 
| index adc6e402ebb5e9b29609f4ee713e5211aed9e9f6..0a29fa3f5776e651b4fefa478f735ca2b4c801cc 100644
 | 
| --- a/packages/observe/test/observable_list_test.dart
 | 
| +++ b/packages/observable/test/observable_list_test.dart
 | 
| @@ -1,13 +1,15 @@
 | 
| -// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 | 
| +// Copyright (c) 2016, 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.
 | 
|  
 | 
|  import 'dart:async';
 | 
| -import 'package:observe/observe.dart';
 | 
| -import 'package:unittest/unittest.dart';
 | 
| -import 'observe_test_utils.dart';
 | 
|  
 | 
| -main() => dirtyCheckZone().run(_runTests);
 | 
| +import 'package:observable/observable.dart';
 | 
| +import 'package:test/test.dart';
 | 
| +
 | 
| +import 'observable_test_utils.dart';
 | 
| +
 | 
| +main() => _runTests();
 | 
|  
 | 
|  _runTests() {
 | 
|    // TODO(jmesserly): need all standard List API tests.
 | 
| @@ -24,12 +26,11 @@ _runTests() {
 | 
|    }
 | 
|  
 | 
|    group('observe length', () {
 | 
| -
 | 
|      ObservableList list;
 | 
|      List<ChangeRecord> changes;
 | 
|  
 | 
|      setUp(() {
 | 
| -      list = toObservable([1, 2, 3]);
 | 
| +      list = toObservable([1, 2, 3]) as ObservableList;
 | 
|        changes = null;
 | 
|        sub = list.changes.listen((records) {
 | 
|          changes = getPropertyChangeRecords(records, #length);
 | 
| @@ -46,7 +47,7 @@ _runTests() {
 | 
|        });
 | 
|      });
 | 
|  
 | 
| -    test('removeObject', () {
 | 
| +    test('removeObject changes length', () {
 | 
|        list.remove(2);
 | 
|        expect(list, orderedEquals([1, 3]));
 | 
|  
 | 
| @@ -93,9 +94,9 @@ _runTests() {
 | 
|      List<ListChangeRecord> changes;
 | 
|  
 | 
|      setUp(() {
 | 
| -      list = toObservable([1, 2, 3]);
 | 
| +      list = toObservable([1, 2, 3]) as ObservableList;
 | 
|        changes = null;
 | 
| -      sub = list.listChanges.listen((records) {
 | 
| +      sub = list.listChanges.listen((List<ListChangeRecord> records) {
 | 
|          changes = getListChangeRecords(records, 1);
 | 
|        });
 | 
|      });
 | 
| @@ -114,7 +115,9 @@ _runTests() {
 | 
|        list[1] = 777;
 | 
|        expect(list, [1, 777, 3]);
 | 
|        return new Future(() {
 | 
| -        expectChanges(changes, [_change(1, addedCount: 1, removed: [2])]);
 | 
| +        expectChanges(changes, [
 | 
| +          _change(1, addedCount: 1, removed: [2])
 | 
| +        ]);
 | 
|        });
 | 
|      });
 | 
|  
 | 
| @@ -149,7 +152,9 @@ _runTests() {
 | 
|        list.length = 1;
 | 
|        expect(list, [1]);
 | 
|        return new Future(() {
 | 
| -        expectChanges(changes, [_change(1, removed: [2, 3])]);
 | 
| +        expectChanges(changes, [
 | 
| +          _change(1, removed: [2, 3])
 | 
| +        ]);
 | 
|        });
 | 
|      });
 | 
|  
 | 
| @@ -180,16 +185,15 @@ _runTests() {
 | 
|    });
 | 
|  
 | 
|    group('change records', () {
 | 
| -
 | 
|      List<ChangeRecord> propRecords;
 | 
|      List<ListChangeRecord> listRecords;
 | 
|  
 | 
|      setUp(() {
 | 
| -      list = toObservable([1, 2, 3, 1, 3, 4]);
 | 
| +      list = toObservable([1, 2, 3, 1, 3, 4]) as ObservableList;
 | 
|        propRecords = null;
 | 
|        listRecords = null;
 | 
| -      sub = list.changes.listen((r) { propRecords = r; });
 | 
| -      sub2 = list.listChanges.listen((r) { listRecords = r; });
 | 
| +      sub = list.changes.listen((r) => propRecords = r);
 | 
| +      sub2 = list.listChanges.listen((r) => listRecords = r);
 | 
|      });
 | 
|  
 | 
|      tearDown(sharedTearDown);
 | 
| @@ -203,7 +207,7 @@ _runTests() {
 | 
|        expect(list.lastIndexOf(1), 3);
 | 
|        expect(list.last, 4);
 | 
|        var copy = new List<int>();
 | 
| -      list.forEach((i) { copy.add(i); });
 | 
| +      list.forEach((int i) => copy.add(i));
 | 
|        expect(copy, orderedEquals([1, 2, 3, 1, 3, 4]));
 | 
|        return new Future(() {
 | 
|          // no change from read-only operators
 | 
| @@ -222,7 +226,7 @@ _runTests() {
 | 
|            _lengthChange(6, 7),
 | 
|            _lengthChange(7, 8),
 | 
|          ]);
 | 
| -        expectChanges(listRecords, [ _change(6, addedCount: 2) ]);
 | 
| +        expectChanges(listRecords, [_change(6, addedCount: 2)]);
 | 
|        });
 | 
|      });
 | 
|  
 | 
| @@ -232,7 +236,9 @@ _runTests() {
 | 
|  
 | 
|        return new Future(() {
 | 
|          expectChanges(propRecords, null);
 | 
| -        expectChanges(listRecords, [ _change(1, addedCount: 1, removed: [2]) ]);
 | 
| +        expectChanges(listRecords, [
 | 
| +          _change(1, addedCount: 1, removed: [2])
 | 
| +        ]);
 | 
|        });
 | 
|      });
 | 
|  
 | 
| @@ -242,7 +248,9 @@ _runTests() {
 | 
|  
 | 
|        return new Future(() {
 | 
|          expectChanges(propRecords, [_lengthChange(6, 5)]);
 | 
| -        expectChanges(listRecords, [_change(5, removed: [4])]);
 | 
| +        expectChanges(listRecords, [
 | 
| +          _change(5, removed: [4])
 | 
| +        ]);
 | 
|        });
 | 
|      });
 | 
|  
 | 
| @@ -252,7 +260,9 @@ _runTests() {
 | 
|  
 | 
|        return new Future(() {
 | 
|          expectChanges(propRecords, [_lengthChange(6, 3)]);
 | 
| -        expectChanges(listRecords, [_change(1, removed: [2, 3, 1])]);
 | 
| +        expectChanges(listRecords, [
 | 
| +          _change(1, removed: [2, 3, 1])
 | 
| +        ]);
 | 
|        });
 | 
|      });
 | 
|  
 | 
| @@ -273,7 +283,8 @@ _runTests() {
 | 
|        var list = toObservable([3, 1]);
 | 
|        // Dummy listener to record changes.
 | 
|        // TODO(jmesserly): should we just record changes always, to support the sync api?
 | 
| -      sub = list.listChanges.listen((records) => null);
 | 
| +      sub = list.listChanges.listen((List<ListChangeRecord> records) => null)
 | 
| +          as StreamSubscription;
 | 
|        list.sort();
 | 
|        expect(list.deliverListChanges(), true);
 | 
|        list.sort();
 | 
| @@ -281,18 +292,20 @@ _runTests() {
 | 
|        list.sort();
 | 
|        expect(list.deliverListChanges(), false);
 | 
|      });
 | 
| -    
 | 
| +
 | 
|      test('clear', () {
 | 
|        list.clear();
 | 
|        expect(list, []);
 | 
|  
 | 
|        return new Future(() {
 | 
|          expectChanges(propRecords, [
 | 
| -            _lengthChange(6, 0),
 | 
| -            new PropertyChangeRecord(list, #isEmpty, false, true),
 | 
| -            new PropertyChangeRecord(list, #isNotEmpty, true, false),
 | 
| +          _lengthChange(6, 0),
 | 
| +          new PropertyChangeRecord(list, #isEmpty, false, true),
 | 
| +          new PropertyChangeRecord(list, #isNotEmpty, true, false),
 | 
| +        ]);
 | 
| +        expectChanges(listRecords, [
 | 
| +          _change(0, removed: [1, 2, 3, 1, 3, 4])
 | 
|          ]);
 | 
| -        expectChanges(listRecords, [_change(0, removed: [1, 2, 3, 1, 3, 4])]);
 | 
|        });
 | 
|      });
 | 
|    });
 | 
| @@ -300,9 +313,8 @@ _runTests() {
 | 
|  
 | 
|  ObservableList list;
 | 
|  
 | 
| -_lengthChange(int oldValue, int newValue) =>
 | 
| +PropertyChangeRecord _lengthChange(int oldValue, int newValue) =>
 | 
|      new PropertyChangeRecord(list, #length, oldValue, newValue);
 | 
|  
 | 
| -_change(index, {removed: const [], addedCount: 0}) => new ListChangeRecord(
 | 
| -    list, index, removed: removed, addedCount: addedCount);
 | 
| -
 | 
| +_change(int index, {List removed: const [], int addedCount: 0}) =>
 | 
| +    new ListChangeRecord(list, index, removed: removed, addedCount: addedCount);
 | 
| 
 |