<!DOCTYPE html>
<title>document.embeds and document.plugins</title>
<link rel="author" title="Ms2ger" href="mailto:ms2ger@gmail.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-document-embeds">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-document-plugins">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
test(function() {
  assert_equals(document.embeds, document.embeds,
                "embeds should be constant");
  assert_equals(document.plugins, document.plugins,
                "plugins should be constant");
  assert_equals(document.embeds, document.plugins,
                "embeds should be the same as plugins");
  assert_equals(document.embeds.length, 0);
  assert_equals(document.plugins.length, 0);
}, "No plugins");

test(function() {
  var embed = document.body.appendChild(document.createElement("embed"));
  this.add_cleanup(function() { document.body.removeChild(embed) });

  assert_array_equals(document.embeds, [embed]);
  assert_array_equals(document.plugins, [embed]);

  assert_equals(document.embeds, document.embeds,
                "embeds should be constant");
  assert_equals(document.plugins, document.plugins,
                "plugins should be constant");
  assert_equals(document.embeds, document.plugins,
                "embeds should be the same as plugins");
}, "One plugin");

test(function() {
  var embed1 = document.createElement("embed"),
      embed2 = document.createElement("embed");

  document.body.appendChild(embed2);
  this.add_cleanup(function() { document.body.removeChild(embed2) });
  document.body.insertBefore(embed1, embed2);
  this.add_cleanup(function() { document.body.removeChild(embed1) });

  assert_array_equals(document.embeds, [embed1, embed2]);
  assert_array_equals(document.plugins, [embed1, embed2]);

  assert_equals(document.embeds, document.embeds,
                "embeds should be constant");
  assert_equals(document.plugins, document.plugins,
                "plugins should be constant");
  assert_equals(document.embeds, document.plugins,
                "embeds should be the same as plugins");
}, "Two plugins");
</script>
