Skip to content

Commit bae324c

Browse files
brisadalexcrichton
authored andcommitted
Add Array.prototype.values binding (#395)
1 parent 21cb50e commit bae324c

File tree

2 files changed

+52
-6
lines changed

2 files changed

+52
-6
lines changed

src/js.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,13 @@ extern "C" {
339339
/// http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries
340340
#[wasm_bindgen(method)]
341341
pub fn entries(this: &Array) -> ArrayIterator;
342+
343+
/// The values() method returns a new Array Iterator object that
344+
/// contains the values for each index in the array.
345+
///
346+
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values
347+
#[wasm_bindgen(method)]
348+
pub fn values(this: &Array) -> ArrayIterator;
342349
}
343350

344351
// Boolean

tests/all/js_globals/ArrayIterator.rs

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ fn keys() {
2828
import * as wasm from "./out";
2929
3030
export function test() {
31-
let characters = [8, 5, 4, 3, 1, 2]
32-
let iterator = characters.keys();
33-
let wasmIterator = wasm.get_keys(characters);
31+
let numbers = [8, 5, 4, 3, 1, 2];
32+
let iterator = numbers.keys();
33+
let wasmIterator = wasm.get_keys(numbers);
3434
3535
assert.equal(iterator.toString(), wasmIterator.toString());
3636
assert.equal(Array.from(iterator)[0], Array.from(wasmIterator)[0]);
@@ -66,9 +66,9 @@ fn entries() {
6666
import * as wasm from "./out";
6767
6868
export function test() {
69-
let characters = [8, 5, 4, 3, 1, 2]
70-
let iterator = characters.entries();
71-
let wasmIterator = wasm.get_entries(characters);
69+
let numbers = [8, 5, 4, 3, 1, 2];
70+
let iterator = numbers.entries();
71+
let wasmIterator = wasm.get_entries(numbers);
7272
let jsItem = iterator.next();
7373
let wasmItem = wasmIterator.next();
7474
@@ -79,3 +79,42 @@ fn entries() {
7979
)
8080
.test()
8181
}
82+
83+
#[test]
84+
fn values() {
85+
project()
86+
.headless(true) // Node.js does not have values()
87+
.file(
88+
"src/lib.rs",
89+
r#"
90+
#![feature(proc_macro, wasm_custom_section)]
91+
92+
extern crate wasm_bindgen;
93+
use wasm_bindgen::prelude::*;
94+
use wasm_bindgen::js;
95+
96+
#[wasm_bindgen]
97+
pub fn get_values(this: &js::Array) -> js::ArrayIterator {
98+
this.values()
99+
}
100+
"#,
101+
)
102+
.file(
103+
"test.js",
104+
r#"
105+
import * as assert from "assert";
106+
import * as wasm from "./out";
107+
108+
export function test() {
109+
let numbers = [8, 3, 2];
110+
let wasmIterator = wasm.get_values(numbers);
111+
112+
assert.equal(wasmIterator.next().value, 8);
113+
assert.equal(wasmIterator.next().value, 3);
114+
assert.equal(wasmIterator.next().value, 2);
115+
assert.ok(wasmIterator.next().done);
116+
}
117+
"#,
118+
)
119+
.test()
120+
}

0 commit comments

Comments
 (0)