1 #![cfg(target_arch = "wasm32")]
2 
3 extern crate js_sys;
4 extern crate wasm_bindgen;
5 extern crate wasm_bindgen_test;
6 
7 use js_sys::Array;
8 use wasm_bindgen::prelude::*;
9 use wasm_bindgen_test::*;
10 
11 wasm_bindgen_test_configure!(run_in_browser);
12 
13 #[wasm_bindgen(module = "/tests/headless.js")]
14 extern "C" {
is_array_values_supported() -> bool15     fn is_array_values_supported() -> bool;
16 }
17 
18 #[wasm_bindgen]
19 extern "C" {
20     type ValuesIterator;
21     #[wasm_bindgen(method, structural)]
next(this: &ValuesIterator) -> IterNext22     fn next(this: &ValuesIterator) -> IterNext;
23 
24     type IterNext;
25 
26     #[wasm_bindgen(method, getter, structural)]
value(this: &IterNext) -> JsValue27     fn value(this: &IterNext) -> JsValue;
28     #[wasm_bindgen(method, getter, structural)]
done(this: &IterNext) -> bool29     fn done(this: &IterNext) -> bool;
30 }
31 
32 #[wasm_bindgen_test]
array_iterator_values()33 fn array_iterator_values() {
34     if !is_array_values_supported() {
35         return;
36     }
37     let array = Array::new();
38     array.push(&8.into());
39     array.push(&3.into());
40     array.push(&2.into());
41     let iter = ValuesIterator::from(JsValue::from(array.values()));
42 
43     assert_eq!(iter.next().value(), 8);
44     assert_eq!(iter.next().value(), 3);
45     assert_eq!(iter.next().value(), 2);
46     assert!(iter.next().done());
47 }
48