From 4197bf41833220101006cafdc10b27fd0f3d042c Mon Sep 17 00:00:00 2001 From: Graham Esau Date: Fri, 5 Jun 2020 17:18:48 +0100 Subject: [PATCH] Add test for invalid schemars attributes --- schemars/Cargo.toml | 7 +++++++ schemars/src/gen.rs | 2 +- schemars/tests/ui.rs | 5 +++++ schemars/tests/ui/invalid_attrs.rs | 11 ++++++++++ schemars/tests/ui/invalid_attrs.stderr | 29 ++++++++++++++++++++++++++ update-tests.sh | 2 +- 6 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 schemars/tests/ui.rs create mode 100644 schemars/tests/ui/invalid_attrs.rs create mode 100644 schemars/tests/ui/invalid_attrs.stderr diff --git a/schemars/Cargo.toml b/schemars/Cargo.toml index f61e4b6..3d7e980 100644 --- a/schemars/Cargo.toml +++ b/schemars/Cargo.toml @@ -26,6 +26,7 @@ arrayvec = { version = "0.5", default-features = false, optional = true } [dev-dependencies] pretty_assertions = "0.6.1" +trybuild = "1.0" [features] default = ["derive"] @@ -36,6 +37,8 @@ impl_json_schema = ["derive"] # derive_json_schema will be removed in a later version derive_json_schema = ["impl_json_schema"] +ui_test = [] + [[test]] name = "chrono" required-features = ["chrono"] @@ -64,5 +67,9 @@ required-features = ["arrayvec"] name = "schema_for_schema" required-features = ["impl_json_schema"] +[[test]] +name = "ui" +required-features = ["ui_test"] + [package.metadata.docs.rs] all-features = true diff --git a/schemars/src/gen.rs b/schemars/src/gen.rs index 313ad1c..9579347 100644 --- a/schemars/src/gen.rs +++ b/schemars/src/gen.rs @@ -1,7 +1,7 @@ use crate::flatten::Merge; use crate::schema::*; use crate::{visit::*, JsonSchema, Map}; -use std::{fmt::Debug, sync::Arc}; +use std::sync::Arc; /// Settings to customize how Schemas are generated. /// diff --git a/schemars/tests/ui.rs b/schemars/tests/ui.rs new file mode 100644 index 0000000..870c2f9 --- /dev/null +++ b/schemars/tests/ui.rs @@ -0,0 +1,5 @@ +#[test] +fn ui() { + let t = trybuild::TestCases::new(); + t.compile_fail("tests/ui/*.rs"); +} diff --git a/schemars/tests/ui/invalid_attrs.rs b/schemars/tests/ui/invalid_attrs.rs new file mode 100644 index 0000000..0eea93b --- /dev/null +++ b/schemars/tests/ui/invalid_attrs.rs @@ -0,0 +1,11 @@ +use schemars::JsonSchema; + +#[derive(JsonSchema)] +#[serde(default = 0, foo, deny_unknown_fields, deny_unknown_fields)] +pub struct Struct1; + +#[derive(JsonSchema)] +#[schemars(default = 0, foo, deny_unknown_fields, deny_unknown_fields)] +pub struct Struct2; + +fn main() {} diff --git a/schemars/tests/ui/invalid_attrs.stderr b/schemars/tests/ui/invalid_attrs.stderr new file mode 100644 index 0000000..fa3a4f4 --- /dev/null +++ b/schemars/tests/ui/invalid_attrs.stderr @@ -0,0 +1,29 @@ +error: expected serde default attribute to be a string: `default = "..."` + --> $DIR/invalid_attrs.rs:4:19 + | +4 | #[serde(default = 0, foo, deny_unknown_fields, deny_unknown_fields)] + | ^ + +error: duplicate serde attribute `deny_unknown_fields` + --> $DIR/invalid_attrs.rs:4:48 + | +4 | #[serde(default = 0, foo, deny_unknown_fields, deny_unknown_fields)] + | ^^^^^^^^^^^^^^^^^^^ + +error: expected serde default attribute to be a string: `default = "..."` + --> $DIR/invalid_attrs.rs:8:22 + | +8 | #[schemars(default = 0, foo, deny_unknown_fields, deny_unknown_fields)] + | ^ + +error: duplicate serde attribute `deny_unknown_fields` + --> $DIR/invalid_attrs.rs:8:51 + | +8 | #[schemars(default = 0, foo, deny_unknown_fields, deny_unknown_fields)] + | ^^^^^^^^^^^^^^^^^^^ + +error: unknown schemars container attribute `foo` + --> $DIR/invalid_attrs.rs:8:25 + | +8 | #[schemars(default = 0, foo, deny_unknown_fields, deny_unknown_fields)] + | ^^^ diff --git a/update-tests.sh b/update-tests.sh index 476531f..0ba525c 100644 --- a/update-tests.sh +++ b/update-tests.sh @@ -5,7 +5,7 @@ cd schemars rm -f tests/actual/*.json -cargo test --all-features --no-fail-fast --tests || : +TRYBUILD=overwrite cargo test --all-features --no-fail-fast --tests || : if ls tests/actual/*.json 1> /dev/null 2>&1; then mv -f tests/actual/*.json tests/expected/