use super::project; #[test] fn c_style_enum() { project() .file( "src/lib.rs", r#" #![feature(proc_macro, wasm_custom_section)] extern crate wasm_bindgen; use wasm_bindgen::prelude::*; #[wasm_bindgen] pub enum Color { Green, Yellow, Red, } #[wasm_bindgen] pub fn cycle(color: Color) -> Color { match color { Color::Green => Color::Yellow, Color::Yellow => Color::Red, Color::Red => Color::Green, } } "#, ) .file( "test.ts", r#" import * as assert from "assert"; import * as wasm from "./out"; export function test() { assert.strictEqual(wasm.Color.Green, 0); assert.strictEqual(wasm.Color.Yellow, 1); assert.strictEqual(wasm.Color.Red, 2); assert.strictEqual(Object.keys(wasm.Color).length, 3); assert.strictEqual(wasm.cycle(wasm.Color.Green), wasm.Color.Yellow); } "#, ) .test(); } #[test] fn c_style_enum_with_custom_values() { project() .file( "src/lib.rs", r#" #![feature(proc_macro, wasm_custom_section)] extern crate wasm_bindgen; use wasm_bindgen::prelude::*; pub mod inner { use wasm_bindgen::prelude::*; #[wasm_bindgen] pub enum Color { Green = 21, Yellow = 34, Red, } } use inner::Color; #[wasm_bindgen] pub fn cycle(color: Color) -> Color { match color { Color::Green => Color::Yellow, Color::Yellow => Color::Red, Color::Red => Color::Green, } } "#, ) .file( "test.ts", r#" import * as assert from "assert"; import * as wasm from "./out"; export function test() { assert.strictEqual(wasm.Color.Green, 21); assert.strictEqual(wasm.Color.Yellow, 34); assert.strictEqual(wasm.Color.Red, 2); assert.strictEqual(Object.keys(wasm.Color).length, 3); assert.strictEqual(wasm.cycle(wasm.Color.Green), wasm.Color.Yellow); } "#, ) .test(); }