1 use wasm_bindgen
::prelude
::*;
2 use wasm_bindgen
::{intern, unintern, JsCast}
;
3 use wasm_bindgen_test
::*;
5 #[wasm_bindgen(module = "tests/wasm/simple.js")]
8 fn test_string_arguments();
9 fn test_return_a_string();
10 fn test_wrong_types();
11 fn test_other_exports_still_available();
12 fn test_jsvalue_typeof();
14 fn optional_str_none(a
: Option
<&str>);
15 fn optional_str_some(a
: Option
<&str>);
16 fn optional_slice_none(a
: Option
<&[u8]>);
17 fn optional_slice_some(a
: Option
<&[u8]>);
18 fn optional_string_none(a
: Option
<String
>);
19 fn optional_string_some(a
: Option
<String
>);
20 fn optional_string_some_empty(a
: Option
<String
>);
21 fn return_string_none() -> Option
<String
>;
22 fn return_string_some() -> Option
<String
>;
23 fn test_rust_optional();
24 #[wasm_bindgen(js_name = import_export_same_name)]
25 fn js_import_export_same_name();
27 #[wasm_bindgen(js_name = RenamedInRust)]
29 fn new_renamed() -> Renamed
;
31 fn test_string_roundtrip();
40 pub fn simple_add(a
: u32, b
: u32) -> u32 {
45 pub fn simple_add3(a
: u32) -> u32 {
50 pub fn simple_get2(_b
: bool
) -> u32 {
55 pub fn simple_return_and_take_bool(a
: bool
, b
: bool
) -> bool
{
60 pub fn simple_raw_pointers_work(a
: *mut u32, b
: *const u8) -> *const u32 {
68 fn string_arguments() {
69 test_string_arguments();
73 pub fn simple_assert_foo_and_bar(a
: &str, b
: &str) {
74 assert_eq
!(a
, "foo2");
79 pub fn simple_assert_foo(a
: &str) {
84 fn return_a_string() {
85 test_return_a_string();
89 pub fn simple_clone(a
: &str) -> String
{
94 pub fn simple_concat(a
: &str, b
: &str, c
: i8) -> String
{
95 format
!("{} {} {}", a
, b
, c
)
104 pub fn simple_int(_a
: u32) {}
107 pub fn simple_str(_a
: &str) {}
111 test_other_exports_still_available();
115 pub extern "C" fn foo(_a
: u32) {}
118 fn jsvalue_typeof() {
119 test_jsvalue_typeof();
123 pub fn is_object(val
: &JsValue
) -> bool
{
128 pub fn is_function(val
: &JsValue
) -> bool
{
133 pub fn is_string(val
: &JsValue
) -> bool
{
141 #[wasm_bindgen(constructor)]
143 #[wasm_bindgen(method, catch)]
144 fn standardized_method_this_js_runtime_doesnt_implement_yet(
146 ) -> Result
<(), JsValue
>;
150 fn binding_to_unimplemented_apis_doesnt_break_everything() {
151 let array
= Array
::new();
152 let res
= array
.standardized_method_this_js_runtime_doesnt_implement_yet();
153 assert
!(res
.is_err());
157 fn optional_slices() {
158 optional_str_none(None
);
159 optional_str_some(Some("x"));
160 optional_str_some(Some(intern("x")));
162 optional_str_some(Some("x"));
163 optional_slice_none(None
);
164 optional_slice_some(Some(&[1, 2, 3]));
165 optional_string_none(None
);
166 optional_string_some_empty(Some(String
::new()));
167 optional_string_some(Some("abcd".to_string()));
169 assert_eq
!(return_string_none(), None
);
170 assert_eq
!(return_string_some(), Some("foo".to_string()));
171 test_rust_optional();
175 pub fn take_optional_str_none(x
: Option
<String
>) {
179 pub fn take_optional_str_some(x
: Option
<String
>) {
180 assert_eq
!(x
, Some(String
::from("hello")));
184 pub fn return_optional_str_none() -> Option
<String
> {
189 pub fn return_optional_str_some() -> Option
<String
> {
190 Some("world".to_string())
194 fn renaming_imports_and_instanceof() {
195 let null
= JsValue
::NULL
;
196 assert
!(!null
.is_instance_of
::<Renamed
>());
198 let arr
: JsValue
= Array
::new().into();
199 assert
!(!arr
.is_instance_of
::<Renamed
>());
201 let renamed
: JsValue
= new_renamed().into();
202 assert
!(renamed
.is_instance_of
::<Renamed
>());
206 pub fn import_export_same_name() {
207 js_import_export_same_name();
211 fn string_roundtrip() {
212 test_string_roundtrip();
216 pub fn do_string_roundtrip(s
: String
) -> String
{
221 fn externref_heap_live_count() {
222 let x
= wasm_bindgen
::externref_heap_live_count();
223 let y
= JsValue
::null().clone();
224 assert
!(wasm_bindgen
::externref_heap_live_count() > x
);
226 assert_eq
!(x
, wasm_bindgen
::externref_heap_live_count());