Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(959)

Unified Diff: samples/tests/samples/src/lib/observable/ObservableListTests.dart

Issue 9382027: Move client/{base, observable, layout, touch, util, view} to samples/ui_lib . (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: samples/tests/samples/src/lib/observable/ObservableListTests.dart
===================================================================
--- samples/tests/samples/src/lib/observable/ObservableListTests.dart (revision 0)
+++ samples/tests/samples/src/lib/observable/ObservableListTests.dart (revision 0)
@@ -0,0 +1,118 @@
+// Copyright (c) 2011, 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.
+
+testObservableList() {
+ test('ObservableList', () {
+ final arr = new ObservableList<int>();
+
+ // Add some initial data before listening
+ arr.add(1);
+ arr.add(2);
+ arr.add(3);
+ arr.add(1);
+ arr.add(3);
+ arr.add(4);
+
+ expect(arr).equalsCollection([1, 2, 3, 1, 3, 4]);
+
+ // Add a listener that saves the events
+ EventSummary res = null;
+ arr.addChangeListener((summary) {
+ expect(res).isNull();
+ res = summary;
+ expect(res).isNotNull();
+ });
+
+ // execute some code with readonly operations only
+ expect(res).isNull();
+ bool called = false;
+ EventBatch.wrap((e) {
+ expect(arr.length).equals(6);
+ expect(arr[0]).equals(1);
+ // TODO(sigmund): why we need write startIndex? it should be optional.
+ expect(arr.indexOf(4, 0)).equals(5);
+ expect(arr.indexOf(1, 0)).equals(0);
+ expect(arr.indexOf(1, 1)).equals(3);
+ // TODO(rnystrom): Get rid of second arg when lastIndexOf has default.
+ expect(arr.lastIndexOf(1, arr.length - 1)).equals(3);
+ expect(arr.last()).equals(4);
+ final copy = new List<int>();
+ arr.forEach(f(i) {
+ copy.add(i);
+ });
+ expect(copy).equalsCollection([1, 2, 3, 1, 3, 4]);
+ called = true;
+ })(null);
+ expect(called).isTrue();
+ expect(res).isNull(); // no change from read-only operators
+
+ // execute some code with mutations
+ expect(res).isNull();
+ called = false;
+ expect(arr).equalsCollection([1, 2, 3, 1, 3, 4]);
+ EventBatch.wrap((e) {
+ arr.add(5); // 1 2 3 1 3 4(5)
+ arr.add(6); // 1 2 3 1 3 4 5(6)
+ arr[1] = arr[arr.length - 1]; // 1(6)3 1 3 4 5 6
+ arr.add(7); // 1 6 3 1 3 4 5 6(7)
+ arr[5] = arr[8]; // 1 6 3 1 3(7)5 6 7
+ arr.add(42); // 1 6 3 1 3 7 5 6 7(42)
+ expect(arr.removeAt(3)).equals(1); // 1 6 3( )3 7 5 6 7 42
+ expect(arr.removeFirstElement(3)).isTrue(); // 1 6( ) 3 7 5 6 7 42
+ expect(arr.removeLast()).equals(42); // 1 6 3 7 5 6 7( )
+ expect(arr.removeAllElements(6)).equals(2); // 1( ) 3 7 5( )7
+ called = true;
+ })(null);
+ expect(called).isTrue();
+ expect(res).isNotNull();
+ expect(res.events.length).equals(11);
+ validateInsert(res.events[0], arr, null, 6, 5);
+ validateInsert(res.events[1], arr, null, 7, 6);
+ validateUpdate(res.events[2], arr, null, 1, 6, 2);
+ validateInsert(res.events[3], arr, null, 8, 7);
+ validateUpdate(res.events[4], arr, null, 5, 7, 4);
+ validateInsert(res.events[5], arr, null, 9, 42);
+ validateRemove(res.events[6], arr, null, 3, 1);
+ validateRemove(res.events[7], arr, null, 2, 3);
+ validateRemove(res.events[8], arr, null, 7, 42);
+ validateRemove(res.events[9], arr, null, 1, 6);
+ validateRemove(res.events[10], arr, null, 4, 6);
+ expect(arr).equalsCollection([1, 3, 7, 5, 7]);
+
+ res = null;
+ expect(res).isNull();
+ called = false;
+ // execute global mutations like sort and clear
+ EventBatch.wrap((e) {
+ arr.add(1);
+ arr.add(4);
+ arr.add(10);
+ arr.add(9);
+ arr.sort(int compare(int a, int b) { return a - b; });
+ called = true;
+ })(null);
+ expect(called).isTrue();
+ expect(res).isNotNull();
+ expect(res.events.length).equals(5);
+ validateInsert(res.events[0], arr, null, 5, 1);
+ validateInsert(res.events[1], arr, null, 6, 4);
+ validateInsert(res.events[2], arr, null, 7, 10);
+ validateInsert(res.events[3], arr, null, 8, 9);
+ validateGlobal(res.events[4], arr);
+ expect(arr).equalsCollection([1, 1, 3, 4, 5, 7, 7, 9, 10]);
+
+ res = null;
+ expect(res).isNull();
+ called = false;
+ EventBatch.wrap((e) {
+ arr.clear();
+ called = true;
+ })(null);
+ expect(called).isTrue();
+ expect(res).isNotNull();
+ expect(res.events.length).equals(1);
+ validateGlobal(res.events[0], arr);
+ expect(arr).equalsCollection([]);
+ });
+}

Powered by Google App Engine
This is Rietveld 408576698