| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 @TestOn('browser') | 4 @TestOn('browser') |
| 5 library polymer_elements.test.iron_list_mutations_test; | 5 library polymer_elements.test.iron_list_mutations_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:js'; | 8 import 'dart:js'; |
| 9 import 'dart:math'; |
| 9 import 'package:polymer_elements/iron_list.dart'; | 10 import 'package:polymer_elements/iron_list.dart'; |
| 10 import 'package:polymer/polymer.dart'; | 11 import 'package:polymer/polymer.dart'; |
| 11 import 'package:test/test.dart'; | 12 import 'package:test/test.dart'; |
| 12 import 'package:web_components/web_components.dart'; | 13 import 'package:web_components/web_components.dart'; |
| 13 import 'common.dart'; | 14 import 'common.dart'; |
| 14 import 'iron_list_test_helpers.dart'; | 15 import 'iron_list_test_helpers.dart'; |
| 15 import 'fixtures/x_list.dart'; | 16 import 'fixtures/x_list.dart'; |
| 16 | 17 |
| 18 var rand = new Random(); |
| 19 |
| 17 main() async { | 20 main() async { |
| 18 await initPolymer(); | 21 await initPolymer(); |
| 19 | 22 |
| 20 group('mutations to items', () { | 23 group('mutations to items', () { |
| 21 IronList list; | 24 IronList list; |
| 22 XList container; | 25 XList container; |
| 23 | 26 |
| 24 setUp(() { | 27 setUp(() { |
| 25 container = fixture('trivialList'); | 28 container = fixture('trivialList'); |
| 26 list = container.list; | 29 list = container.list; |
| 27 }); | 30 }); |
| 28 | 31 |
| 29 test('update physical item', () { | 32 test('update physical item', () { |
| 30 var setSize = 100; | 33 var setSize = 100; |
| 31 var phrase = 'It works!'; | 34 var phrase = 'It works!'; |
| 32 list.items = buildDataSet(setSize); | 35 list.items = buildDataSet(setSize); |
| 33 // TODO(jakemac): Update once we resolve | 36 list.set('items.0.index', phrase); |
| 34 // https://github.com/dart-lang/polymer_interop/issues/6 | |
| 35 list.jsElement.callMethod('set', ['items.0.index', phrase]); | |
| 36 return new Future(() {}).then((_) { | 37 return new Future(() {}).then((_) { |
| 37 expect(getFirstItemFromList(list).text, phrase); | 38 expect(getFirstItemFromList(list).text, phrase); |
| 38 }); | 39 }); |
| 39 }); | 40 }); |
| 40 | 41 |
| 41 test('update virtual item', () { | 42 test('update virtual item', () { |
| 42 var done = new Completer(); | 43 var done = new Completer(); |
| 43 var setSize = 100; | 44 var setSize = 100; |
| 44 var phrase = 'It works!'; | 45 var phrase = 'It works!'; |
| 45 list.items = buildDataSet(setSize); | 46 list.items = buildDataSet(setSize); |
| 46 | 47 |
| 47 scrollBackUp([_]) { | 48 scrollBackUp([_]) { |
| 48 simulateScroll({'list': list, 'contribution': 100, 'target': 0}, ([_]) { | 49 simulateScroll({'list': list, 'contribution': 100, 'target': 0}, ([_]) { |
| 49 new Future(() {}).then((_) { | 50 new Future(() {}).then((_) { |
| 50 expect(getFirstItemFromList(list).text, phrase); | 51 expect(getFirstItemFromList(list).text, phrase); |
| 51 done.complete(); | 52 done.complete(); |
| 52 }); | 53 }); |
| 53 }); | 54 }); |
| 54 } | 55 } |
| 55 | 56 |
| 56 new Future(() {}).then((_) { | 57 new Future(() {}).then((_) { |
| 57 var rowHeight = list.jsElement['_physicalItems'][0].offsetHeight; | 58 var rowHeight = list.jsElement['_physicalItems'][0].offsetHeight; |
| 58 // scroll down | 59 // scroll down |
| 59 simulateScroll({ | 60 simulateScroll( |
| 60 'list': list, | 61 {'list': list, 'contribution': 100, 'target': setSize * rowHeight}, |
| 61 'contribution': 100, | 62 ([_]) { |
| 62 'target': setSize * rowHeight | 63 list.set('items.0.index', phrase); |
| 63 }, ([_]) { | |
| 64 // TODO(jakemac): Update once we resolve | |
| 65 // https://github.com/dart-lang/polymer_interop/issues/6 | |
| 66 list.jsElement.callMethod('set', ['items.0.index', phrase]); | |
| 67 new Future(() {}).then(scrollBackUp); | 64 new Future(() {}).then(scrollBackUp); |
| 68 }); | 65 }); |
| 69 }); | 66 }); |
| 70 | 67 |
| 71 return done.future; | 68 return done.future; |
| 72 }); | 69 }); |
| 73 | 70 |
| 74 test('push', () { | 71 test('push', () { |
| 75 var done = new Completer(); | 72 var done = new Completer(); |
| 76 var setSize = 100; | 73 var setSize = 100; |
| 77 list.items = buildDataSet(setSize); | 74 list.items = buildDataSet(setSize); |
| 78 setSize = list.items.length; | 75 setSize = list.items.length; |
| 79 // TODO(jakemac): Update once we resolve | 76 list.add('items', buildItem(setSize)); |
| 80 // https://github.com/dart-lang/polymer_interop/issues/6 | |
| 81 list.jsElement.callMethod('push', ['items', buildItem(setSize)]); | |
| 82 expect(list.items.length, setSize + 1); | 77 expect(list.items.length, setSize + 1); |
| 83 new Future(() {}).then((_) { | 78 new Future(() {}).then((_) { |
| 84 var rowHeight = list.jsElement['_physicalItems'][0].offsetHeight; | 79 var rowHeight = list.jsElement['_physicalItems'][0].offsetHeight; |
| 85 var viewportHeight = list.offsetHeight; | 80 var viewportHeight = list.offsetHeight; |
| 86 var itemsPerViewport = (viewportHeight / rowHeight).floor(); | 81 var itemsPerViewport = (viewportHeight / rowHeight).floor(); |
| 87 expect(getFirstItemFromList(list).text, '0'); | 82 expect(getFirstItemFromList(list).text, '0'); |
| 88 simulateScroll({ | 83 simulateScroll({ |
| 89 'list': list, | 84 'list': list, |
| 90 'contribution': rowHeight, | 85 'contribution': rowHeight, |
| 91 'target': list.items.length * rowHeight | 86 'target': list.items.length * rowHeight |
| (...skipping 14 matching lines...) Expand all Loading... |
| 106 var rowHeight = list.jsElement['_physicalItems'][0].offsetHeight; | 101 var rowHeight = list.jsElement['_physicalItems'][0].offsetHeight; |
| 107 simulateScroll({ | 102 simulateScroll({ |
| 108 'list': list, | 103 'list': list, |
| 109 'contribution': rowHeight, | 104 'contribution': rowHeight, |
| 110 'target': setSize * rowHeight | 105 'target': setSize * rowHeight |
| 111 }, ([_]) { | 106 }, ([_]) { |
| 112 var viewportHeight = list.offsetHeight; | 107 var viewportHeight = list.offsetHeight; |
| 113 var itemsPerViewport = (viewportHeight / rowHeight).floor(); | 108 var itemsPerViewport = (viewportHeight / rowHeight).floor(); |
| 114 // TODO(jakemac): Update once we resolve | 109 // TODO(jakemac): Update once we resolve |
| 115 // https://github.com/dart-lang/polymer_interop/issues/6 | 110 // https://github.com/dart-lang/polymer_interop/issues/6 |
| 116 list.jsElement.callMethod('pop', ['items']); | 111 list.removeLast('items'); |
| 117 new Future(() {}).then((_) { | 112 new Future(() {}).then((_) { |
| 118 expect(list.items.length, setSize - 1); | 113 expect(list.items.length, setSize - 1); |
| 119 expect(getFirstItemFromList(list).text, '${setSize - 3 - 1}'); | 114 expect(getFirstItemFromList(list).text, '${setSize - 3 - 1}'); |
| 120 done.complete(); | 115 done.complete(); |
| 121 }); | 116 }); |
| 122 }); | 117 }); |
| 123 }); | 118 }); |
| 124 return done.future; | 119 return done.future; |
| 125 }); | 120 }); |
| 126 | 121 |
| 127 test('splice', () { | 122 test('splice', () { |
| 128 var setSize = 45; | 123 var setSize = 45; |
| 129 var phrase = 'It works!'; | 124 var phrase = 'It works!'; |
| 130 list.items = buildDataSet(setSize); | 125 list.items = buildDataSet(setSize); |
| 131 // TODO(jakemac): Update once we resolve | 126 list.removeRange('items', 0, setSize); |
| 132 // https://github.com/dart-lang/polymer_interop/issues/6 | 127 list.add('items', buildItem(phrase)); |
| 133 list.jsElement.callMethod( | |
| 134 'splice', ['items', 0, setSize, buildItem(phrase)]); | |
| 135 return new Future(() {}).then((_) { | 128 return new Future(() {}).then((_) { |
| 136 expect(list.items.length, 1); | 129 expect(list.items.length, 1); |
| 137 expect(getFirstItemFromList(list).text, phrase); | 130 expect(getFirstItemFromList(list).text, phrase); |
| 138 }); | 131 }); |
| 139 }); | 132 }); |
| 133 |
| 134 test('delete item and scroll to bottom', () { |
| 135 var setSize = 100, index; |
| 136 |
| 137 list.items = buildDataSet(setSize); |
| 138 |
| 139 while (list.items.length > 10) { |
| 140 index = (list.items.length * rand.nextDouble()).floor(); |
| 141 list.removeItem('items', list.items[index]); |
| 142 list.scrollToIndex(list.items.length - 1); |
| 143 expect( |
| 144 new RegExp(r'^[0-9]*$').hasMatch(getFirstItemFromList(list).text), |
| 145 isTrue); |
| 146 } |
| 147 }); |
| 140 }); | 148 }); |
| 141 } | 149 } |
| OLD | NEW |