<!DOCTYPE html>
<html>
<head>
<title> Event.stopImmediatePropagation() immediate 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];
    var ActualResult = [];
    var ExpectListeners = [0,1,0,1,0,1,0,1,0];
    var ActualListeners = [];

    var description = "Test Description: " + 
                      "stopImmediatePropagation() prevents other event listeners from being triggered and, unlike " + 
                      "Event.stopPropagation(), its effect must be immediate. Once it has been called, further calls " + 
                      "to this method have no additional effect.";

    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.stopImmediatePropagation();
        }
    }
</script>
</body>
</html>
