1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-28 16:20:57 -05:00

feat(core): implement Deno.core.isProxy() (#12288)

This commit is contained in:
Aaron O'Mullan 2021-10-01 20:25:33 +02:00 committed by Bartek Iwańczuk
parent 2304a695f5
commit 7618546be2
No known key found for this signature in database
GPG key ID: 0C6BCDDC3B3AD750
2 changed files with 33 additions and 0 deletions

View file

@ -67,6 +67,9 @@ lazy_static::lazy_static! {
v8::ExternalReference {
function: get_proxy_details.map_fn_to()
},
v8::ExternalReference {
function: is_proxy.map_fn_to()
},
v8::ExternalReference {
function: memory_usage.map_fn_to(),
},
@ -151,6 +154,7 @@ pub fn initialize_context<'s>(
set_func(scope, core_val, "deserialize", deserialize);
set_func(scope, core_val, "getPromiseDetails", get_promise_details);
set_func(scope, core_val, "getProxyDetails", get_proxy_details);
set_func(scope, core_val, "isProxy", is_proxy);
set_func(scope, core_val, "memoryUsage", memory_usage);
set_func(scope, core_val, "callConsole", call_console);
set_func(scope, core_val, "createHostObject", create_host_object);
@ -1137,6 +1141,14 @@ fn get_proxy_details(
rv.set(to_v8(scope, p).unwrap());
}
fn is_proxy(
scope: &mut v8::HandleScope,
args: v8::FunctionCallbackArguments,
mut rv: v8::ReturnValue,
) {
rv.set(v8::Boolean::new(scope, args.get(0).is_proxy()).into())
}
fn throw_type_error(scope: &mut v8::HandleScope, message: impl AsRef<str>) {
let message = v8::String::new(scope, message.as_ref()).unwrap();
let exception = v8::Exception::type_error(scope, message);

View file

@ -2263,4 +2263,25 @@ assertEquals(1, notify_return_value);
let mut runtime = JsRuntime::new(options);
runtime.execute_script("<none>", "").unwrap();
}
#[test]
fn test_is_proxy() {
let mut runtime = JsRuntime::new(RuntimeOptions::default());
let all_true: v8::Global<v8::Value> = runtime
.execute_script(
"is_proxy.js",
r#"
(function () {
const { isProxy } = Deno.core;
const o = { a: 1, b: 2};
const p = new Proxy(o, {});
return isProxy(p) && !isProxy(o) && !isProxy(42);
})()
"#,
)
.unwrap();
let mut scope = runtime.handle_scope();
let all_true = v8::Local::<v8::Value>::new(&mut scope, &all_true);
assert!(all_true.is_true());
}
}