1 use js_sys::*;
2 use wasm_bindgen::prelude::*;
3 use wasm_bindgen::JsCast;
4 use wasm_bindgen_test::*;
5 
6 #[wasm_bindgen(module = "tests/wasm/Generator.js")]
7 extern "C" {
one_two_generator() -> Generator8     fn one_two_generator() -> Generator;
dummy_generator() -> Generator9     fn dummy_generator() -> Generator;
broken_generator() -> Generator10     fn broken_generator() -> Generator;
11 
12     type GeneratorResult;
13 
14     #[wasm_bindgen(method, getter, structural)]
value(this: &GeneratorResult) -> JsValue15     fn value(this: &GeneratorResult) -> JsValue;
16     #[wasm_bindgen(method, getter, structural)]
done(this: &GeneratorResult) -> bool17     fn done(this: &GeneratorResult) -> bool;
18 
19 }
20 
21 #[wasm_bindgen_test]
return_()22 fn return_() {
23     let gen = one_two_generator();
24     gen.next(&JsValue::undefined()).unwrap();
25 
26     let res = GeneratorResult::from(gen.return_(&42.into()));
27     assert_eq!(res.value(), 42);
28     assert!(res.done());
29 
30     let next = GeneratorResult::from(gen.next(&JsValue::undefined()).unwrap());
31     assert!(next.value().is_undefined());
32     assert!(next.done());
33 }
34 
35 #[wasm_bindgen_test]
next()36 fn next() {
37     let gen = dummy_generator();
38 
39     let result = GeneratorResult::from(gen.next(&JsValue::undefined()).unwrap());
40     assert!(!result.done());
41     assert_eq!(result.value(), "2 * 2");
42 
43     let result = GeneratorResult::from(gen.next(&4.into()).unwrap());
44     assert!(result.done());
45     assert_eq!(result.value(), true);
46 
47     assert!(broken_generator().next(&3.into()).is_err());
48 }
49 
50 #[wasm_bindgen_test]
throw()51 fn throw() {
52     let gen = one_two_generator();
53     gen.next(&JsValue::undefined()).unwrap();
54 
55     assert!(gen.throw(&Error::new("something went wrong")).is_err());
56     let next = GeneratorResult::from(gen.next(&JsValue::undefined()).unwrap());
57     assert!(next.value().is_undefined());
58     assert!(next.done());
59 }
60 
61 #[wasm_bindgen_test]
generator_inheritance()62 fn generator_inheritance() {
63     let gen = dummy_generator();
64 
65     assert!(gen.is_instance_of::<Object>());
66 }
67