Skip to content

Commit b81dc46

Browse files
committed
String - substr() support
1 parent 7936e1e commit b81dc46

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

src/js.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,14 @@ extern {
340340
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice
341341
#[wasm_bindgen(method, js_class = "String")]
342342
pub fn slice(this: &JsString, start: u32, end: u32) -> JsString;
343+
344+
/// The substr() method returns the part of a string between
345+
/// the start index and a number of characters after it.
346+
///
347+
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr
348+
/// TODO: Add `NaN` and `undefined` support
349+
#[wasm_bindgen(method, js_class = "String")]
350+
pub fn substr(this: &JsString, start: i32, length: i32) -> JsString;
343351
}
344352

345353
impl<'a> From<&'a str> for JsString {

tests/all/js_globals/JsString.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,39 @@ fn slice() {
3030
"#)
3131
.test()
3232
}
33+
34+
#[test]
35+
fn substr() {
36+
project()
37+
.file("src/lib.rs", r#"
38+
#![feature(proc_macro, wasm_custom_section)]
39+
40+
extern crate wasm_bindgen;
41+
use wasm_bindgen::prelude::*;
42+
use wasm_bindgen::js;
43+
44+
#[wasm_bindgen]
45+
pub fn create_substr(this: &js::JsString, start: i32, length: i32) -> js::JsString {
46+
this.substr(start, length)
47+
}
48+
"#)
49+
.file("test.ts", r#"
50+
import * as assert from "assert";
51+
import * as wasm from "./out";
52+
53+
export function test() {
54+
let aString = "Mozilla";
55+
56+
assert.equal(wasm.create_substr(aString, 0, 1), "M");
57+
assert.equal(wasm.create_substr(aString, 1, 0), "");
58+
assert.equal(wasm.create_substr(aString, -1, 1), "a");
59+
assert.equal(wasm.create_substr(aString, 1, -1), "");
60+
// TODO: Uncomment and test these assertions, once we have support for optional parameters
61+
// assert.equal(wasm.create_substr(aString, -3), "lla");
62+
// assert.equal(wasm.create_substr(aString, 1), "ozilla");
63+
assert.equal(wasm.create_substr(aString, -20, 2), "Mo");
64+
assert.equal(wasm.create_substr(aString, 20, 2), "");
65+
}
66+
"#)
67+
.test()
68+
}

0 commit comments

Comments
 (0)