From adad606ee3bba6a448361f6ae1196ffea623a13c Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Fri, 10 Aug 2018 11:49:22 -0700 Subject: [PATCH] js-sys: Add bindings for `Object.create` --- crates/js-sys/src/lib.rs | 7 +++++++ crates/js-sys/tests/wasm/Object.rs | 22 ++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/crates/js-sys/src/lib.rs b/crates/js-sys/src/lib.rs index dfb45d66..c3091332 100644 --- a/crates/js-sys/src/lib.rs +++ b/crates/js-sys/src/lib.rs @@ -1914,6 +1914,13 @@ extern "C" { #[wasm_bindgen(static_method_of = Object, js_name = assign)] pub fn assign3(target: &Object, source1: &Object, source2: &Object, source3: &Object) -> Object; + /// The Object.create() method creates a new object, using an existing + /// object to provide the newly created object's prototype. + /// + /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create + #[wasm_bindgen(static_method_of = Object)] + pub fn create(prototype: &Object) -> Object; + /// The `Object.freeze()` method freezes an object: that is, prevents new /// properties from being added to it; prevents existing properties from /// being removed; and prevents existing properties, or their enumerability, diff --git a/crates/js-sys/tests/wasm/Object.rs b/crates/js-sys/tests/wasm/Object.rs index ee448ea8..97cc7b6a 100644 --- a/crates/js-sys/tests/wasm/Object.rs +++ b/crates/js-sys/tests/wasm/Object.rs @@ -1,17 +1,18 @@ -use wasm_bindgen::prelude::*; -use wasm_bindgen_test::*; -use std::f64::NAN; use js_sys::*; +use std::f64::NAN; +use wasm_bindgen::prelude::*; +use wasm_bindgen::JsCast; +use wasm_bindgen_test::*; #[wasm_bindgen] -extern { +extern "C" { type Foo42; #[wasm_bindgen(method, setter, structural)] fn set_foo(this: &Foo42, val: JsValue); } #[wasm_bindgen(module = "tests/wasm/Object.js")] -extern { +extern "C" { fn map_with_symbol_key() -> Object; fn symbol_key() -> JsValue; @@ -36,7 +37,6 @@ fn new() { assert!(JsValue::from(Object::new()).is_object()); } - #[wasm_bindgen_test] fn assign() { let a = JsValue::from("a"); @@ -63,6 +63,16 @@ fn assign() { assert_eq!(Reflect::get(target.as_ref(), &c), c); } +#[wasm_bindgen_test] +fn create() { + let array_proto = eval("Array.prototype") + .unwrap() + .dyn_into::() + .unwrap(); + let my_array = Object::create(&array_proto); + assert!(my_array.is_instance_of::()); +} + #[wasm_bindgen_test] fn has_own_property() { assert!(foo_42().has_own_property(&"foo".into()));