// 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();
  });
}
