<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="dart.unittest" content="full-stack-traces">
  <title> interop_test.html </title>
  <style>
     .unittest-table { font-family:monospace; border:1px; }
     .unittest-pass { background: #6b3;}
     .unittest-fail { background: #d55;}
     .unittest-error { background: #a11;}
  </style>
  <script src="packages/web_components/webcomponents-lite.js"></script>
  <script src="packages/web_components/interop_support.js"></script>
  <script src="packages/web_components/dart_support.js"></script>
</head>
<body>
  <h1> Running interop_test </h1>
  <script>
    var counter = 0;
    var A = function() {};
    A.prototype = Object.create(HTMLElement.prototype);
    A.prototype.inc = function() { this.x = counter++; };
    A.prototype.createdCallback = function() { this.inc(); };

    var B = function() {};
    B.prototype = Object.create(HTMLDivElement.prototype);
    B.prototype.createdCallback = function() { this.x = counter++; };
    B.extends = 'div';

    var D = function() {};
    D.prototype = Object.create(HTMLElement.prototype);
    D.prototype.inc = function() { this.x = counter++; };
    D.prototype.createdCallback = function() { this.inc(); };

    var E = { prototype: Object.create(D.prototype) };
    E.prototype.inc2 = function() {
      this.y = counter++;
    };
    E.prototype.createdCallback = function() {
      D.prototype.createdCallback.call(this);
      this.inc2();
    };

    document.registerElement('x-a', A);
    document.registerElement('x-b', B);
    document.registerElement('x-d', D);
    document.registerElement('x-e', E);

    function registerC() {
      var proto = Object.create(HTMLElement.prototype, {
        inc: { value: function() { this.x = counter++; } },
        createdCallback: {
          value: function() { this.inc(); },
          configurable: true},
      });
      document.registerElement('x-c', {prototype: proto});
    }
    function addA() {
      document.body.appendChild(document.createElement('x-a'));
    }
    function addB() {
      document.body.appendChild(document.createElement('div', 'x-b'));
    }
    function addC() {
      document.body.appendChild(document.createElement('x-c'));
    }
    function addD() {
      document.body.appendChild(document.createElement('x-d'));
    }
    function addE() {
      document.body.appendChild(document.createElement('x-e'));
    }
  </script>
  <x-a id="i1"></x-a>
  <div is="x-b" id="i2"></div>
  <x-c id="i3"></x-c>
  <x-d id="i4"></x-d>
  <link rel="x-dart-test" href="interop_test.dart">
  <script src="packages/test/dart.js"></script>
  <!-- <script type="application/dart" src="interop_test.dart"></script>
  <script src="packages/browser/dart.js"></script> -->
</html>
