<!--
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/TestUtilities.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>
