// 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/minitest.dart';

main() {
  var isStyleSheetList =
      predicate((x) => x is List<StyleSheet>, 'is a List<StyleSheet>');

  test('NodeList', () {
    List<Element> asList = window.document.querySelectorAll('body');
    // Check it's Iterable
    int counter = 0;
    for (Element node in window.document.querySelectorAll('body')) {
      counter++;
    }
    expect(counter, 1);
    counter = 0;
    window.document.querySelectorAll('body').forEach((e) {
      counter++;
    });
    expect(counter, 1);
  });

  test('StyleSheetList', () {
    var document = window.document as HtmlDocument;
    List<StyleSheet> asList = document.styleSheets!;
    expect(asList, isStyleSheetList);
    // Check it's Iterable.
    int counter = 0;
    for (StyleSheet styleSheet in asList) {
      counter++;
    }

    // There is one style sheet from the test framework.
    expect(counter, 1);
  });
}
