<!--
 Copyright 2015 Google Inc. All rights reserved.

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->
<!DOCTYPE html>
<meta charset="UTF-8" />
<link rel="stylesheet" href="node_modules/mocha/mocha.css" />
<script src="node_modules/mocha/mocha.js"></script>
<script src="node_modules/chai/chai.js"></script>
<link rel="stylesheet" type="text/css" href="dist/dialog-polyfill.css" />
<script src="dist/dialog-polyfill.js"></script>
<script>

var assert = chai.assert;
mocha.setup({ ui: 'tdd' });

(function() {
  var pageError = null;

  window.addEventListener('error', function(event) {
    pageError = event.filename + ':' + event.lineno + ' ' + event.message;
  });

  window.addEventListener('load', function() {
    if (pageError) {
      suite('page-script-errors', function() {
        test('no script errors on page', function() {
          assert.fail(null, null, pageError);
        });
      });
    }
    mocha.run();
  });
})();

</script>
<div id="mocha"></div>
<script src="suite.js"></script>
