mirror of https://github.com/pyodide/pyodide.git
Filter integers out of dir(js_array) (#1321)
This commit is contained in:
parent
de7c342010
commit
4c6c27dfd4
|
@ -349,7 +349,14 @@ EM_JS_REF(JsRef, hiwire_dir, (JsRef idobj), {
|
|||
let jsobj = Module.hiwire.get_value(idobj);
|
||||
let result = [];
|
||||
do {
|
||||
result.push(... Object.getOwnPropertyNames(jsobj));
|
||||
// clang-format off
|
||||
result.push(... Object.getOwnPropertyNames(jsobj).filter(
|
||||
s => {
|
||||
let c = s.charCodeAt(0);
|
||||
return c < 48 || c > 57; /* Filter out integer array indices */
|
||||
}
|
||||
));
|
||||
// clang-format on
|
||||
} while (jsobj = Object.getPrototypeOf(jsobj));
|
||||
return Module.hiwire.new_value(result);
|
||||
});
|
||||
|
|
|
@ -38,6 +38,28 @@ def test_jsproxy_dir(selenium):
|
|||
assert set1.issuperset(jsproxy_items)
|
||||
assert set1.issuperset(callable_items)
|
||||
assert set1.isdisjoint(a_items)
|
||||
selenium.run_js(
|
||||
"""
|
||||
window.a = [0,1,2,3,4,5,6,7,8,9];
|
||||
a[27] = 0;
|
||||
a[":"] = 0;
|
||||
a["/"] = 0;
|
||||
a.abcd = 0;
|
||||
a.α = 0;
|
||||
|
||||
pyodide.runPython(`
|
||||
from js import a
|
||||
d = dir(a)
|
||||
assert '0' not in d
|
||||
assert '9' not in d
|
||||
assert '27' not in d
|
||||
assert ':' in d
|
||||
assert '/' in d
|
||||
assert 'abcd' in d
|
||||
assert 'α' in d
|
||||
`);
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
def test_jsproxy_getattr(selenium):
|
||||
|
|
Loading…
Reference in New Issue