Skip to content

Commit d8deb9a

Browse files
committed
Add tests
1 parent cd162e1 commit d8deb9a

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

tests/test.rs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
use serde::Deserialize;
2+
use serde_derive::Deserialize;
3+
use std::collections::{BTreeMap as Map, BTreeSet as Set};
4+
use std::iter::FromIterator;
5+
6+
fn assert_ignored<'de, T>(json: &'de str, expected: &[&str]) -> T
7+
where
8+
T: Deserialize<'de>,
9+
{
10+
let de = &mut serde_json::Deserializer::from_str(json);
11+
12+
let mut unused = Set::new();
13+
14+
let value: T = serde_ignored::deserialize(de, |path| {
15+
unused.insert(path.to_string());
16+
})
17+
.unwrap();
18+
19+
let expected = Set::from_iter(expected.into_iter().cloned().map(str::to_owned));
20+
assert_eq!(unused, expected);
21+
22+
value
23+
}
24+
25+
#[test]
26+
fn test_readme() {
27+
#[derive(Debug, PartialEq, Deserialize)]
28+
struct Package {
29+
name: String,
30+
dependencies: Map<String, Dependency>,
31+
}
32+
33+
#[derive(Debug, PartialEq, Deserialize)]
34+
struct Dependency {
35+
version: String,
36+
}
37+
38+
let json = r#"{
39+
"name": "demo",
40+
"dependencies": {
41+
"serde": {
42+
"version": "0.9",
43+
"typo1": ""
44+
}
45+
},
46+
"typo2": {
47+
"inner": ""
48+
},
49+
"typo3": {}
50+
}"#;
51+
52+
let ignored = &["dependencies.serde.typo1", "typo2", "typo3"];
53+
let p: Package = assert_ignored(json, ignored);
54+
55+
let expected = Package {
56+
name: "demo".to_owned(),
57+
dependencies: {
58+
let mut map = Map::new();
59+
map.insert(
60+
"serde".to_owned(),
61+
Dependency {
62+
version: "0.9".to_owned(),
63+
},
64+
);
65+
map
66+
},
67+
};
68+
assert_eq!(p, expected);
69+
}

0 commit comments

Comments
 (0)