<!DOCTYPE html>
<html>
<head>
<title> Event.stopPropagation() deferred effect </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 = [window, window, document, document, HTML, HTML, BODY, BODY, TABLE, TABLE];
    var ActualResult = [];
    var ExpectListeners = [0,1,0,1,0,1,0,1,0,1];
    var ActualListeners = [];

    var description = "Test Description: " + 
                      "stopPropagation() prevents other event listeners from being triggered but its effect must be " +
                      "deferred until all event listeners attached on the Event.currentTarget have been triggered.";

    test(function()
    {
        for (var i=0; i < CurrentTargets.length; i++)
        {
            CurrentTargets[i].addEventListener(EVENT, function(e){TestEvent(e, 0)}, true);
            CurrentTargets[i].addEventListener(EVENT, function(e){TestEvent(e, 1)}, true);
        }
       
        var evt = document.createEvent("Event");
        evt.initEvent(EVENT, true, true);            
        TARGET.dispatchEvent(evt);

        assert_array_equals(ActualResult, ExpectResult, "ActualResult");
        assert_array_equals(ActualListeners, ExpectListeners, "ActualListeners");
        
    }, description);
         
    function TestEvent(evt, i)
    {
        ActualResult.push(evt.currentTarget);         
        ActualListeners.push(i);
        if ((1 == evt.eventPhase) && (TABLE == evt.currentTarget) && (0 == i))
        {
            evt.stopPropagation();
        }
    }
</script>
</body>
</html>
