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_()22fn 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()36fn 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()51fn 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()62fn generator_inheritance() { 63 let gen = dummy_generator(); 64 65 assert!(gen.is_instance_of::<Object>()); 66 } 67