-
Notifications
You must be signed in to change notification settings - Fork 850
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
384 - member box call error #353
Changes from 4 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
/* This Source Code Form is subject to the terms of the Mozilla Public | ||
* License, v. 2.0. If a copy of the MPL was not distributed with this | ||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | ||
|
||
package org.mozilla.javascript.tests; | ||
|
||
import org.junit.Test; | ||
import org.junit.Before; | ||
import static org.junit.Assert.assertEquals; | ||
import static org.junit.Assert.assertNull; | ||
|
||
import org.mozilla.javascript.*; | ||
import org.mozilla.javascript.annotations.*; | ||
|
||
public class MemberBoxCallTest { | ||
|
||
Scriptable scope; | ||
|
||
@Test | ||
public void testPrototypeProperty() { | ||
Context cx = Context.enter(); | ||
try { | ||
assertEquals(evaluate(cx, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I see a few of properties and functions on "AnnotatedHostObject," but it looks like this test is only checking for "foo." Is there a reason why we can't test the other properties? Similarly, are you sure that all the code paths in ScriptableObject are being exercised here for both Member and MemberBox? |
||
"var hostObj = new AnnotatedHostObject(); " + | ||
"var valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(hostObj), \"foo\");" + | ||
"var result = 'failed';" + | ||
"if( valueProperty.get && valueProperty.set ) {" + | ||
"valueProperty.set.call(hostObj, 'superVal');" + | ||
"result = valueProperty.get.call(hostObj);" + | ||
"}"+ | ||
"result;"), "SUPERVAL"); | ||
} finally { | ||
Context.exit(); | ||
} | ||
} | ||
|
||
private Object evaluate(Context cx, String str) { | ||
return cx.evaluateString(scope, str, "<testsrc>", 0, null); | ||
} | ||
|
||
|
||
@Before | ||
public void init() throws Exception { | ||
Context cx = Context.enter(); | ||
try { | ||
scope = cx.initStandardObjects(); | ||
ScriptableObject.defineClass(scope, AnnotatedHostObject.class); | ||
} finally { | ||
Context.exit(); | ||
} | ||
} | ||
|
||
public static class AnnotatedHostObject extends ScriptableObject { | ||
|
||
String foo, bar = "bar"; | ||
|
||
public AnnotatedHostObject() {} | ||
|
||
@Override | ||
public String getClassName() { | ||
return "AnnotatedHostObject"; | ||
} | ||
|
||
@JSConstructor | ||
public void jsConstructorMethod() { | ||
put("initialized", this, Boolean.TRUE); | ||
} | ||
|
||
@JSFunction | ||
public Object instanceFunction() { | ||
return "instanceFunction"; | ||
} | ||
|
||
@JSFunction("namedFunction") | ||
public Object someFunctionName() { | ||
return "namedFunction"; | ||
} | ||
|
||
@JSStaticFunction | ||
public static Object staticFunction() { | ||
return "staticFunction"; | ||
} | ||
|
||
@JSStaticFunction("namedStaticFunction") | ||
public static Object someStaticFunctionName() { | ||
return "namedStaticFunction"; | ||
} | ||
|
||
@JSGetter | ||
public String getFoo() { | ||
return foo; | ||
} | ||
|
||
@JSSetter | ||
public void setFoo(String foo) { | ||
this.foo = foo.toUpperCase(); | ||
} | ||
|
||
@JSGetter("bar") | ||
public String getMyBar() { | ||
return bar; | ||
} | ||
|
||
public void setBar(String bar) { | ||
this.bar = bar.toUpperCase(); | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sadly there is not a single code style for this huge, old code base, but generally we follow the style of the code "around us" when making a change. You can see that this change is pretty different from other Rhino code. Specifically:
(I also think this is why the Travis CI build is failing for this PR.)