<!--
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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.
-->

<html>
<head>
    <meta charset="utf-8">
    <script src="../javascripts/vendor.js"></script>
    <script src="../javascripts/app.js"></script>
    <link rel="stylesheet" href="../../node_modules/mocha/mocha.css" />
</head>
<body>
<div id="mocha"></div>
<div id="wrapper">
    <!-- ApplicationView -->
</div>
<script src="../../node_modules/mocha/mocha.js"></script>
<script src="../../node_modules/chai/chai.js"></script>
<script src="../../node_modules/sinon/lib/sinon.js"></script>
<script src="../../node_modules/sinon/lib/sinon/spy.js"></script>
<script src="../../node_modules/sinon/lib/sinon/stub.js"></script>
<script src="../../node_modules/sinon/lib/sinon/mock.js"></script>
<script src="../../node_modules/sinon/lib/sinon/assert.js"></script>
<script src="../../node_modules/sinon/lib/sinon/util/fake_server.js"></script>
<script src="../../node_modules/sinon/lib/sinon/util/fake_xml_http_request.js"></script>
<script src="../../node_modules/sinon/lib/sinon/util/fake_timers.js"></script>
<script>
    $.mocho = true;
    $.hostName = 'localhost:3333';
    window.initMochaPhantomJS && window.initMochaPhantomJS();
    mocha.ui('bdd');
    mocha.reporter('html');
    expect = chai.expect;
    assert = chai.assert;
</script>
<script src="./javascripts/test.js"></script>
<script src="./tests.js"></script>
<script>
    if (window.mochaPhantomJS) { mochaPhantomJS.run(); }
    else { mocha.run(); }
</script>
</body>
</html>