From fc82ba4ec30463cb40ece917744ee304dadeabe8 Mon Sep 17 00:00:00 2001 From: Jannik Keye Date: Wed, 4 Jul 2018 12:56:37 +0200 Subject: [PATCH] feat: add Reflect.preventExtensions --- src/js.rs | 9 ++++++++ tests/all/js_globals/Reflect.rs | 41 +++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/src/js.rs b/src/js.rs index a85a879c..34f30169 100644 --- a/src/js.rs +++ b/src/js.rs @@ -1057,6 +1057,15 @@ extern "C" { /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys #[wasm_bindgen(static_method_of = Reflect, js_name = ownKeys, catch)] pub fn own_keys(target: &Object) -> Result; + + /// The static Reflect.preventExtensions() method prevents new + /// properties from ever being added to an object (i.e. prevents + /// future extensions to the object). It is similar to + /// Object.preventExtensions(), but with some differences. + /// + /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions + #[wasm_bindgen(static_method_of = Reflect, js_name = preventExtensions, catch)] + pub fn prevent_extensions(target: &Object) -> Result; } // Set diff --git a/tests/all/js_globals/Reflect.rs b/tests/all/js_globals/Reflect.rs index 1269f402..0ad3945f 100644 --- a/tests/all/js_globals/Reflect.rs +++ b/tests/all/js_globals/Reflect.rs @@ -528,4 +528,45 @@ fn own_keys() { "#, ) .test() +} + +#[test] +fn prevent_extensions() { + project() + .file( + "src/lib.rs", + r#" + #![feature(proc_macro, wasm_custom_section)] + + extern crate wasm_bindgen; + use wasm_bindgen::prelude::*; + use wasm_bindgen::js; + + #[wasm_bindgen] + pub fn prevent_extensions(target: &js::Object) -> JsValue { + let result = js::Reflect::prevent_extensions(target); + let result = match result { + Ok(val) => val, + Err(_err) => "TypeError".into() + }; + result + } + "#, + ) + .file( + "test.ts", + r#" + import * as assert from "assert"; + import * as wasm from "./out"; + + export function test() { + var object1 = {}; + + wasm.prevent_extensions(object1); + + assert.equal(Reflect.isExtensible(object1), false); + } + "#, + ) + .test() } \ No newline at end of file