<!--
Copyright (C) 2015 Apple Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1.  Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
2.  Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <!--
    These resources should match the order and groups used in Main.html and Test.html.
    -->
    <script src="Base/WebInspector.js"></script>
    <script src="Base/LinkedList.js"></script>
    <script src="Base/ListMultimap.js"></script>
    <script src="Base/Object.js"></script>
    <script src="Base/Utilities.js"></script>

    <script src="Models/CallingContextTree.js"></script>
    <script src="Models/CallingContextTreeNode.js"></script>
    <script src="Models/WrappedPromise.js"></script>

    <script src="Test/TestSuite.js"></script>
    <script src="Test/TestHarness.js"></script>
    <script src="Test/ProtocolTestHarness.js"></script>

    <script src="Test/InspectorProtocol.js"></script>

    <script src="Test/TestStub.js"></script>
    <script>
        // Debug logging is synchronous on the test page.
        ProtocolTest.forceDebugLogging = false;

        // Tee all TestHarness commands to stderr from within the Inspector.
        ProtocolTest.dumpActivityToSystemConsole = false;

        // Best used in combination with dumpActivityToSystemConsole.
        ProtocolTest.dumpInspectorProtocolMessages = false;
    </script>
</head>
</html>
