extern crate accept_encoding;
extern crate failure;
use accept_encoding::Encoding;
use failure::Error;
use http::header::{HeaderMap, HeaderValue, ACCEPT_ENCODING};
#[test]
fn single_encoding() -> Result<(), Error> {
let mut headers = HeaderMap::new();
headers.insert(ACCEPT_ENCODING, HeaderValue::from_str("gzip")?);
let encoding = accept_encoding::parse(&headers)?.unwrap();
assert_eq!(encoding, Encoding::Gzip);
Ok(())
}
#[test]
fn multiple_encodings() -> Result<(), Error> {
let mut headers = HeaderMap::new();
headers.insert(ACCEPT_ENCODING, HeaderValue::from_str("gzip, deflate, br")?);
let encoding = accept_encoding::parse(&headers)?.unwrap();
assert_eq!(encoding, Encoding::Gzip);
Ok(())
}
#[test]
fn single_encoding_with_qval() -> Result<(), Error> {
let mut headers = HeaderMap::new();
headers.insert(ACCEPT_ENCODING, HeaderValue::from_str("deflate;q=1.0")?);
let encoding = accept_encoding::parse(&headers)?.unwrap();
assert_eq!(encoding, Encoding::Deflate);
Ok(())
}
#[test]
fn multiple_encodings_with_qval_1() -> Result<(), Error> {
let mut headers = HeaderMap::new();
headers.insert(
ACCEPT_ENCODING,
HeaderValue::from_str("deflate, gzip;q=1.0, *;q=0.5")?,
);
let encoding = accept_encoding::parse(&headers)?.unwrap();
assert_eq!(encoding, Encoding::Deflate);
Ok(())
}
#[test]
fn multiple_encodings_with_qval_2() -> Result<(), Error> {
let mut headers = HeaderMap::new();
headers.insert(
ACCEPT_ENCODING,
HeaderValue::from_str("gzip;q=0.5, deflate;q=1.0, *;q=0.5")?,
);
let encoding = accept_encoding::parse(&headers)?.unwrap();
assert_eq!(encoding, Encoding::Deflate);
Ok(())
}
#[test]
fn multiple_encodings_with_qval_3() -> Result<(), Error> {
let mut headers = HeaderMap::new();
headers.insert(
ACCEPT_ENCODING,
HeaderValue::from_str("gzip;q=0.5, deflate;q=0.75, *;q=1.0")?,
);
let encoding = accept_encoding::parse(&headers)?;
assert!(encoding.is_none());
Ok(())
}
#[test]
fn list_encodings() -> Result<(), Error> {
use accept_encoding::Encoding;
let mut headers = HeaderMap::new();
headers.insert(
ACCEPT_ENCODING,
HeaderValue::from_str("zstd;q=1.0, deflate;q=0.8, br;q=0.9")?,
);
let encodings = accept_encoding::encodings(&headers)?;
assert_eq!(encodings[0], (Some(Encoding::Zstd), 1.0));
assert_eq!(encodings[1], (Some(Encoding::Deflate), 0.8));
assert_eq!(encodings[2], (Some(Encoding::Brotli), 0.9));
Ok(())
}
#[test]
fn list_encodings_ignore_unknown() -> Result<(), Error> {
use accept_encoding::Encoding;
let mut headers = HeaderMap::new();
headers.insert(
ACCEPT_ENCODING,
HeaderValue::from_str("zstd;q=1.0, unknown;q=0.8, br;q=0.9")?,
);
let encodings = accept_encoding::encodings(&headers)?;
assert_eq!(encodings[0], (Some(Encoding::Zstd), 1.0));
assert_eq!(encodings[1], (Some(Encoding::Brotli), 0.9));
Ok(())
}