diff --git a/serde_derive/Cargo.toml b/serde_derive/Cargo.toml index 51985b25..32960964 100644 --- a/serde_derive/Cargo.toml +++ b/serde_derive/Cargo.toml @@ -21,6 +21,7 @@ default-features = false features = ["with-syn"] [dev-dependencies] +compiletest_rs = "^0.2.0" fnv = "1.0" serde = { version = "0.8.10", path = "../serde" } serde_test = { version = "0.8.10", path = "../serde_test" } diff --git a/serde_derive/tests/compile-fail/duplicate-attribute/rename-and-ser.rs b/serde_derive/tests/compile-fail/duplicate-attribute/rename-and-ser.rs new file mode 100644 index 00000000..4a6590aa --- /dev/null +++ b/serde_derive/tests/compile-fail/duplicate-attribute/rename-and-ser.rs @@ -0,0 +1,12 @@ +#![feature(rustc_macro)] + +#[macro_use] +extern crate serde_derive; + +#[derive(Serialize)] //~ ERROR: custom derive attribute panicked +struct S { + #[serde(rename="x", serialize="y")] // ERROR: unknown serde field attribute `serialize` + x: (), +} + +fn main() {} diff --git a/serde_derive/tests/compile-fail/duplicate-attribute/rename-rename-de.rs b/serde_derive/tests/compile-fail/duplicate-attribute/rename-rename-de.rs new file mode 100644 index 00000000..21a31b6c --- /dev/null +++ b/serde_derive/tests/compile-fail/duplicate-attribute/rename-rename-de.rs @@ -0,0 +1,13 @@ +#![feature(rustc_macro)] + +#[macro_use] +extern crate serde_derive; + +#[derive(Serialize)] //~ ERROR: custom derive attribute panicked +struct S { + #[serde(rename="x")] + #[serde(rename(deserialize="y"))] // ERROR: duplicate serde attribute `rename` + x: (), +} + +fn main() {} diff --git a/serde_derive/tests/compile-fail/duplicate-attribute/rename-ser-rename-ser.rs b/serde_derive/tests/compile-fail/duplicate-attribute/rename-ser-rename-ser.rs new file mode 100644 index 00000000..be64ec03 --- /dev/null +++ b/serde_derive/tests/compile-fail/duplicate-attribute/rename-ser-rename-ser.rs @@ -0,0 +1,12 @@ +#![feature(rustc_macro)] + +#[macro_use] +extern crate serde_derive; + +#[derive(Serialize)] //~ ERROR: custom derive attribute panicked +struct S { + #[serde(rename(serialize="x"), rename(serialize="y"))] // ERROR: duplicate serde attribute `rename` + x: (), +} + +fn main() {} diff --git a/serde_derive/tests/compile-fail/duplicate-attribute/rename-ser-rename.rs b/serde_derive/tests/compile-fail/duplicate-attribute/rename-ser-rename.rs new file mode 100644 index 00000000..1dd2a982 --- /dev/null +++ b/serde_derive/tests/compile-fail/duplicate-attribute/rename-ser-rename.rs @@ -0,0 +1,13 @@ +#![feature(rustc_macro)] + +#[macro_use] +extern crate serde_derive; + +#[derive(Serialize)] //~ ERROR: custom derive attribute panicked +struct S { + #[serde(rename(serialize="x"))] + #[serde(rename="y")] // ERROR: duplicate serde attribute `rename` + x: (), +} + +fn main() {} diff --git a/serde_derive/tests/compile-fail/duplicate-attribute/rename-ser-ser.rs b/serde_derive/tests/compile-fail/duplicate-attribute/rename-ser-ser.rs new file mode 100644 index 00000000..ef9a7c5c --- /dev/null +++ b/serde_derive/tests/compile-fail/duplicate-attribute/rename-ser-ser.rs @@ -0,0 +1,12 @@ +#![feature(rustc_macro)] + +#[macro_use] +extern crate serde_derive; + +#[derive(Serialize)] //~ ERROR: custom derive attribute panicked +struct S { + #[serde(rename(serialize="x", serialize="y"))] // ERROR: duplicate serde attribute `rename` + x: (), +} + +fn main() {} diff --git a/serde_derive/tests/compile-fail/duplicate-attribute/two-rename-ser.rs b/serde_derive/tests/compile-fail/duplicate-attribute/two-rename-ser.rs new file mode 100644 index 00000000..35e9a5a0 --- /dev/null +++ b/serde_derive/tests/compile-fail/duplicate-attribute/two-rename-ser.rs @@ -0,0 +1,13 @@ +#![feature(rustc_macro)] + +#[macro_use] +extern crate serde_derive; + +#[derive(Serialize)] //~ ERROR: custom derive attribute panicked +struct S { + #[serde(rename(serialize="x"))] + #[serde(rename(serialize="y"))] // ERROR: duplicate serde attribute `rename` + x: (), +} + +fn main() {} diff --git a/serde_derive/tests/compile-fail/str_ref_deser.rs b/serde_derive/tests/compile-fail/str_ref_deser.rs new file mode 100644 index 00000000..98c21617 --- /dev/null +++ b/serde_derive/tests/compile-fail/str_ref_deser.rs @@ -0,0 +1,11 @@ +#![feature(rustc_macro)] + +#[macro_use] +extern crate serde_derive; + +#[derive(Serialize, Deserialize)] //~ ERROR: custom derive attribute panicked +struct Test<'a> { + s: &'a str, // ERROR: Serde does not support deserializing fields of type &str +} + +fn main() {} diff --git a/serde_derive/tests/compile-fail/unknown-attribute/container.rs b/serde_derive/tests/compile-fail/unknown-attribute/container.rs new file mode 100644 index 00000000..1815a7ce --- /dev/null +++ b/serde_derive/tests/compile-fail/unknown-attribute/container.rs @@ -0,0 +1,12 @@ +#![feature(rustc_macro)] + +#[macro_use] +extern crate serde_derive; + +#[derive(Serialize)] //~ ERROR: custom derive attribute panicked +#[serde(abc="xyz")] // ERROR: unknown serde container attribute `abc` +struct A { + x: u32, +} + +fn main() { } diff --git a/serde_derive/tests/compile-fail/unknown-attribute/field.rs b/serde_derive/tests/compile-fail/unknown-attribute/field.rs new file mode 100644 index 00000000..5cc6372c --- /dev/null +++ b/serde_derive/tests/compile-fail/unknown-attribute/field.rs @@ -0,0 +1,12 @@ +#![feature(rustc_macro)] + +#[macro_use] +extern crate serde_derive; + +#[derive(Serialize)] //~ ERROR: custom derive attribute panicked +struct C { + #[serde(abc="xyz")] // ERROR: unknown serde field attribute `abc` + x: u32, +} + +fn main() { } diff --git a/serde_derive/tests/compile-fail/unknown-attribute/variant.rs b/serde_derive/tests/compile-fail/unknown-attribute/variant.rs new file mode 100644 index 00000000..353ef91f --- /dev/null +++ b/serde_derive/tests/compile-fail/unknown-attribute/variant.rs @@ -0,0 +1,12 @@ +#![feature(rustc_macro)] + +#[macro_use] +extern crate serde_derive; + +#[derive(Serialize)] //~ ERROR: custom derive attribute panicked +enum E { + #[serde(abc="xyz")] // ERROR: unknown serde variant attribute `abc` + V, +} + +fn main() { } diff --git a/serde_macros/tests/compile_tests.rs b/serde_derive/tests/compile_tests.rs similarity index 100% rename from serde_macros/tests/compile_tests.rs rename to serde_derive/tests/compile_tests.rs diff --git a/serde_macros/tests/run-pass/identity-op.rs b/serde_derive/tests/run-pass/identity-op.rs similarity index 80% rename from serde_macros/tests/run-pass/identity-op.rs rename to serde_derive/tests/run-pass/identity-op.rs index dcf8117a..47e2c750 100644 --- a/serde_macros/tests/run-pass/identity-op.rs +++ b/serde_derive/tests/run-pass/identity-op.rs @@ -1,8 +1,9 @@ -#![feature(custom_derive, plugin)] -#![plugin(serde_macros, clippy)] - +#![feature(rustc_macro)] #![deny(identity_op)] +#[macro_use] +extern crate serde_derive; + // The derived implementation uses 0+1 to add up the number of fields // serialized, which Clippy warns about. If the expansion info is registered // correctly, the Clippy lint is not triggered. diff --git a/serde_derive/tests/test.rs b/serde_derive/tests/test.rs index ff8ac572..80239edf 100644 --- a/serde_derive/tests/test.rs +++ b/serde_derive/tests/test.rs @@ -6,3 +6,5 @@ extern crate serde_derive; extern crate test; include!("../../testing/tests/test.rs.in"); + +mod compile_tests; diff --git a/serde_macros/.cargo/config b/serde_macros/.cargo/config deleted file mode 100644 index 7f1ab8d3..00000000 --- a/serde_macros/.cargo/config +++ /dev/null @@ -1,2 +0,0 @@ -# To prevent compiletest from seeing two versions of serde -paths = ["../serde"] diff --git a/serde_macros/.gitignore b/serde_macros/.gitignore deleted file mode 100644 index 4fffb2f8..00000000 --- a/serde_macros/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/target -/Cargo.lock diff --git a/serde_macros/Cargo.toml b/serde_macros/Cargo.toml deleted file mode 100644 index 62b5e682..00000000 --- a/serde_macros/Cargo.toml +++ /dev/null @@ -1,41 +0,0 @@ -[package] -name = "serde_macros" -version = "0.8.9" -authors = ["Erick Tryzelaar "] -license = "MIT/Apache-2.0" -description = "Macros to auto-generate implementations for the serde framework" -homepage = "https://serde.rs" -repository = "https://github.com/serde-rs/serde" -documentation = "https://serde.rs/codegen.html" -keywords = ["serde", "serialization"] -include = ["Cargo.toml", "src/**/*.rs"] - -[lib] -name = "serde_macros" -plugin = true - -[features] -unstable-testing = [ - "clippy", - "serde/unstable-testing", - "serde_codegen/unstable-testing" -] - -[dependencies] -clippy = { version = "^0.*", optional = true } -serde_codegen = { version = "=0.8.9", default-features = false, features = ["unstable"], path = "../serde_codegen" } - -[dev-dependencies] -compiletest_rs = "^0.2.0" -fnv = "1.0" -rustc-serialize = "^0.3.16" -serde = { version = "0.8.9", path = "../serde" } -serde_test = { version = "0.8.9", path = "../serde_test" } - -[[test]] -name = "test" -path = "tests/test.rs" - -[[bench]] -name = "bench" -path = "benches/bench.rs" diff --git a/serde_macros/benches/bench.rs b/serde_macros/benches/bench.rs deleted file mode 100644 index ec15c18c..00000000 --- a/serde_macros/benches/bench.rs +++ /dev/null @@ -1,9 +0,0 @@ -#![feature(custom_attribute, custom_derive, plugin, test)] -#![cfg_attr(feature = "clippy", plugin(clippy))] -#![plugin(serde_macros)] - -extern crate rustc_serialize; -extern crate serde; -extern crate test; - -include!("../../testing/benches/bench.rs.in"); diff --git a/serde_macros/src/lib.rs b/serde_macros/src/lib.rs deleted file mode 100644 index 077fdccf..00000000 --- a/serde_macros/src/lib.rs +++ /dev/null @@ -1,12 +0,0 @@ -#![feature(plugin_registrar, rustc_private)] -#![cfg_attr(feature = "clippy", feature(plugin))] -#![cfg_attr(feature = "clippy", plugin(clippy))] - -extern crate serde_codegen; -extern crate rustc_plugin; - -#[plugin_registrar] -#[doc(hidden)] -pub fn plugin_registrar(reg: &mut rustc_plugin::Registry) { - serde_codegen::register(reg); -} diff --git a/serde_macros/tests/compile-fail/duplicate_attributes.rs b/serde_macros/tests/compile-fail/duplicate_attributes.rs deleted file mode 100644 index 61c98697..00000000 --- a/serde_macros/tests/compile-fail/duplicate_attributes.rs +++ /dev/null @@ -1,32 +0,0 @@ -#![feature(custom_attribute, custom_derive, plugin)] -#![plugin(serde_macros)] - -#[derive(Serialize)] //~ ERROR: 6 errors: -struct S { - #[serde(rename(serialize="x"))] - #[serde(rename(serialize="y"))] // ERROR: duplicate serde attribute `rename` - a: (), - - #[serde(rename(serialize="x"))] - #[serde(rename="y")] // ERROR: duplicate serde attribute `rename` - b: (), - - #[serde(rename(serialize="x"))] - #[serde(rename(deserialize="y"))] // ok - c: (), - - #[serde(rename="x")] - #[serde(rename(deserialize="y"))] // ERROR: duplicate serde attribute `rename` - d: (), - - #[serde(rename(serialize="x", serialize="y"))] // ERROR: duplicate serde attribute `rename` - e: (), - - #[serde(rename="x", serialize="y")] // ERROR: unknown serde field attribute `serialize` - f: (), - - #[serde(rename(serialize="x"), rename(serialize="y"))] // ERROR: duplicate serde attribute `rename` - g: (), -} - -fn main() {} diff --git a/serde_macros/tests/compile-fail/reject-unknown-attributes.rs b/serde_macros/tests/compile-fail/reject-unknown-attributes.rs deleted file mode 100644 index 3295b3ad..00000000 --- a/serde_macros/tests/compile-fail/reject-unknown-attributes.rs +++ /dev/null @@ -1,30 +0,0 @@ -#![feature(custom_attribute, custom_derive, plugin)] -#![plugin(serde_macros)] - -extern crate serde; - -#[derive(Serialize)] //~ unknown serde container attribute `abc` -#[serde(abc="xyz")] -struct A { - x: u32, -} - -#[derive(Deserialize)] //~ unknown serde container attribute `abc` -#[serde(abc="xyz")] -struct B { - x: u32, -} - -#[derive(Serialize)] //~ unknown serde field attribute `abc` -struct C { - #[serde(abc="xyz")] - x: u32, -} - -#[derive(Deserialize)] //~ unknown serde field attribute `abc` -struct D { - #[serde(abc="xyz")] - x: u32, -} - -fn main() { } diff --git a/serde_macros/tests/compile-fail/str_ref_deser.rs b/serde_macros/tests/compile-fail/str_ref_deser.rs deleted file mode 100644 index 610ed680..00000000 --- a/serde_macros/tests/compile-fail/str_ref_deser.rs +++ /dev/null @@ -1,9 +0,0 @@ -#![feature(custom_attribute, custom_derive, plugin)] -#![plugin(serde_macros)] - -#[derive(Serialize, Deserialize)] //~ ERROR: Serde does not support deserializing fields of type &str -struct Test<'a> { - s: &'a str, -} - -fn main() {} diff --git a/serde_macros/tests/test.rs b/serde_macros/tests/test.rs deleted file mode 100644 index e0462787..00000000 --- a/serde_macros/tests/test.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![feature(test, custom_attribute, custom_derive, plugin)] -#![plugin(serde_macros)] - -extern crate test; - -include!("../../testing/tests/test.rs.in"); - -mod compile_tests;