import 'dart:html'; import 'package:expect/minitest.dart'; bool isChecked(Element e) => (e as CheckboxInputElement).checked; bool isUnchecked(Element e) => !(e as CheckboxInputElement).checked; // Test that List implements List main() { Element insertTestDiv() { Element element = new Element.tag('div'); element.innerHtml = r"""
"""; document.body.append(element); return element; } test('IsList', () { Element root = insertTestDiv(); List eachChecked = document.querySelector('#allChecked').children; expect(eachChecked is List, isTrue); root.remove(); }); test('Every', () { Element root = insertTestDiv(); List eachChecked = document.querySelector('#allChecked').children; List someChecked = document.querySelector('#someChecked').children; List 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 eachChecked = document.querySelector('#allChecked').children; List someChecked = document.querySelector('#someChecked').children; List 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 eachChecked = document.querySelector('#allChecked').children; List someChecked = document.querySelector('#someChecked').children; List 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 someChecked = document.querySelector('#someChecked').children; List 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 eachChecked = document.querySelector('#allChecked').children; List someChecked = document.querySelector('#someChecked').children; List 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 eachChecked = document.querySelector('#allChecked').children; List someChecked = document.querySelector('#someChecked').children; List 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 someChecked = document.querySelector('#someChecked').children; expect(someChecked.length, 4); expect(someChecked.last, equals(someChecked[3])); root.remove(); }); test('IndexOf', () { Element root = insertTestDiv(); List someChecked = document.querySelector('#someChecked').children; List 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 someChecked = document.querySelector('#someChecked').children; List 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(); }); }