<html>
<head>
<script>

if (!window.sessionStorage) {
    alert("This test needs sessionstorage to run properly");
    location.href = "http://webkit.org/";
}

var targetNumberOfEventsForFirstTest = 8;
var targetNumberOfEventsForSecondTest = 10;

var testNumber = 1;
if (sessionStorage.totalEventsFired == targetNumberOfEventsForFirstTest)
    testNumber = 2;

sessionStorage.clear();
sessionStorage.totalEventsFired = 0;

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function startTest()
{
    if (testNumber == 1) {
        location.hash='#';
        location.hash='#';
        location.hash='#someHash';
        location.hash='#';
        location.hash='#';
        location.hash='#someHash';
        location.hash='#someHash';
        location.hash='#';
    } else if (testNumber == 2) {
        location.hash='#someHash';
        location.hash='#someHash';
        location.hash='#';
        location.hash='#someHash';
        location.hash='#someHash';
        location.hash='#';
        location.hash='#';
        location.hash='#someHash';
    } else
        alert("This shouldn't happen.");
}

var totalEventsFired = 0;
function hashChanged(eventHandlerName)
{
    alert("Test number " + testNumber + ".\nhashchange event received by " + eventHandlerName + ".\nA total of " + ++sessionStorage.totalEventsFired + " events have been received.");
    if (testNumber == 1 && sessionStorage.totalEventsFired == targetNumberOfEventsForFirstTest) {
        location.hash="";
        location.href=location.href.substr(0, location.href.length - 1);
    }
    if (testNumber == 2 && sessionStorage.totalEventsFired == targetNumberOfEventsForSecondTest && window.testRunner) {
        testRunner.notifyDone();
        sessionStorage.clear();
    }
}

window.addEventListener("hashchange", function() { hashChanged('window-event-listener'); }, false);

</script>
</head>
<body onload="setTimeout('startTest();', 0);" onhashchange="hashChanged('body-onhashchange-attribute');">
This test checks to make sure the hashchange event is fired when the value of location.hash changes.<br>
This includes testing the transition from no fragment identifier to an empty fragment identifier *not* generating an event, as these cases are equivalent as far as location.hash is concerned.<br>
Clicking the links below manually should also result in the event being fired when the hash actually changes.<br>
<a href="#">Go to empty hash</a><br>
<a href="#someHash">Go to non-empty hash</a><br>
<a name="#">Empty hash anchor</a><br>
<a name="#someHash">Non-empty hash anchor</a>
</body>
</html>
