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