Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dtolnay committed Aug 18, 2019
1 parent cd162e1 commit d8deb9a
Showing 1 changed file with 69 additions and 0 deletions.
69 changes: 69 additions & 0 deletions tests/test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
use serde::Deserialize;
use serde_derive::Deserialize;
use std::collections::{BTreeMap as Map, BTreeSet as Set};
use std::iter::FromIterator;

fn assert_ignored<'de, T>(json: &'de str, expected: &[&str]) -> T
where
T: Deserialize<'de>,
{
let de = &mut serde_json::Deserializer::from_str(json);

let mut unused = Set::new();

let value: T = serde_ignored::deserialize(de, |path| {
unused.insert(path.to_string());
})
.unwrap();

let expected = Set::from_iter(expected.into_iter().cloned().map(str::to_owned));
assert_eq!(unused, expected);

value
}

#[test]
fn test_readme() {
#[derive(Debug, PartialEq, Deserialize)]
struct Package {
name: String,
dependencies: Map<String, Dependency>,
}

#[derive(Debug, PartialEq, Deserialize)]
struct Dependency {
version: String,
}

let json = r#"{
"name": "demo",
"dependencies": {
"serde": {
"version": "0.9",
"typo1": ""
}
},
"typo2": {
"inner": ""
},
"typo3": {}
}"#;

let ignored = &["dependencies.serde.typo1", "typo2", "typo3"];
let p: Package = assert_ignored(json, ignored);

let expected = Package {
name: "demo".to_owned(),
dependencies: {
let mut map = Map::new();
map.insert(
"serde".to_owned(),
Dependency {
version: "0.9".to_owned(),
},
);
map
},
};
assert_eq!(p, expected);
}

0 comments on commit d8deb9a

Please sign in to comment.