<!DOCTYPE HTML>
<html>
    <head>
        <title id='desc'> KeyboardEvent Object Property: key </title>
        <script type="text/javascript">
            var PassTest = function()
            {
                document.getElementById("testresult").firstChild.data = "PASS";
            }

            var FailTest = function()
            {
                document.getElementById("testresult").firstChild.data = "FAIL";
            }

            var EVENT = "keydown";
            var TARGET;
            var ActualResult = "";
            var result = true;

            window.onload = function(e)
            {
                try
                {
                    TARGET = document.getElementById("target");
                    TARGET.addEventListener(EVENT, TestEvent, true);
                }
                catch(ex)
                {
                    FailTest();
                }
            }

            function TestEvent(evt)
            {
                if ((evt.type == EVENT) && (evt.key == "a"))
                {
                    PassTest();
                }
                else
                {
                    FailTest();
                }
            }
        </script>
    </head>
    <body>
        <h4>Test Description: KeyboardEvent Object Property key holds the key value of the key pressed</h4>

        Type 'a' here: <input id="target" value=""/>

        <p>Test passes if the word "PASS" appears below after typing 'a' in the above textbox using keyboard.</p>
       	<div>Test result: </div>
        <div id='testresult'>FAIL</div>
    </body>
</html>