mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-03-16 10:10:52 +00:00
bindings for Generator.return()
This commit is contained in:
parent
6e95ba20f1
commit
39d79eb037
@ -374,6 +374,12 @@ extern "C" {
|
||||
extern {
|
||||
pub type Generator;
|
||||
|
||||
/// The return() method returns the given value and finishes the generator.
|
||||
///
|
||||
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/return
|
||||
#[wasm_bindgen(method, structural, js_name = return)]
|
||||
pub fn gen_return(this: &Generator, value: &JsValue) -> JsValue;
|
||||
|
||||
/// The next() method returns an object with two properties done and value.
|
||||
/// You can also provide a parameter to the next method to send a value to the generator.
|
||||
///
|
||||
|
@ -2,6 +2,50 @@
|
||||
|
||||
use project;
|
||||
|
||||
#[test]
|
||||
fn gen_return() {
|
||||
project()
|
||||
.file(
|
||||
"src/lib.rs",
|
||||
r#"
|
||||
#![feature(proc_macro, wasm_custom_section)]
|
||||
|
||||
extern crate wasm_bindgen;
|
||||
use wasm_bindgen::prelude::*;
|
||||
use wasm_bindgen::js;
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn gen_return(this: &js::Generator, value: &JsValue) -> JsValue {
|
||||
this.gen_return(value)
|
||||
}
|
||||
"#,
|
||||
)
|
||||
.file(
|
||||
"test.ts",
|
||||
r#"
|
||||
import * as assert from "assert";
|
||||
import * as wasm from "./out";
|
||||
|
||||
export function test() {
|
||||
function* generator() {
|
||||
yield 1;
|
||||
yield 2;
|
||||
}
|
||||
|
||||
const gen = generator();
|
||||
gen.next();
|
||||
|
||||
const res = wasm.gen_return(gen, 42);
|
||||
assert.deepEqual(res, { value: 42, done: true });
|
||||
|
||||
const next = gen.next();
|
||||
assert.deepEqual(next, { value: undefined, done: true });
|
||||
}
|
||||
"#,
|
||||
)
|
||||
.test()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn next() {
|
||||
project()
|
||||
@ -36,14 +80,10 @@ fn next() {
|
||||
const gen = generator();
|
||||
|
||||
const q = wasm.next(gen, undefined);
|
||||
|
||||
assert.equal(q.value, '2 * 2');
|
||||
assert.equal(q.done, false);
|
||||
assert.deepEqual(q, { value: '2 * 2', done: false });
|
||||
|
||||
const a = wasm.next(gen, 4);
|
||||
|
||||
assert.equal(a.value, true);
|
||||
assert.equal(a.done, true);
|
||||
assert.deepEqual(a, { value: true, done: true });
|
||||
}
|
||||
"#,
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user