extern crate wasm_bindgen;

use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub struct A {
    x: u32,
}

#[wasm_bindgen]
impl A {
    pub fn new() -> A {
        A { x: 3 }
    }

    pub fn foo(&self) {
        drop(self.x);
    }
}

#[wasm_bindgen]
pub fn foo(x: bool) {
    A::new().foo();

    if x {
        bar("test");
        baz(JsValue::from(3));
    }
}

#[wasm_bindgen]
extern "C" {
    fn some_import();
    static A: JsValue;
}

#[wasm_bindgen]
pub fn bar(_: &str) -> JsValue {
    some_import();
    A.clone()
}

#[wasm_bindgen]
pub fn baz(_: JsValue) {}

#[test]
fn test_foo() {
    foo(false);
    A::new().foo();
}
