message_correct.rs

 1// Copyright (c) 2017 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
 7use ns;
 8
 9generate_element_with_only_attributes!(Replace, "replace", ns::MESSAGE_CORRECT, [
10    id: String = "id" => required,
11]);
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16    use try_from::TryFrom;
17    use minidom::Element;
18    use error::Error;
19
20    #[test]
21    fn test_simple() {
22        let elem: Element = "<replace xmlns='urn:xmpp:message-correct:0' id='coucou'/>".parse().unwrap();
23        Replace::try_from(elem).unwrap();
24    }
25
26    #[test]
27    fn test_invalid_attribute() {
28        let elem: Element = "<replace xmlns='urn:xmpp:message-correct:0' coucou=''/>".parse().unwrap();
29        let error = Replace::try_from(elem).unwrap_err();
30        let message = match error {
31            Error::ParseError(string) => string,
32            _ => panic!(),
33        };
34        assert_eq!(message, "Unknown attribute in replace element.");
35    }
36
37    #[test]
38    fn test_invalid_child() {
39        let elem: Element = "<replace xmlns='urn:xmpp:message-correct:0'><coucou/></replace>".parse().unwrap();
40        let error = Replace::try_from(elem).unwrap_err();
41        let message = match error {
42            Error::ParseError(string) => string,
43            _ => panic!(),
44        };
45        assert_eq!(message, "Unknown child in replace element.");
46    }
47
48    #[test]
49    fn test_invalid_id() {
50        let elem: Element = "<replace xmlns='urn:xmpp:message-correct:0'/>".parse().unwrap();
51        let error = Replace::try_from(elem).unwrap_err();
52        let message = match error {
53            Error::ParseError(string) => string,
54            _ => panic!(),
55        };
56        assert_eq!(message, "Required attribute 'id' missing.");
57    }
58
59    #[test]
60    fn test_serialise() {
61        let elem: Element = "<replace xmlns='urn:xmpp:message-correct:0' id='coucou'/>".parse().unwrap();
62        let replace = Replace { id: String::from("coucou") };
63        let elem2 = replace.into();
64        assert_eq!(elem, elem2);
65    }
66}