Merge pull request #854 from brisad/object-bindings

Add the last four bindings for Object
This commit is contained in:
Nick Fitzgerald 2018-09-19 13:16:33 -07:00 committed by GitHub
commit b36708fd85
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 74 additions and 0 deletions

View File

@ -2014,6 +2014,16 @@ extern "C" {
#[wasm_bindgen(static_method_of = Object, js_name = defineProperties)]
pub fn define_properties(obj: &Object, props: &Object) -> Object;
/// The Object.entries() method returns an array of a given
/// object's own enumerable property [key, value] pairs, in the
/// same order as that provided by a for...in loop (the difference
/// being that a for-in loop enumerates properties in the
/// prototype chain as well).
///
/// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries)
#[wasm_bindgen(static_method_of = Object)]
pub fn entries(object: &Object) -> Array;
/// 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,
@ -2040,6 +2050,29 @@ extern "C" {
#[wasm_bindgen(static_method_of = Object, js_name = getOwnPropertyDescriptors)]
pub fn get_own_property_descriptors(obj: &Object) -> JsValue;
/// The Object.getOwnPropertyNames() method returns an array of
/// all properties (including non-enumerable properties except for
/// those which use Symbol) found directly upon a given object.
///
/// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames)
#[wasm_bindgen(static_method_of = Object, js_name = getOwnPropertyNames)]
pub fn get_own_property_names(obj: &Object) -> Array;
/// The Object.getOwnPropertySymbols() method returns an array of
/// all symbol properties found directly upon a given object.
///
/// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols)
#[wasm_bindgen(static_method_of = Object, js_name = getOwnPropertySymbols)]
pub fn get_own_property_symbols(obj: &Object) -> Array;
/// The Object.getPrototypeOf() method returns the prototype
/// (i.e. the value of the internal [[Prototype]] property) of the
/// specified object.
///
/// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf)
#[wasm_bindgen(static_method_of = Object, js_name = getPrototypeOf)]
pub fn get_prototype_of(obj: &JsValue) -> Object;
/// The `hasOwnProperty()` method returns a boolean indicating whether the
/// object has the specified property as its own property (as opposed to
/// inheriting it).

View File

@ -10,6 +10,11 @@ extern "C" {
#[wasm_bindgen(method, setter, structural)]
fn set_foo(this: &Foo42, val: JsValue);
#[wasm_bindgen(js_name = prototype, js_namespace = Object)]
static OBJECT_PROTOTYPE: JsValue;
#[wasm_bindgen(js_name = prototype, js_namespace = Array)]
static ARRAY_PROTOTYPE: JsValue;
type DefinePropertyAttrs;
#[wasm_bindgen(method, setter, structural)]
fn set_value(this: &DefinePropertyAttrs, val: &JsValue);
@ -105,6 +110,19 @@ fn define_properties() {
assert!(foo.has_own_property(&"car".into()));
}
#[wasm_bindgen_test]
fn entries() {
let entries = Object::entries(&foo_42());
assert_eq!(entries.length(), 1);
entries.for_each(&mut |x, _, _| {
assert!(x.is_object());
let array: Array = x.into();
assert_eq!(array.shift(), "foo");
assert_eq!(array.shift(), 42);
assert_eq!(array.length(), 0);
});
}
#[wasm_bindgen_test]
fn get_own_property_descriptor() {
let foo = foo_42();
@ -122,6 +140,29 @@ fn get_own_property_descriptors() {
assert_eq!(PropertyDescriptor::from(foo_desc).value(), 42);
}
#[wasm_bindgen_test]
fn get_own_property_names() {
let names = Object::get_own_property_names(&foo_42());
assert_eq!(names.length(), 1);
names.for_each(&mut |x, _, _| {
assert_eq!(x, "foo");
});
}
#[wasm_bindgen_test]
fn get_own_property_symbols() {
let symbols = Object::get_own_property_symbols(&map_with_symbol_key());
assert_eq!(symbols.length(), 1);
}
#[wasm_bindgen_test]
fn get_prototype_of() {
let proto = JsValue::from(Object::get_prototype_of(&Object::new().into()));
assert_eq!(proto, *OBJECT_PROTOTYPE);
let proto = JsValue::from(Object::get_prototype_of(&Array::new().into()));
assert_eq!(proto, *ARRAY_PROTOTYPE);
}
#[wasm_bindgen_test]
fn has_own_property() {
assert!(foo_42().has_own_property(&"foo".into()));