Implement derive macros expansion tests using macrotest
This commit is contained in:
parent
2ceabad360
commit
dc6dbba47c
@ -18,3 +18,4 @@ serde = { path = "../serde", features = ["rc", "derive"] }
|
|||||||
serde_derive = { path = "../serde_derive", features = ["deserialize_in_place"] }
|
serde_derive = { path = "../serde_derive", features = ["deserialize_in_place"] }
|
||||||
serde_test = { path = "../serde_test" }
|
serde_test = { path = "../serde_test" }
|
||||||
trybuild = "1.0"
|
trybuild = "1.0"
|
||||||
|
macrotest = "0.1"
|
||||||
|
13
test_suite/tests/expand/derive/enum/de_enum.rs
Normal file
13
test_suite/tests/expand/derive/enum/de_enum.rs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||||
|
enum DeEnum<B, C, D> {
|
||||||
|
Unit,
|
||||||
|
Seq(i8, B, C, D),
|
||||||
|
Map { a: i8, b: B, c: C, d: D },
|
||||||
|
|
||||||
|
// Make sure we can support more than one variant.
|
||||||
|
_Unit2,
|
||||||
|
_Seq2(i8, B, C, D),
|
||||||
|
_Map2 { a: i8, b: B, c: C, d: D },
|
||||||
|
}
|
9
test_suite/tests/expand/derive/enum/generic_enum.rs
Normal file
9
test_suite/tests/expand/derive/enum/generic_enum.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub enum GenericEnum<T, U> {
|
||||||
|
Unit,
|
||||||
|
NewType(T),
|
||||||
|
Seq(T, U),
|
||||||
|
Map { x: T, y: U },
|
||||||
|
}
|
9
test_suite/tests/expand/derive/enum/lifetimes.rs
Normal file
9
test_suite/tests/expand/derive/enum/lifetimes.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
enum Lifetimes<'a> {
|
||||||
|
LifetimeSeq(&'a i32),
|
||||||
|
NoLifetimeSeq(i32),
|
||||||
|
LifetimeMap { a: &'a i32 },
|
||||||
|
NoLifetimeMap { a: i32 },
|
||||||
|
}
|
16
test_suite/tests/expand/derive/enum/ser_enum.rs
Normal file
16
test_suite/tests/expand/derive/enum/ser_enum.rs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
use serde::Serialize;
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
enum SerEnum<'a, B: 'a, C: 'a, D>
|
||||||
|
where
|
||||||
|
D: 'a,
|
||||||
|
{
|
||||||
|
Unit,
|
||||||
|
Seq(i8, B, &'a C, &'a mut D),
|
||||||
|
Map { a: i8, b: B, c: &'a C, d: &'a mut D },
|
||||||
|
|
||||||
|
// Make sure we can support more than one variant.
|
||||||
|
_Unit2,
|
||||||
|
_Seq2(i8, B, &'a C, &'a mut D),
|
||||||
|
_Map2 { a: i8, b: B, c: &'a C, d: &'a mut D },
|
||||||
|
}
|
4
test_suite/tests/expand/derive/enum/void.rs
Normal file
4
test_suite/tests/expand/derive/enum/void.rs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
enum Void {}
|
14
test_suite/tests/expand/derive/struct/default_ty_param.rs
Normal file
14
test_suite/tests/expand/derive/struct/default_ty_param.rs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
|
trait AssociatedType {
|
||||||
|
type X;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AssociatedType for i32 {
|
||||||
|
type X = i32;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
struct DefaultTyParam<T: AssociatedType<X = i32> = i32> {
|
||||||
|
phantom: PhantomData<T>,
|
||||||
|
}
|
9
test_suite/tests/expand/derive/struct/generic_struct.rs
Normal file
9
test_suite/tests/expand/derive/struct/generic_struct.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct GenericStruct<T> {
|
||||||
|
x: T,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct GenericNewTypeStruct<T>(T);
|
@ -0,0 +1,4 @@
|
|||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct GenericTupleStruct<T, U>(T, U);
|
15
test_suite/tests/expand/derive/struct/named_map.rs
Normal file
15
test_suite/tests/expand/derive/struct/named_map.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct SerNamedMap<'a, 'b, A: 'a, B: 'b, C> {
|
||||||
|
a: &'a A,
|
||||||
|
b: &'b mut B,
|
||||||
|
c: C,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
struct DeNamedMap<A, B, C> {
|
||||||
|
a: A,
|
||||||
|
b: B,
|
||||||
|
c: C,
|
||||||
|
}
|
7
test_suite/tests/expand/derive/struct/named_tuple.rs
Normal file
7
test_suite/tests/expand/derive/struct/named_tuple.rs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct SerNamedTuple<'a, 'b, A: 'a, B: 'b, C>(&'a A, &'b mut B, C);
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
struct DeNamedTuple<A, B, C>(A, B, C);
|
4
test_suite/tests/expand/derive/struct/named_unit.rs
Normal file
4
test_suite/tests/expand/derive/struct/named_unit.rs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
struct NamedUnit;
|
7
test_suite/tests/expandtest.rs
Normal file
7
test_suite/tests/expandtest.rs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#[cfg(not(target_os = "emscripten"))]
|
||||||
|
#[rustversion::attr(not(nightly), ignore)]
|
||||||
|
#[test]
|
||||||
|
fn expandtest() {
|
||||||
|
macrotest::expand("tests/expand/**/enum/*.rs");
|
||||||
|
macrotest::expand("tests/expand/**/struct/*.rs");
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user