mirror of
https://github.com/rustwasm/wasm-bindgen.git
synced 2024-11-28 23:14:12 +03:00
Port Proxy
tests to wasm
This commit is contained in:
parent
01ff04d85c
commit
ad86c52b02
@ -1,76 +0,0 @@
|
|||||||
#![allow(non_snake_case)]
|
|
||||||
|
|
||||||
use project;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn new() {
|
|
||||||
project()
|
|
||||||
.file("src/lib.rs", r#"
|
|
||||||
#![feature(use_extern_macros)]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen;
|
|
||||||
extern crate js_sys;
|
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
#[wasm_bindgen]
|
|
||||||
pub fn new_proxy(target: JsValue, handler: js_sys::Object) -> js_sys::Proxy {
|
|
||||||
js_sys::Proxy::new(&target, &handler)
|
|
||||||
}
|
|
||||||
"#)
|
|
||||||
.file("test.js", r#"
|
|
||||||
import * as assert from "assert";
|
|
||||||
import * as wasm from "./out";
|
|
||||||
|
|
||||||
export function test() {
|
|
||||||
const target = { a: 100 };
|
|
||||||
const handler = {
|
|
||||||
get: function(obj, prop) {
|
|
||||||
return prop in obj ? obj[prop] : 37;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const proxy = wasm.new_proxy(target, handler);
|
|
||||||
assert.equal(proxy.a, 100);
|
|
||||||
assert.equal(proxy.b, 37);
|
|
||||||
}
|
|
||||||
"#)
|
|
||||||
.test()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn revocable() {
|
|
||||||
project()
|
|
||||||
.file("src/lib.rs", r#"
|
|
||||||
#![feature(use_extern_macros)]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen;
|
|
||||||
extern crate js_sys;
|
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
#[wasm_bindgen]
|
|
||||||
pub fn new_revocable_proxy(target: JsValue, handler: js_sys::Object) -> js_sys::Object {
|
|
||||||
js_sys::Proxy::revocable(&target, &handler)
|
|
||||||
}
|
|
||||||
"#)
|
|
||||||
.file("test.js", r#"
|
|
||||||
import * as assert from "assert";
|
|
||||||
import * as wasm from "./out";
|
|
||||||
|
|
||||||
export function test() {
|
|
||||||
const target = { a: 100 };
|
|
||||||
const handler = {
|
|
||||||
get: function(obj, prop) {
|
|
||||||
return prop in obj ? obj[prop] : 37;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const { proxy, revoke } =
|
|
||||||
wasm.new_revocable_proxy(target, handler);
|
|
||||||
assert.equal(proxy.a, 100);
|
|
||||||
assert.equal(proxy.b, 37);
|
|
||||||
revoke();
|
|
||||||
assert.throws(() => { proxy.a }, TypeError);
|
|
||||||
assert.throws(() => { proxy.b }, TypeError);
|
|
||||||
assert.equal(typeof proxy, "object");
|
|
||||||
}
|
|
||||||
"#)
|
|
||||||
.test()
|
|
||||||
}
|
|
@ -11,7 +11,6 @@ fn project() -> project_builder::Project {
|
|||||||
// Keep these tests in alphabetical order, just like the imports in `src/js.rs`.
|
// Keep these tests in alphabetical order, just like the imports in `src/js.rs`.
|
||||||
|
|
||||||
mod ArrayIterator;
|
mod ArrayIterator;
|
||||||
mod Proxy;
|
|
||||||
mod Reflect;
|
mod Reflect;
|
||||||
mod Set;
|
mod Set;
|
||||||
mod SetIterator;
|
mod SetIterator;
|
||||||
|
11
crates/js-sys/tests/wasm/Proxy.js
Normal file
11
crates/js-sys/tests/wasm/Proxy.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
exports.proxy_target = function() {
|
||||||
|
return { a: 100 };
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.proxy_handler = function() {
|
||||||
|
return {
|
||||||
|
get: function(obj, prop) {
|
||||||
|
return prop in obj ? obj[prop] : 37;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
46
crates/js-sys/tests/wasm/Proxy.rs
Normal file
46
crates/js-sys/tests/wasm/Proxy.rs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
use wasm_bindgen_test::*;
|
||||||
|
use js_sys::*;
|
||||||
|
|
||||||
|
#[wasm_bindgen(module = "tests/wasm/Proxy.js", version = "*")]
|
||||||
|
extern {
|
||||||
|
fn proxy_target() -> JsValue;
|
||||||
|
fn proxy_handler() -> Object;
|
||||||
|
|
||||||
|
type Custom;
|
||||||
|
#[wasm_bindgen(method, getter, structural, catch)]
|
||||||
|
fn a(this: &Custom) -> Result<u32, JsValue>;
|
||||||
|
#[wasm_bindgen(method, getter, structural, catch)]
|
||||||
|
fn b(this: &Custom) -> Result<u32, JsValue>;
|
||||||
|
|
||||||
|
|
||||||
|
type RevocableResult;
|
||||||
|
#[wasm_bindgen(method, getter, structural)]
|
||||||
|
fn proxy(this: &RevocableResult) -> JsValue;
|
||||||
|
#[wasm_bindgen(method, getter, structural)]
|
||||||
|
fn revoke(this: &RevocableResult) -> Function;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn new() {
|
||||||
|
let proxy = Proxy::new(&proxy_target(), &proxy_handler());
|
||||||
|
let proxy = Custom::from(JsValue::from(proxy));
|
||||||
|
assert_eq!(proxy.a().unwrap(), 100);
|
||||||
|
assert_eq!(proxy.b().unwrap(), 37);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn revocable() {
|
||||||
|
let result = Proxy::revocable(&proxy_target(), &proxy_handler());
|
||||||
|
let result = RevocableResult::from(JsValue::from(result));
|
||||||
|
let proxy = result.proxy();
|
||||||
|
let revoke = result.revoke();
|
||||||
|
|
||||||
|
let obj = Custom::from(proxy);
|
||||||
|
assert_eq!(obj.a().unwrap(), 100);
|
||||||
|
assert_eq!(obj.b().unwrap(), 37);
|
||||||
|
revoke.apply(&JsValue::undefined(), &Array::new()).unwrap();
|
||||||
|
assert!(obj.a().is_err());
|
||||||
|
assert!(obj.b().is_err());
|
||||||
|
assert!(JsValue::from(obj).is_object());
|
||||||
|
}
|
@ -22,3 +22,4 @@ pub mod MapIterator;
|
|||||||
pub mod Math;
|
pub mod Math;
|
||||||
pub mod Number;
|
pub mod Number;
|
||||||
pub mod Object;
|
pub mod Object;
|
||||||
|
pub mod Proxy;
|
||||||
|
Loading…
Reference in New Issue
Block a user