1 use super::*;
2 use crate::lexer::END_LINE;
3 use crate::util::ATTRIBUTE_KEY;
4
5 use std::io::BufReader;
6 use std::iter::Iterator;
7
8 const EXAMPLE_ATTR_EXTMAP1: &str = "extmap:1 http://example.com/082005/ext.htm#ttime";
9 const EXAMPLE_ATTR_EXTMAP2: &str =
10 "extmap:2/sendrecv http://example.com/082005/ext.htm#xmeta short";
11 const FAILING_ATTR_EXTMAP1: &str =
12 "extmap:257/sendrecv http://example.com/082005/ext.htm#xmeta short";
13 const FAILING_ATTR_EXTMAP2: &str = "extmap:2/blorg http://example.com/082005/ext.htm#xmeta short";
14
15 #[test]
test_extmap() -> Result<()>16 fn test_extmap() -> Result<()> {
17 let example_attr_extmap1_line = EXAMPLE_ATTR_EXTMAP1;
18 let example_attr_extmap2_line = EXAMPLE_ATTR_EXTMAP2;
19 let failing_attr_extmap1_line = format!("{ATTRIBUTE_KEY}{FAILING_ATTR_EXTMAP1}{END_LINE}");
20 let failing_attr_extmap2_line = format!("{ATTRIBUTE_KEY}{FAILING_ATTR_EXTMAP2}{END_LINE}");
21 let passingtests = vec![
22 (EXAMPLE_ATTR_EXTMAP1, example_attr_extmap1_line),
23 (EXAMPLE_ATTR_EXTMAP2, example_attr_extmap2_line),
24 ];
25 let failingtests = vec![
26 (FAILING_ATTR_EXTMAP1, failing_attr_extmap1_line),
27 (FAILING_ATTR_EXTMAP2, failing_attr_extmap2_line),
28 ];
29
30 for (i, u) in passingtests.iter().enumerate() {
31 let mut reader = BufReader::new(u.1.as_bytes());
32 let actual = ExtMap::unmarshal(&mut reader)?;
33 assert_eq!(
34 actual.marshal(),
35 u.1,
36 "{}: {} vs {}",
37 i,
38 u.1,
39 actual.marshal()
40 );
41 }
42
43 for u in failingtests {
44 let mut reader = BufReader::new(u.1.as_bytes());
45 let actual = ExtMap::unmarshal(&mut reader);
46 assert!(actual.is_err());
47 }
48
49 Ok(())
50 }
51
52 #[test]
test_transport_cc_extmap() -> Result<()>53 fn test_transport_cc_extmap() -> Result<()> {
54 // a=extmap:<value>["/"<direction>] <URI> <extensionattributes>
55 // a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
56 let uri = Some(Url::parse(
57 "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",
58 )?);
59 let e = ExtMap {
60 value: 3,
61 uri,
62 direction: Direction::Unspecified,
63 ext_attr: None,
64 };
65
66 let s = e.marshal();
67 if s == "3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01" {
68 panic!("TestTransportCC failed");
69 } else {
70 assert_eq!(
71 s,
72 "extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"
73 )
74 }
75
76 Ok(())
77 }
78