nick.rs

 1// Copyright (c) 2018 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
 2//
 3// This Source Code Form is subject to the terms of the Mozilla Public
 4// License, v. 2.0. If a copy of the MPL was not distributed with this
 5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
 6
 7generate_elem_id!(
 8    /// Represents a global, memorable, friendly or informal name chosen by a user.
 9    Nick,
10    "nick",
11    NICK
12);
13
14#[cfg(test)]
15mod tests {
16    use super::*;
17    #[cfg(not(feature = "disable-validation"))]
18    use crate::util::error::Error;
19    use crate::Element;
20    use std::convert::TryFrom;
21
22    #[cfg(target_pointer_width = "32")]
23    #[test]
24    fn test_size() {
25        assert_size!(Nick, 12);
26    }
27
28    #[cfg(target_pointer_width = "64")]
29    #[test]
30    fn test_size() {
31        assert_size!(Nick, 24);
32    }
33
34    #[test]
35    fn test_simple() {
36        let elem: Element = "<nick xmlns='http://jabber.org/protocol/nick'>Link Mauve</nick>"
37            .parse()
38            .unwrap();
39        let nick = Nick::try_from(elem).unwrap();
40        assert_eq!(&nick.0, "Link Mauve");
41    }
42
43    #[test]
44    fn test_serialise() {
45        let elem1 = Element::from(Nick(String::from("Link Mauve")));
46        let elem2: Element = "<nick xmlns='http://jabber.org/protocol/nick'>Link Mauve</nick>"
47            .parse()
48            .unwrap();
49        assert_eq!(elem1, elem2);
50    }
51
52    #[cfg(not(feature = "disable-validation"))]
53    #[test]
54    fn test_invalid() {
55        let elem: Element = "<nick xmlns='http://jabber.org/protocol/nick'><coucou/></nick>"
56            .parse()
57            .unwrap();
58        let error = Nick::try_from(elem).unwrap_err();
59        let message = match error {
60            Error::ParseError(string) => string,
61            _ => panic!(),
62        };
63        assert_eq!(message, "Unknown child in nick element.");
64    }
65
66    #[cfg(not(feature = "disable-validation"))]
67    #[test]
68    fn test_invalid_attribute() {
69        let elem: Element = "<nick xmlns='http://jabber.org/protocol/nick' coucou=''/>"
70            .parse()
71            .unwrap();
72        let error = Nick::try_from(elem).unwrap_err();
73        let message = match error {
74            Error::ParseError(string) => string,
75            _ => panic!(),
76        };
77        assert_eq!(message, "Unknown attribute in nick element.");
78    }
79}