wasm-bindgen/tests/all/duplicates.rs
Alex Crichton d876475ce3
Fix some situations with duplicate imports (#589)
* Fix importing the same identifier from two modules

This needed a fix in two locations:

* First the generated descriptor function needed its hash to include the module
  that the import came from in order to generate unique descriptor functions.
* Second the generation of the JS shim needed to handle duplicate identifiers in
  a more uniform fashion, ensuring that imported names didn't clash.

* Fix importing the same name in two modules

Previously two descriptor functions with duplicate symbols were emitted, and now
only one function is emitted by using a global table to keep track of state
across macro invocations.
2018-07-30 10:50:43 -07:00

79 lines
2.0 KiB
Rust

use super::project;
#[test]
fn same_function_different_locations() {
project()
.file(
"src/lib.rs",
r#"
#![feature(use_extern_macros)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
pub mod a {
use wasm_bindgen::prelude::*;
#[wasm_bindgen(module = "./foo")]
extern {
pub fn foo();
}
}
pub mod b {
use wasm_bindgen::prelude::*;
#[wasm_bindgen(module = "./foo")]
extern {
pub fn foo();
}
}
#[wasm_bindgen]
pub fn test() {
a::foo();
b::foo();
}
"#,
)
.file("foo.js", "export function foo() {}")
.test();
}
#[test]
fn same_function_different_modules() {
project()
.file(
"src/lib.rs",
r#"
#![feature(use_extern_macros)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
pub mod a {
use wasm_bindgen::prelude::*;
#[wasm_bindgen(module = "./foo")]
extern {
pub fn foo() -> bool;
}
}
pub mod b {
use wasm_bindgen::prelude::*;
#[wasm_bindgen(module = "./bar")]
extern {
pub fn foo() -> bool;
}
}
#[wasm_bindgen]
pub fn test() {
assert!(a::foo());
assert!(!b::foo());
}
"#,
)
.file("foo.js", "export function foo() { return true; } ")
.file("bar.js", "export function foo() { return false; } ")
.test();
}