mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-04-29 07:32:17 +00:00
Migrate the serde-serialize
test to wasm
This commit is contained in:
parent
4661588171
commit
0bdb31d41e
@ -52,6 +52,7 @@ matrix:
|
|||||||
script:
|
script:
|
||||||
- cargo test --release
|
- cargo test --release
|
||||||
- cargo test --target wasm32-unknown-unknown
|
- cargo test --target wasm32-unknown-unknown
|
||||||
|
- cargo test --target wasm32-unknown-unknown --features serde-serialize
|
||||||
# Check JS output from all tests against eslint
|
# Check JS output from all tests against eslint
|
||||||
- npm run run-lint-generated-tests
|
- npm run run-lint-generated-tests
|
||||||
# Check Examples against eslint
|
# Check Examples against eslint
|
||||||
|
@ -33,6 +33,7 @@ serde_json = { version = "1.0", optional = true }
|
|||||||
|
|
||||||
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
|
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
|
||||||
wasm-bindgen-test = { path = 'crates/test', version = '=0.2.15' }
|
wasm-bindgen-test = { path = 'crates/test', version = '=0.2.15' }
|
||||||
|
serde_derive = "1.0"
|
||||||
|
|
||||||
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
|
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
|
||||||
wasm-bindgen-test-project-builder = { path = "crates/test-project-builder", version = '=0.2.15' }
|
wasm-bindgen-test-project-builder = { path = "crates/test-project-builder", version = '=0.2.15' }
|
||||||
|
@ -32,9 +32,16 @@ pub fn wasm_bindgen_test(
|
|||||||
|
|
||||||
let mut body = TokenStream::from(body).into_iter();
|
let mut body = TokenStream::from(body).into_iter();
|
||||||
|
|
||||||
// Assume the input item is of the form `fn #ident ...`, and extract
|
// Skip over other attributes to `fn #ident ...`, and extract `#ident`
|
||||||
// `#ident`
|
let mut leading_tokens = Vec::new();
|
||||||
let fn_tok = body.next();
|
while let Some(token) = body.next() {
|
||||||
|
leading_tokens.push(token.clone());
|
||||||
|
if let TokenTree::Ident(token) = token {
|
||||||
|
if token == "fn" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
let ident = match body.next() {
|
let ident = match body.next() {
|
||||||
Some(TokenTree::Ident(token)) => token,
|
Some(TokenTree::Ident(token)) => token,
|
||||||
_ => panic!("expected a function name"),
|
_ => panic!("expected a function name"),
|
||||||
@ -64,7 +71,7 @@ pub fn wasm_bindgen_test(
|
|||||||
}
|
}
|
||||||
}).into_iter());
|
}).into_iter());
|
||||||
|
|
||||||
tokens.extend(fn_tok);
|
tokens.extend(leading_tokens);
|
||||||
tokens.push(ident.into());
|
tokens.push(ident.into());
|
||||||
tokens.extend(body);
|
tokens.extend(body);
|
||||||
|
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
use super::project;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn serde() {
|
|
||||||
project()
|
|
||||||
.serde(true)
|
|
||||||
.depend("serde = '1.0'")
|
|
||||||
.depend("serde_derive = '1.0'")
|
|
||||||
.file(
|
|
||||||
"src/lib.rs",
|
|
||||||
r#"
|
|
||||||
#![feature(use_extern_macros)]
|
|
||||||
|
|
||||||
extern crate wasm_bindgen;
|
|
||||||
#[macro_use]
|
|
||||||
extern crate serde_derive;
|
|
||||||
|
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
|
||||||
pub struct Foo {
|
|
||||||
a: u32,
|
|
||||||
b: String,
|
|
||||||
c: Option<Bar>,
|
|
||||||
d: Bar,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
|
||||||
pub struct Bar {
|
|
||||||
a: u32,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[wasm_bindgen(module = "./test")]
|
|
||||||
extern {
|
|
||||||
fn verify(a: JsValue) -> JsValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[wasm_bindgen]
|
|
||||||
pub fn run() {
|
|
||||||
let js = JsValue::from_serde("foo").unwrap();
|
|
||||||
assert_eq!(js.as_string(), Some("foo".to_string()));
|
|
||||||
|
|
||||||
let ret = verify(JsValue::from_serde(&Foo {
|
|
||||||
a: 0,
|
|
||||||
b: "foo".to_string(),
|
|
||||||
c: None,
|
|
||||||
d: Bar { a: 1 },
|
|
||||||
}).unwrap());
|
|
||||||
|
|
||||||
let foo = ret.into_serde::<Foo>().unwrap();
|
|
||||||
assert_eq!(foo.a, 2);
|
|
||||||
assert_eq!(foo.b, "bar");
|
|
||||||
assert!(foo.c.is_some());
|
|
||||||
assert_eq!(foo.c.as_ref().unwrap().a, 3);
|
|
||||||
assert_eq!(foo.d.a, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[wasm_bindgen]
|
|
||||||
pub fn parse(j: &JsValue) {
|
|
||||||
let s = j.into_serde::<String>().unwrap();
|
|
||||||
assert_eq!(s, "bar");
|
|
||||||
}
|
|
||||||
"#,
|
|
||||||
)
|
|
||||||
.file(
|
|
||||||
"test.js",
|
|
||||||
r#"
|
|
||||||
import { run, parse } from "./out";
|
|
||||||
import * as assert from "assert";
|
|
||||||
|
|
||||||
export function verify(a) {
|
|
||||||
assert.deepStrictEqual(a, {
|
|
||||||
a: 0,
|
|
||||||
b: 'foo',
|
|
||||||
c: null,
|
|
||||||
d: { a: 1 }
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
|
||||||
a: 2,
|
|
||||||
b: 'bar',
|
|
||||||
c: { a: 3 },
|
|
||||||
d: { a: 4 },
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function test() {
|
|
||||||
run();
|
|
||||||
parse('bar');
|
|
||||||
}
|
|
||||||
"#,
|
|
||||||
)
|
|
||||||
.test();
|
|
||||||
}
|
|
@ -82,3 +82,19 @@ exports.js_returning_vector = () => {
|
|||||||
exports.js_another_vector_return = () => {
|
exports.js_another_vector_return = () => {
|
||||||
assert.deepStrictEqual(wasm.another_vector_return_get_array(), [1, 2, 3, 4, 5, 6]);
|
assert.deepStrictEqual(wasm.another_vector_return_get_array(), [1, 2, 3, 4, 5, 6]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.verify_serde = function(a) {
|
||||||
|
assert.deepStrictEqual(a, {
|
||||||
|
a: 0,
|
||||||
|
b: 'foo',
|
||||||
|
c: null,
|
||||||
|
d: { a: 1 }
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
a: 2,
|
||||||
|
b: 'bar',
|
||||||
|
c: { a: 3 },
|
||||||
|
d: { a: 4 },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@ -26,6 +26,7 @@ extern {
|
|||||||
fn js_returning_vector();
|
fn js_returning_vector();
|
||||||
|
|
||||||
fn js_another_vector_return();
|
fn js_another_vector_return();
|
||||||
|
fn verify_serde(val: JsValue) -> JsValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
@ -105,3 +106,40 @@ pub fn another_vector_return_get_array() -> Vec<JsValue> {
|
|||||||
fn another_vector_return() {
|
fn another_vector_return() {
|
||||||
js_another_vector_return();
|
js_another_vector_return();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "serde-serialize")]
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn serde() {
|
||||||
|
#[derive(Deserialize, Serialize)]
|
||||||
|
pub struct Foo {
|
||||||
|
a: u32,
|
||||||
|
b: String,
|
||||||
|
c: Option<Bar>,
|
||||||
|
d: Bar,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Serialize)]
|
||||||
|
pub struct Bar {
|
||||||
|
a: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
let js = JsValue::from_serde("foo").unwrap();
|
||||||
|
assert_eq!(js.as_string(), Some("foo".to_string()));
|
||||||
|
|
||||||
|
let ret = verify_serde(JsValue::from_serde(&Foo {
|
||||||
|
a: 0,
|
||||||
|
b: "foo".to_string(),
|
||||||
|
c: None,
|
||||||
|
d: Bar { a: 1 },
|
||||||
|
}).unwrap());
|
||||||
|
|
||||||
|
let foo = ret.into_serde::<Foo>().unwrap();
|
||||||
|
assert_eq!(foo.a, 2);
|
||||||
|
assert_eq!(foo.b, "bar");
|
||||||
|
assert!(foo.c.is_some());
|
||||||
|
assert_eq!(foo.c.as_ref().unwrap().a, 3);
|
||||||
|
assert_eq!(foo.d.a, 4);
|
||||||
|
|
||||||
|
assert_eq!(JsValue::from("bar").into_serde::<String>().unwrap(), "bar");
|
||||||
|
}
|
||||||
|
@ -4,6 +4,10 @@
|
|||||||
extern crate wasm_bindgen_test;
|
extern crate wasm_bindgen_test;
|
||||||
extern crate wasm_bindgen;
|
extern crate wasm_bindgen;
|
||||||
|
|
||||||
|
#[cfg(feature = "serde-serialize")]
|
||||||
|
#[macro_use]
|
||||||
|
extern crate serde_derive;
|
||||||
|
|
||||||
pub mod api;
|
pub mod api;
|
||||||
pub mod char;
|
pub mod char;
|
||||||
pub mod classes;
|
pub mod classes;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user