| // Copyright (c) 2020, 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:html'; | |
| import 'package:expect/legacy/minitest.dart'; // ignore: deprecated_member_use_from_same_package | |
| bool isChecked(Element e) => (e as CheckboxInputElement).checked!; | |
| bool isUnchecked(Element e) => !(e as CheckboxInputElement).checked!; | |
| // Test that List<Element> implements List<T> | |
| main() { | |
| Element insertTestDiv() { | |
| Element element = new Element.tag('div'); | |
| element.innerHtml = r""" | |
| <div id='allChecked'> | |
| <input type="checkbox" name="c1" value="1" checked="yes"> | |
| <input type="checkbox" name="c2" value="2" checked="yes"> | |
| <input type="checkbox" name="c3" value="3" checked="yes"> | |
| <input type="checkbox" name="c4" value="4" checked="yes"> | |
| </div> | |
| <div id='someChecked'> | |
| <input type="checkbox" name="s1" value="1" checked="yes"> | |
| <input type="checkbox" name="s2" value="2"> | |
| <input type="checkbox" name="s3" value="3" checked="yes"> | |
| <input type="checkbox" name="s4" value="4"> | |
| </div> | |
| <div id='noneChecked'> | |
| <input type="checkbox" name="n1" value="1"> | |
| <input type="checkbox" name="n2" value="2"> | |
| <input type="checkbox" name="n3" value="3"> | |
| <input type="checkbox" name="n4" value="4"> | |
| </div> | |
| <div id='emptyDiv'></div> | |
| """; | |
| document.body!.append(element); | |
| return element; | |
| } | |
| test('IsList', () { | |
| Element root = insertTestDiv(); | |
| List<Element> eachChecked = document.querySelector('#allChecked')!.children; | |
| expect(eachChecked is List, isTrue); | |
| root.remove(); | |
| }); | |
| test('Every', () { | |
| Element root = insertTestDiv(); | |
| List<Element> eachChecked = document.querySelector('#allChecked')!.children; | |
| List<Element> someChecked = document | |
| .querySelector('#someChecked')! | |
| .children; | |
| List<Element> noneChecked = document | |
| .querySelector('#noneChecked')! | |
| .children; | |
| expect(eachChecked.length, 4); | |
| expect(someChecked.length, 4); | |
| expect(noneChecked.length, 4); | |
| expect(eachChecked.every(isChecked), isTrue); | |
| expect(eachChecked.every(isUnchecked), isFalse); | |
| expect(someChecked.every(isChecked), isFalse); | |
| expect(someChecked.every(isUnchecked), isFalse); | |
| expect(noneChecked.every(isChecked), isFalse); | |
| expect(noneChecked.every(isUnchecked), isTrue); | |
| root.remove(); | |
| }); | |
| test('Some', () { | |
| Element root = insertTestDiv(); | |
| List<Element> eachChecked = document.querySelector('#allChecked')!.children; | |
| List<Element> someChecked = document | |
| .querySelector('#someChecked')! | |
| .children; | |
| List<Element> noneChecked = document | |
| .querySelector('#noneChecked')! | |
| .children; | |
| expect(eachChecked.length, 4); | |
| expect(someChecked.length, 4); | |
| expect(noneChecked.length, 4); | |
| expect(eachChecked.any(isChecked), isTrue); | |
| expect(eachChecked.any(isUnchecked), isFalse); | |
| expect(someChecked.any(isChecked), isTrue); | |
| expect(someChecked.any(isUnchecked), isTrue); | |
| expect(noneChecked.any(isChecked), isFalse); | |
| expect(noneChecked.any(isUnchecked), isTrue); | |
| root.remove(); | |
| }); | |
| test('Filter', () { | |
| Element root = insertTestDiv(); | |
| List<Element> eachChecked = document.querySelector('#allChecked')!.children; | |
| List<Element> someChecked = document | |
| .querySelector('#someChecked')! | |
| .children; | |
| List<Element> noneChecked = document | |
| .querySelector('#noneChecked')! | |
| .children; | |
| expect(eachChecked.length, 4); | |
| expect(someChecked.length, 4); | |
| expect(noneChecked.length, 4); | |
| expect(eachChecked.where(isChecked).length, 4); | |
| expect(eachChecked.where(isUnchecked).length, 0); | |
| expect(someChecked.where(isChecked).length, 2); | |
| expect(someChecked.where(isUnchecked).length, 2); | |
| expect(noneChecked.where(isChecked).length, 0); | |
| expect(noneChecked.where(isUnchecked).length, 4); | |
| root.remove(); | |
| }); | |
| test('IsEmpty', () { | |
| Element root = insertTestDiv(); | |
| List<Element> someChecked = document | |
| .querySelector('#someChecked')! | |
| .children; | |
| List<Element> emptyDiv = document.querySelector('#emptyDiv')!.children; | |
| expect(someChecked.length, 4); | |
| expect(emptyDiv.length, 0); | |
| expect(someChecked.isEmpty, isFalse); | |
| expect(emptyDiv.isEmpty, isTrue); | |
| root.remove(); | |
| }); | |
| int countWithForEach(collection, predicate) { | |
| int count = 0; | |
| collection.forEach((element) { | |
| if (predicate(element)) count++; | |
| }); | |
| return count; | |
| } | |
| test('ForEach', () { | |
| Element root = insertTestDiv(); | |
| List<Element> eachChecked = document.querySelector('#allChecked')!.children; | |
| List<Element> someChecked = document | |
| .querySelector('#someChecked')! | |
| .children; | |
| List<Element> noneChecked = document | |
| .querySelector('#noneChecked')! | |
| .children; | |
| expect(eachChecked.length, 4); | |
| expect(someChecked.length, 4); | |
| expect(noneChecked.length, 4); | |
| expect(countWithForEach(eachChecked, isChecked), 4); | |
| expect(countWithForEach(eachChecked, isUnchecked), 0); | |
| expect(countWithForEach(someChecked, isChecked), 2); | |
| expect(countWithForEach(someChecked, isUnchecked), 2); | |
| expect(countWithForEach(noneChecked, isChecked), 0); | |
| expect(countWithForEach(noneChecked, isUnchecked), 4); | |
| root.remove(); | |
| }); | |
| int countWithForLoop(collection, predicate) { | |
| int count = 0; | |
| for (var element in collection) { | |
| if (predicate(element)) count++; | |
| } | |
| return count; | |
| } | |
| test('ForLoop', () { | |
| // Uses iterator. | |
| Element root = insertTestDiv(); | |
| List<Element> eachChecked = document.querySelector('#allChecked')!.children; | |
| List<Element> someChecked = document | |
| .querySelector('#someChecked')! | |
| .children; | |
| List<Element> noneChecked = document | |
| .querySelector('#noneChecked')! | |
| .children; | |
| expect(eachChecked.length, 4); | |
| expect(someChecked.length, 4); | |
| expect(noneChecked.length, 4); | |
| expect(countWithForLoop(eachChecked, isChecked), 4); | |
| expect(countWithForLoop(eachChecked, isUnchecked), 0); | |
| expect(countWithForLoop(someChecked, isChecked), 2); | |
| expect(countWithForLoop(someChecked, isUnchecked), 2); | |
| expect(countWithForLoop(noneChecked, isChecked), 0); | |
| expect(countWithForLoop(noneChecked, isUnchecked), 4); | |
| root.remove(); | |
| }); | |
| test('Last', () { | |
| Element root = insertTestDiv(); | |
| List<Element> someChecked = document | |
| .querySelector('#someChecked')! | |
| .children; | |
| expect(someChecked.length, 4); | |
| expect(someChecked.last, equals(someChecked[3])); | |
| root.remove(); | |
| }); | |
| test('IndexOf', () { | |
| Element root = insertTestDiv(); | |
| List<Element> someChecked = document | |
| .querySelector('#someChecked')! | |
| .children; | |
| List<Element> noneChecked = document | |
| .querySelector('#noneChecked')! | |
| .children; | |
| expect(someChecked.length, 4); | |
| expect(noneChecked.length, 4); | |
| expect(someChecked.indexOf(someChecked[0], 0), 0); | |
| expect(someChecked.indexOf(someChecked[1], 0), 1); | |
| expect(someChecked.indexOf(someChecked[2], 0), 2); | |
| expect(someChecked.indexOf(someChecked[3], 0), 3); | |
| expect(someChecked.indexOf(someChecked[0], 1), -1); | |
| expect(someChecked.indexOf(someChecked[1], 2), -1); | |
| expect(someChecked.indexOf(someChecked[2], 3), -1); | |
| expect(someChecked.indexOf(someChecked[3], 4), -1); | |
| expect(someChecked.indexOf(noneChecked[0], 0), -1); | |
| expect(noneChecked.indexOf(someChecked[0], 0), -1); | |
| expect(someChecked.indexOf(noneChecked[1], 0), -1); | |
| expect(noneChecked.indexOf(someChecked[1], 0), -1); | |
| root.remove(); | |
| }); | |
| test('LastIndexOf', () { | |
| Element root = insertTestDiv(); | |
| List<Element> someChecked = document | |
| .querySelector('#someChecked')! | |
| .children; | |
| List<Element> noneChecked = document | |
| .querySelector('#noneChecked')! | |
| .children; | |
| expect(someChecked.length, 4); | |
| expect(noneChecked.length, 4); | |
| expect(someChecked.lastIndexOf(someChecked[0], 3), 0); | |
| expect(someChecked.lastIndexOf(someChecked[1], 3), 1); | |
| expect(someChecked.lastIndexOf(someChecked[2], 3), 2); | |
| expect(someChecked.lastIndexOf(someChecked[3], 3), 3); | |
| expect(someChecked.lastIndexOf(someChecked[0], -1), -1); | |
| expect(someChecked.lastIndexOf(someChecked[1], 0), -1); | |
| expect(someChecked.lastIndexOf(someChecked[2], 1), -1); | |
| expect(someChecked.lastIndexOf(someChecked[3], 2), -1); | |
| expect(someChecked.lastIndexOf(noneChecked[0], 3), -1); | |
| expect(noneChecked.lastIndexOf(someChecked[0], 3), -1); | |
| expect(someChecked.lastIndexOf(noneChecked[1], 3), -1); | |
| expect(noneChecked.lastIndexOf(someChecked[1], 3), -1); | |
| root.remove(); | |
| }); | |
| } |