Skip to content

Commit

Permalink
js-sys: add Object.fromEntries
Browse files Browse the repository at this point in the history
  • Loading branch information
bakkot committed Apr 14, 2019
1 parent 744b031 commit 2bc948f
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
7 changes: 7 additions & 0 deletions crates/js-sys/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1993,6 +1993,13 @@ extern "C" {
#[wasm_bindgen(static_method_of = Object)]
pub fn freeze(value: &Object) -> Object;

/// The Object.fromEntries() method transforms a list of key-value pairs
/// into an object.
///
/// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries)
#[wasm_bindgen(static_method_of = Object, catch, js_name = fromEntries)]
pub fn from_entries(iterable: &JsValue) -> Result<Object, JsValue>;

/// The Object.getOwnPropertyDescriptor() method returns a
/// property descriptor for an own property (that is, one directly
/// present on an object and not in the object's prototype chain)
Expand Down
19 changes: 19 additions & 0 deletions crates/js-sys/tests/wasm/Object.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,25 @@ fn entries() {
});
}

#[wasm_bindgen_test]
fn from_entries() {
let array = Array::new();
let entry_one = Array::new();
let entry_two = Array::new();
entry_one.push(&"foo".into());
entry_one.push(&"bar".into());
entry_two.push(&"baz".into());
entry_two.push(&42.into());
let object = Object::from_entries(&array).unwrap();

assert_eq!(Reflect::get(object.as_ref(), &"foo".into()).unwrap(), "bar");
assert_eq!(Reflect::get(object.as_ref(), &"baz".into()).unwrap(), 42);

let not_iterable = Object::new();
let error = Object::from_entries(&not_iterable).unwrap_err();
assert!(error.is_instance_of::<TypeError>());
}

#[wasm_bindgen_test]
fn get_own_property_descriptor() {
let foo = foo_42();
Expand Down

0 comments on commit 2bc948f

Please sign in to comment.