@jsexport
JSObject
.
private class Foo extends JSObject {
Foo(JSContext ctx) { super(ctx); }
@jsexport(type = Integer.class)
Property<Integer> x;
@jsexport(type = String.class)
Property<String> y;
@jsexport(attributes = JSPropertyAttributeReadOnly)
Property<String> read_only;
@SuppressWarnings("unused")
@jsexport(attributes = JSPropertyAttributeReadOnly | JSPropertyAttributeDontDelete)
int incr(int x) {
return x+1;
}
}
Foo foo = new Foo(ctx);
ctx.property("foo", foo);
ctx.evaluateScript("foo.x = 5; foo.y = 'test';");
assertEquals((Integer)5, foo.x.get());
assertEquals("test", foo.y.get());
foo.x.set(6);
foo.y.set("test2");
assertEquals(6, foo.property("x").toNumber().intValue());
assertEquals("test2", foo.property("y").toString());
assertEquals(6, ctx.evaluateScript("foo.x").toNumber().intValue());
assertEquals("test2",
ctx.evaluateScript("foo.y").toString());
ctx.evaluateScript("foo.x = 11");
assertEquals((Integer)11, foo.x.get());
assertEquals(21,
ctx.evaluateScript("foo.incr(20)").toNumber().intValue());
foo.read_only.set("Ok!");
assertEquals("Ok!", foo.read_only.get());
foo.read_only.set("Not Ok!");
assertEquals("Ok!", foo.read_only.get());
ctx.evaluateScript("foo.read_only = 'boo';");
assertEquals("Ok!", foo.read_only.get());