<!DOCTYPE html><!-- webkit-test-runner [ ModernMediaControlsEnabled=false ] -->
<html>
    <head>
        <script src="../media-file.js"></script>
        <script src="controls-test-helpers.js"></script>
        <script>
            var tester = new ControlsTest()
                .whenReady(runTests)
                .start();

            function runTests()
            {
                currentState = tester.currentState;
                tester.test("We are using the apple idiom")
                    .value(currentState.idiom)
                    .isEqualTo("apple");

                tester.startNewSection("Get the status label state");
                var statusDisplayLabelState = tester.stateForControlsElement("Status Display");

                tester.test("Name is 'Status Display'")
                    .value(statusDisplayLabelState.name)
                    .isEqualTo("Status Display");

                tester.test("Has hidden class")
                    .value(statusDisplayLabelState.className)
                    .isEqualTo("hidden");

                tester.test("Content is Empty")
                    .value(statusDisplayLabelState.textContent)
                    .isEmptyString();

                tester.test("CSS display: none")
                    .value(statusDisplayLabelState.computedStyle.display)
                    .isEqualTo("none");

                tester.end();
            }

        </script>
    </head>
    <body>
        <p>This tests for the content in the status display.</p>
        <p>This test only runs in DRT!</p>
        <video controls></video>
    </body>
</html>
