From dc6dbba47c8b866f589afa49761f65ba9e68f856 Mon Sep 17 00:00:00 2001 From: Evgenii P Date: Fri, 1 Nov 2019 02:32:06 +0800 Subject: [PATCH] Implement derive macros expansion tests using macrotest --- test_suite/Cargo.toml | 1 + test_suite/tests/expand/derive/enum/de_enum.rs | 13 +++++++++++++ .../tests/expand/derive/enum/generic_enum.rs | 9 +++++++++ test_suite/tests/expand/derive/enum/lifetimes.rs | 9 +++++++++ test_suite/tests/expand/derive/enum/ser_enum.rs | 16 ++++++++++++++++ test_suite/tests/expand/derive/enum/void.rs | 4 ++++ .../expand/derive/struct/default_ty_param.rs | 14 ++++++++++++++ .../tests/expand/derive/struct/generic_struct.rs | 9 +++++++++ .../expand/derive/struct/generic_tuple_struct.rs | 4 ++++ .../tests/expand/derive/struct/named_map.rs | 15 +++++++++++++++ .../tests/expand/derive/struct/named_tuple.rs | 7 +++++++ .../tests/expand/derive/struct/named_unit.rs | 4 ++++ test_suite/tests/expandtest.rs | 7 +++++++ 13 files changed, 112 insertions(+) create mode 100644 test_suite/tests/expand/derive/enum/de_enum.rs create mode 100644 test_suite/tests/expand/derive/enum/generic_enum.rs create mode 100644 test_suite/tests/expand/derive/enum/lifetimes.rs create mode 100644 test_suite/tests/expand/derive/enum/ser_enum.rs create mode 100644 test_suite/tests/expand/derive/enum/void.rs create mode 100644 test_suite/tests/expand/derive/struct/default_ty_param.rs create mode 100644 test_suite/tests/expand/derive/struct/generic_struct.rs create mode 100644 test_suite/tests/expand/derive/struct/generic_tuple_struct.rs create mode 100644 test_suite/tests/expand/derive/struct/named_map.rs create mode 100644 test_suite/tests/expand/derive/struct/named_tuple.rs create mode 100644 test_suite/tests/expand/derive/struct/named_unit.rs create mode 100644 test_suite/tests/expandtest.rs diff --git a/test_suite/Cargo.toml b/test_suite/Cargo.toml index be836d67..5c0bdd8c 100644 --- a/test_suite/Cargo.toml +++ b/test_suite/Cargo.toml @@ -18,3 +18,4 @@ serde = { path = "../serde", features = ["rc", "derive"] } serde_derive = { path = "../serde_derive", features = ["deserialize_in_place"] } serde_test = { path = "../serde_test" } trybuild = "1.0" +macrotest = "0.1" diff --git a/test_suite/tests/expand/derive/enum/de_enum.rs b/test_suite/tests/expand/derive/enum/de_enum.rs new file mode 100644 index 00000000..59c3bb63 --- /dev/null +++ b/test_suite/tests/expand/derive/enum/de_enum.rs @@ -0,0 +1,13 @@ +use serde::Deserialize; + +#[derive(Debug, PartialEq, Serialize, Deserialize)] +enum DeEnum { + 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 }, +} diff --git a/test_suite/tests/expand/derive/enum/generic_enum.rs b/test_suite/tests/expand/derive/enum/generic_enum.rs new file mode 100644 index 00000000..3fcf71f9 --- /dev/null +++ b/test_suite/tests/expand/derive/enum/generic_enum.rs @@ -0,0 +1,9 @@ +use serde::{Serialize, Deserialize}; + +#[derive(Serialize, Deserialize)] +pub enum GenericEnum { + Unit, + NewType(T), + Seq(T, U), + Map { x: T, y: U }, +} diff --git a/test_suite/tests/expand/derive/enum/lifetimes.rs b/test_suite/tests/expand/derive/enum/lifetimes.rs new file mode 100644 index 00000000..ae7276a4 --- /dev/null +++ b/test_suite/tests/expand/derive/enum/lifetimes.rs @@ -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 }, +} diff --git a/test_suite/tests/expand/derive/enum/ser_enum.rs b/test_suite/tests/expand/derive/enum/ser_enum.rs new file mode 100644 index 00000000..dac7bd40 --- /dev/null +++ b/test_suite/tests/expand/derive/enum/ser_enum.rs @@ -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 }, +} diff --git a/test_suite/tests/expand/derive/enum/void.rs b/test_suite/tests/expand/derive/enum/void.rs new file mode 100644 index 00000000..9b20161b --- /dev/null +++ b/test_suite/tests/expand/derive/enum/void.rs @@ -0,0 +1,4 @@ +use serde::{Serialize, Deserialize}; + +#[derive(Serialize, Deserialize)] +enum Void {} diff --git a/test_suite/tests/expand/derive/struct/default_ty_param.rs b/test_suite/tests/expand/derive/struct/default_ty_param.rs new file mode 100644 index 00000000..3b1ed4e0 --- /dev/null +++ b/test_suite/tests/expand/derive/struct/default_ty_param.rs @@ -0,0 +1,14 @@ +use serde::{Serialize, Deserialize}; + +trait AssociatedType { + type X; +} + +impl AssociatedType for i32 { + type X = i32; +} + +#[derive(Serialize, Deserialize)] +struct DefaultTyParam = i32> { + phantom: PhantomData, +} diff --git a/test_suite/tests/expand/derive/struct/generic_struct.rs b/test_suite/tests/expand/derive/struct/generic_struct.rs new file mode 100644 index 00000000..24afac2f --- /dev/null +++ b/test_suite/tests/expand/derive/struct/generic_struct.rs @@ -0,0 +1,9 @@ +use serde::{Serialize, Deserialize}; + +#[derive(Serialize, Deserialize)] +pub struct GenericStruct { + x: T, +} + +#[derive(Serialize, Deserialize)] +pub struct GenericNewTypeStruct(T); diff --git a/test_suite/tests/expand/derive/struct/generic_tuple_struct.rs b/test_suite/tests/expand/derive/struct/generic_tuple_struct.rs new file mode 100644 index 00000000..f50369be --- /dev/null +++ b/test_suite/tests/expand/derive/struct/generic_tuple_struct.rs @@ -0,0 +1,4 @@ +use serde::{Serialize, Deserialize}; + +#[derive(Deserialize)] +pub struct GenericTupleStruct(T, U); diff --git a/test_suite/tests/expand/derive/struct/named_map.rs b/test_suite/tests/expand/derive/struct/named_map.rs new file mode 100644 index 00000000..809ccd0c --- /dev/null +++ b/test_suite/tests/expand/derive/struct/named_map.rs @@ -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: A, + b: B, + c: C, +} diff --git a/test_suite/tests/expand/derive/struct/named_tuple.rs b/test_suite/tests/expand/derive/struct/named_tuple.rs new file mode 100644 index 00000000..166cc85e --- /dev/null +++ b/test_suite/tests/expand/derive/struct/named_tuple.rs @@ -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); diff --git a/test_suite/tests/expand/derive/struct/named_unit.rs b/test_suite/tests/expand/derive/struct/named_unit.rs new file mode 100644 index 00000000..8e8cf36a --- /dev/null +++ b/test_suite/tests/expand/derive/struct/named_unit.rs @@ -0,0 +1,4 @@ +use serde::{Serialize, Deserialize}; + +#[derive(Serialize, Deserialize)] +struct NamedUnit; diff --git a/test_suite/tests/expandtest.rs b/test_suite/tests/expandtest.rs new file mode 100644 index 00000000..790576f9 --- /dev/null +++ b/test_suite/tests/expandtest.rs @@ -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"); +}