Skip to content

Commit 9e01e67

Browse files
authored
Merge pull request #289 from wismer/array-iterator-method-bindings
Array iterator method bindings
2 parents 22feded + a95476a commit 9e01e67

File tree

3 files changed

+87
-0
lines changed

3 files changed

+87
-0
lines changed

src/js.rs

+17
Original file line numberDiff line numberDiff line change
@@ -195,5 +195,22 @@ extern {
195195
/// http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
196196
#[wasm_bindgen(method)]
197197
pub fn includes(this: &Array, value: JsValue, from_index: i32) -> bool;
198+
}
198199

200+
// Array Iterator
201+
#[wasm_bindgen]
202+
extern {
203+
pub type ArrayIterator;
204+
205+
/// The keys() method returns a new Array Iterator object that contains the keys for each index in the array.
206+
///
207+
/// http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/keys
208+
#[wasm_bindgen(method)]
209+
pub fn keys(this: &Array) -> ArrayIterator;
210+
211+
/// The entries() method returns a new Array Iterator object that contains the key/value pairs for each index in the array.
212+
///
213+
/// http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries
214+
#[wasm_bindgen(method)]
215+
pub fn entries(this: &Array) -> ArrayIterator;
199216
}

tests/all/js_globals/ArrayIterator.rs

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#![allow(non_snake_case)]
2+
3+
use project;
4+
5+
#[test]
6+
fn keys() {
7+
project()
8+
.file("src/lib.rs", r#"
9+
#![feature(proc_macro, wasm_custom_section)]
10+
11+
extern crate wasm_bindgen;
12+
use wasm_bindgen::prelude::*;
13+
use wasm_bindgen::js;
14+
15+
#[wasm_bindgen]
16+
pub fn get_keys(this: &js::Array) -> js::ArrayIterator {
17+
this.keys()
18+
}
19+
20+
"#)
21+
.file("test.ts", r#"
22+
import * as assert from "assert";
23+
import * as wasm from "./out";
24+
25+
export function test() {
26+
let characters = [8, 5, 4, 3, 1, 2]
27+
let iterator = characters.keys();
28+
let wasmIterator = wasm.get_keys(characters);
29+
30+
assert.equal(iterator.toString(), wasmIterator.toString());
31+
assert.equal(Array.from(iterator)[0], Array.from(wasmIterator)[0]);
32+
}
33+
"#)
34+
.test()
35+
}
36+
37+
#[test]
38+
fn entries() {
39+
project()
40+
.file("src/lib.rs", r#"
41+
#![feature(proc_macro, wasm_custom_section)]
42+
43+
extern crate wasm_bindgen;
44+
use wasm_bindgen::prelude::*;
45+
use wasm_bindgen::js;
46+
47+
#[wasm_bindgen]
48+
pub fn get_entries(this: &js::Array) -> js::ArrayIterator {
49+
this.entries()
50+
}
51+
52+
"#)
53+
.file("test.ts", r#"
54+
import * as assert from "assert";
55+
import * as wasm from "./out";
56+
57+
export function test() {
58+
let characters = [8, 5, 4, 3, 1, 2]
59+
let iterator = characters.entries();
60+
let wasmIterator = wasm.get_entries(characters);
61+
let jsItem = iterator.next();
62+
let wasmItem = wasmIterator.next();
63+
64+
assert.equal(iterator.toString(), wasmIterator.toString());
65+
assert.equal(jsItem.value[1], wasmItem.value[1]);
66+
}
67+
"#)
68+
.test()
69+
}

tests/all/js_globals/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use super::project;
44

55
mod Object;
66
mod Array;
7+
mod ArrayIterator;
78

89
#[test]
910
#[cfg(feature = "std")]

0 commit comments

Comments
 (0)