<!DOCTYPE html>
<html>
<head>
<title> Event dispatch and DOM event flow </title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id=log></div>

<table id="table" border="1" style="display: none">
    <tbody id="table-body">
    <tr id="table-row">
        <td id="table-cell">Shady Grove</td>
        <td>Aeolian</td>
    </tr>
    <tr id="parent">    
        <td id="target">Over the river, Charlie</td>
        <td>Dorian</td>
    </tr>
    </tbody>
</table>
        
<script>
    var EVENT = "foo";    
    var TARGET = document.getElementById("target");
    var PARENT = document.getElementById("parent"); 
    var TBODY = document.getElementById("table-body");
    var TABLE = document.getElementById("table");
    var BODY = document.body;
    var HTML = document.documentElement;                
    var CurrentTargets = [window, document, HTML, BODY, TABLE, TBODY, PARENT, TARGET];
    var ExpectResult = CurrentTargets.concat([TARGET, PARENT, TBODY, TABLE, BODY, HTML, document, window]);
    var ActualResult = [];
    var ExpectPhases = [1,1,1,1,1,1,1,2,2,3,3,3,3,3,3,3,];
    var ActualPhases = [];
    
    var description = "Test Description: Dispatch an event in a DOM tree using the DOM event flow.";
    
    test(function()
    {
        for (var i=0; i < CurrentTargets.length; i++)
        {
            CurrentTargets[i].addEventListener(EVENT, TestEvent, true);
            CurrentTargets[i].addEventListener(EVENT, TestEvent, false);
        }
        
        var evt = document.createEvent("Event");
        evt.initEvent(EVENT, true, true);               
        TARGET.dispatchEvent(evt);

        assert_array_equals(ActualResult, ExpectResult, "ActualResult");
        assert_array_equals(ActualPhases, ExpectPhases, "ActualPhases");
        
    }, description);
         
    function TestEvent(evt)
    {
        ActualResult.push(evt.currentTarget);         
        ActualPhases.push(evt.eventPhase);          
    }
</script>
</body>
</html>
