<html>
<script>
function runTest()
{
    if (window.testRunner)
        testRunner.dumpAsText();

    var plugin = document.getElementById("testPlugin");
    var result = document.getElementById('result');

    // First test NPN_Enumerate from the plugin's side
    var testObject = { "one" : 1, "two" : 2, "three" : 3, 4 : 4 }
    var outArray = [];    
    plugin.testEnumerate(testObject, outArray);

    if (outArray.sort().toString() != '4,one,three,two') {
        result.innerHTML = 'FAILURE: Array returned from plugin was ' + outArray.toString();
        return;
    }
    
    // Now try enumerating a plugin object's properties
    var propNames = [];
    for (var v in plugin.testObject) {
        propNames.push(v);
    }
    
    if (propNames.sort().toString() != 'bar,foo') {
        result.innerHTML = 'FAILURE: Plugin object properties was ' + propNames.toString();
        return;
    }

    // Now try enumerating a plugin object's properties using Object.keys
    var keys = Object.keys(plugin.testObject);
    if (keys.sort().toString() != 'bar,foo') {
        result.innerHTML = 'FAILURE: Plugin object properties returned by Object.keys were ' + keys.toString();
        return;
    }

    result.innerHTML = 'SUCCESS';
}
</script>

<body onload="runTest();">
<embed id="testPlugin" type="application/x-webkit-test-netscape" width="200" height="200"></embed>
This tests that a plugin can enumerate an object's properties using NPN_Enumerate. It also tests that JavaScript can enumerate a plugin object's properties. If this test is successful the text "SUCCESS" will be show below.
<div id="result">FAILURE</div>
</body>
</html>
