mirror of
https://github.com/rustwasm/wasm-bindgen.git
synced 2024-12-25 11:02:11 +03:00
Merge pull request #359 from akryvomaz/master
bindings for Function.prototype.bind, decodeURIComponent, encodeURIComponent
This commit is contained in:
commit
bfffd58683
23
src/js.rs
23
src/js.rs
@ -49,6 +49,13 @@ extern "C" {
|
|||||||
#[wasm_bindgen(catch, js_name = decodeURI)]
|
#[wasm_bindgen(catch, js_name = decodeURI)]
|
||||||
pub fn decode_uri(encoded: &str) -> Result<JsString, JsValue>;
|
pub fn decode_uri(encoded: &str) -> Result<JsString, JsValue>;
|
||||||
|
|
||||||
|
/// The decodeURIComponent() function decodes a Uniform Resource Identifier (URI) component
|
||||||
|
/// previously created by encodeURIComponent or by a similar routine.
|
||||||
|
///
|
||||||
|
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent
|
||||||
|
#[wasm_bindgen(catch, js_name = decodeURIComponent)]
|
||||||
|
pub fn decode_uri_component(encoded: &str) -> Result<JsString, JsValue>;
|
||||||
|
|
||||||
/// The `encodeURI()` function encodes a Uniform Resource Identifier (URI)
|
/// The `encodeURI()` function encodes a Uniform Resource Identifier (URI)
|
||||||
/// by replacing each instance of certain characters by one, two, three, or
|
/// by replacing each instance of certain characters by one, two, three, or
|
||||||
/// four escape sequences representing the UTF-8 encoding of the character
|
/// four escape sequences representing the UTF-8 encoding of the character
|
||||||
@ -59,6 +66,15 @@ extern "C" {
|
|||||||
#[wasm_bindgen(js_name = encodeURI)]
|
#[wasm_bindgen(js_name = encodeURI)]
|
||||||
pub fn encode_uri(decoded: &str) -> JsString;
|
pub fn encode_uri(decoded: &str) -> JsString;
|
||||||
|
|
||||||
|
/// The encodeURIComponent() function encodes a Uniform Resource Identifier (URI) component
|
||||||
|
/// by replacing each instance of certain characters by one, two, three, or four escape sequences
|
||||||
|
/// representing the UTF-8 encoding of the character
|
||||||
|
/// (will only be four escape sequences for characters composed of two "surrogate" characters).
|
||||||
|
///
|
||||||
|
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
|
||||||
|
#[wasm_bindgen(js_name = encodeURIComponent)]
|
||||||
|
pub fn encode_uri_component(decoded: &str) -> JsString;
|
||||||
|
|
||||||
/// The `eval()` function evaluates JavaScript code represented as a string.
|
/// The `eval()` function evaluates JavaScript code represented as a string.
|
||||||
///
|
///
|
||||||
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval
|
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval
|
||||||
@ -325,6 +341,13 @@ extern "C" {
|
|||||||
#[wasm_bindgen(method)]
|
#[wasm_bindgen(method)]
|
||||||
pub fn apply(this: &Function, context: &JsValue, args: &Array) -> Function;
|
pub fn apply(this: &Function, context: &JsValue, args: &Array) -> Function;
|
||||||
|
|
||||||
|
/// The bind() method creates a new function that, when called, has its this keyword set to the provided value,
|
||||||
|
/// with a given sequence of arguments preceding any provided when the new function is called.
|
||||||
|
///
|
||||||
|
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
|
||||||
|
#[wasm_bindgen(method)]
|
||||||
|
pub fn bind(this: &Function, context: &JsValue) -> Function;
|
||||||
|
|
||||||
/// The length property indicates the number of arguments expected by the function.
|
/// The length property indicates the number of arguments expected by the function.
|
||||||
///
|
///
|
||||||
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length
|
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length
|
||||||
|
@ -38,6 +38,46 @@ fn apply() {
|
|||||||
.test()
|
.test()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn bind() {
|
||||||
|
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 bind(this: &js::Function, context: &JsValue) -> js::Function {
|
||||||
|
this.bind(context)
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.file(
|
||||||
|
"test.ts",
|
||||||
|
r#"
|
||||||
|
import * as assert from "assert";
|
||||||
|
import * as wasm from "./out";
|
||||||
|
|
||||||
|
export function test() {
|
||||||
|
const obj = {
|
||||||
|
a: 0,
|
||||||
|
fn: function () {
|
||||||
|
return this.a + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const boundFn = wasm.bind(obj.fn, { a: 41 });
|
||||||
|
assert.equal(boundFn(), 42);
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.test()
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn length() {
|
fn length() {
|
||||||
project()
|
project()
|
||||||
|
@ -6,8 +6,8 @@ mod Array;
|
|||||||
mod ArrayIterator;
|
mod ArrayIterator;
|
||||||
mod Boolean;
|
mod Boolean;
|
||||||
mod Date;
|
mod Date;
|
||||||
mod Function;
|
|
||||||
mod Error;
|
mod Error;
|
||||||
|
mod Function;
|
||||||
mod JsString;
|
mod JsString;
|
||||||
mod Map;
|
mod Map;
|
||||||
mod MapIterator;
|
mod MapIterator;
|
||||||
@ -47,6 +47,32 @@ fn decode_uri() {
|
|||||||
.test();
|
.test();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn decode_uri_component() {
|
||||||
|
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 test() {
|
||||||
|
let x = js::decode_uri_component("%3Fx%3Dtest")
|
||||||
|
.ok()
|
||||||
|
.expect("should decode URI OK");
|
||||||
|
assert_eq!(String::from(x), "?x=test");
|
||||||
|
|
||||||
|
assert!(js::decode_uri_component("%E0%A4%A").is_err());
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.test();
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
fn encode_uri() {
|
fn encode_uri() {
|
||||||
@ -70,6 +96,28 @@ fn encode_uri() {
|
|||||||
.test();
|
.test();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn encode_uri_component() {
|
||||||
|
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 test() {
|
||||||
|
let x = js::encode_uri_component("?x=шеллы");
|
||||||
|
assert_eq!(String::from(x), "%3Fx%3D%D1%88%D0%B5%D0%BB%D0%BB%D1%8B");
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.test();
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn eval() {
|
fn eval() {
|
||||||
project()
|
project()
|
||||||
|
Loading…
Reference in New Issue
Block a user