<html>
<head>
<meta charset="utf-8">
<script src="../fast/js/resources/js-test-pre.js"></script>
<script>
if (window.testRunner)
    testRunner.overridePreference("WebKitJavaEnabled", "1");
</script>
</head>
<body>

<p>Test that Java objects can be passed to NPAPI plug-ins, and vice versa.</p>
<p>Some tests below are written in a way that works around issues with preserving object identity.
They can be simplified once these issues are fixed.</p>

<div id="console"></div>
<embed name="plg" type="application/x-webkit-test-netscape"></embed>
<applet CODE="SharedApplet.class" NAME="javaTest" WIDTH=150 HEIGHT=25 MAYSCRIPT></applet>
<script>

document.plg.remember(document.javaTest.getSelf());
shouldBe('document.plg.getAndForgetRememberedObject() + ""', 'document.javaTest.getSelf() + ""');
document.plg.remember(document.javaTest.getSelf());
shouldBe('document.plg.getAndForgetRememberedObject().getSelf().getSelf() + ""', 'document.javaTest.getSelf() + ""');

shouldBe('document.plg.testHasMethod(document.javaTest, "getSelf")', 'true');
shouldBe('document.plg.testHasMethod(document.javaTest, "doesNotExist")', 'false');
shouldBe('document.plg.testHasMethod(document.javaTest.getSelf(), "getSelf")', 'true');
shouldBe('document.plg.testHasMethod(document.javaTest.getSelf(), "doesNotExist")', 'false');

document.javaTest.remember(document.plg.testObject);
shouldBe('document.javaTest.getAndForgetRememberedObject().objectPointer', 'document.plg.testObject.objectPointer');

shouldBe('typeof document.javaTest.testGetMember(document.plg, "testDOMAccess")', '"function"');

</script>
<script src="../fast/js/resources/js-test-post.js"></script>
</body>
</html>
