diff options
| -rw-r--r-- | Cargo.toml | 3 | ||||
| -rw-r--r-- | src/agent.rs | 53 | 
2 files changed, 56 insertions, 0 deletions
| @@ -17,6 +17,9 @@ include = [  [features]  default = [] +[dev-dependencies] +serde_json = "1.0" +  [dependencies]  num-traits = "0.2"  num-derive = "0.3" diff --git a/src/agent.rs b/src/agent.rs index 11f81d1..bb5acd6 100644 --- a/src/agent.rs +++ b/src/agent.rs @@ -730,3 +730,56 @@ impl Agent<Character> {          self.character().name()      }  } + +#[cfg(all(feature = "serde", test))] +mod tests { +    use super::*; + +    fn agent() -> Agent { +        Agent { +            addr: 0xdeadbeef, +            kind: AgentKind::Character(Character { +                id: 0xf00, +                name: "Foo Bar".into(), +            }), +            toughness: -13, +            concentration: -14, +            healing: -15, +            condition: -16, +            instance_id: 1337, +            first_aware: 0, +            last_aware: 0xffffff, +            master_agent: None, +            phantom_data: PhantomData, +        } +    } + +    #[test] +    fn serialization() { +        let agent = agent(); +        let json = serde_json::to_string(&agent).unwrap(); +        let expected = r#"{"addr":3735928559,"kind":{"Character":{"id":3840,"name":"Foo Bar"}},"toughness":-13,"concentration":-14,"healing":-15,"condition":-16,"instance_id":1337,"first_aware":0,"last_aware":16777215,"master_agent":null}"#; +        assert_eq!(json, expected); +    } + +    #[test] +    fn deserialization() { +        let json = r#"{"addr":3735928559,"kind":{"Character":{"id":3840,"name":"Foo Bar"}},"toughness":-13,"concentration":-14,"healing":-15,"condition":-16,"instance_id":1337,"first_aware":0,"last_aware":16777215,"master_agent":null}"#; +        let deserialized: Agent = serde_json::from_str(json).unwrap(); +        assert_eq!(deserialized, agent()); +    } + +    #[test] +    #[should_panic(expected = "missing field `master_agent`")] +    fn deserialization_missing_field() { +        let json = r#"{"addr":3735928559,"kind":{"Character":{"id":3840,"name":"Foo Bar"}},"toughness":-13,"concentration":-14,"healing":-15,"condition":-16,"instance_id":1337,"first_aware":0,"last_aware":16777215}"#; +        serde_json::from_str::<Agent>(json).unwrap(); +    } + +    #[test] +    #[should_panic(expected = "duplicate field `master_agent`")] +    fn deserialization_duplicated_field() { +        let json = r#"{"addr":3735928559,"kind":{"Character":{"id":3840,"name":"Foo Bar"}},"toughness":-13,"concentration":-14,"healing":-15,"condition":-16,"instance_id":1337,"first_aware":0,"last_aware":16777215,"master_agent":null,"master_agent":null}"#; +        serde_json::from_str::<Agent>(json).unwrap(); +    } +} | 
