/*
 * Copyright (c) 2014, 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.
 */
/**
 * @assertion void setInnerHtml(String html, {NodeValidator validator,
 * NodeTreeSanitizer treeSanitizer}) 
 * Parses the HTML fragment and sets it as the contents of this element.
 * This ensures that the generated content follows the sanitization rules
 * specified by the validator or treeSanitizer.
 * The resulting tree is guaranteed to only contain nodes and attributes
 * which are allowed by the provided validator.
 * @description Checks that if provided validator allows non standard elements
 * and attributes, they are included in created fragment.
 */
import "dart:html";
import "../../../Utils/expect.dart";

main() {
  var x = document.body;
  x?.setInnerHtml('<div foo="foo"><bar id="bar"></bar></div>',
      validator: new NodeValidatorBuilder()
        //..allowHtml5()
        ..allowElement('bar', attributes: ["id"])
        ..allowElement('div', attributes: ["foo"]));
  DivElement div = x?.firstChild as DivElement;

  Expect.mapEquals({'foo': 'foo'}, div.attributes);

  var bar = div.querySelector('#bar');
  Expect.equals('BAR', bar?.tagName);
}
