Hi,

I tried to use Delegator class to implement some functionality on variable
assignment. I have my object that implements Scriptable and would like to
call additional functionality when instances of this objects are assigned to
variable. Here is a part of my JUnit test for this class.

       final Context context = ContextFactory.getGlobal().enterContext();

        final ScriptableObject scope = context.initStandardObjects();

        final Delegator delegator = new Delegator(scope);


        ScriptableObject.putConstProperty(delegator, "imports", new
ImportsObject(
                scope, null));

        context.evaluateString(delegator,
                "const test = imports.net.antshell.missing;", "no name", 0,
                null);

When I run this test I get following exception:
java.lang.Exception: Unexpected exception,
expected<org.mozilla.javascript.WrappedException> but
was<java.lang.StackOverflowError>
    at
org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:110)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
    at
org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
    at
org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
    at
org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    at
org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    at
org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    at
org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    at
org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
    at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.StackOverflowError
    at
org.mozilla.javascript.ScriptableObject.accessSlot(ScriptableObject.java:2134)
    at
org.mozilla.javascript.ScriptableObject.getSlot(ScriptableObject.java:2124)
    at
org.mozilla.javascript.ScriptableObject.putImpl(ScriptableObject.java:2017)
    at
org.mozilla.javascript.ScriptableObject.put(ScriptableObject.java:312)
    at
org.mozilla.javascript.IdScriptableObject.put(IdScriptableObject.java:419)
    at org.mozilla.javascript.Delegator.put(Delegator.java:149)
    at
org.mozilla.javascript.ScriptableObject.put(ScriptableObject.java:316)
    at
org.mozilla.javascript.IdScriptableObject.put(IdScriptableObject.java:419)

I wanted to override put method in Delegator and implement my functionality
in this place. Is there any other way to do it? I must be honset this my
first week with Rhino.

Regards,
Jarek
_______________________________________________
dev-tech-js-engine-rhino mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino

Reply via email to