// Copyright (c) 2019, 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/expect.dart';
import 'utils.dart';

main() {
  final String htmlPayload = "<div>"
      "<div>"
      "<p class='a'>"
      "<span>Test #1</span>"
      "</p>"
      "</div>"
      "<div>"
      "<p class='b'>"
      "<span>Test #2</span>"
      "</p>"
      "</div>"
      "</div>";

  final elements =
      new Element.html(htmlPayload, treeSanitizer: new NullTreeSanitizer());
  document.body!.nodes.add(elements);

  var para = document.body!.querySelector('p') as ParagraphElement;
  para.classes.removeAll(['a', 'b']);

  para = document.body!.querySelector('p') as ParagraphElement;
  Expect.equals('<p class=""><span>Test #1</span></p>', para.outerHtml);

  para = document.body!.querySelector('p') as ParagraphElement;
  para.classes.addAll(['c']);

  para = document.body!.querySelector('p') as ParagraphElement;
  Expect.equals('<p class="c"><span>Test #1</span></p>', para.outerHtml);

  var allPara = document.body!.querySelectorAll('p');
  allPara.classes.removeAll(['b', 'c']);

  var checkAllPara = document.body!.querySelectorAll('p');
  Expect.equals(
      '<p class=""><span>Test #1</span></p>', checkAllPara[0].outerHtml);
  Expect.equals(
      '<p class=""><span>Test #2</span></p>', checkAllPara[1].outerHtml);
}
