Adding support also for Scope and more tests in the Extensions

This commit is contained in:
Augusto 2020-10-26 15:44:55 +01:00
parent 9d09ee9d44
commit fbbedbf53f
3 changed files with 47 additions and 2 deletions

View File

@ -66,6 +66,11 @@ impl Extensions {
pub fn extend(&mut self, other: Extensions) {
self.map.extend(other.map);
}
/// Returns `true` if no extension is registered
pub fn is_empty(&self) -> bool {
self.map.is_empty()
}
}
impl fmt::Debug for Extensions {
@ -93,6 +98,8 @@ mod tests {
fn test_clear() {
let mut map = Extensions::new();
assert!(map.is_empty());
map.insert::<i8>(8);
map.insert::<i16>(16);
map.insert::<i32>(32);
@ -100,12 +107,14 @@ mod tests {
assert!(map.contains::<i8>());
assert!(map.contains::<i16>());
assert!(map.contains::<i32>());
assert!(!map.is_empty());
map.clear();
assert!(!map.contains::<i8>());
assert!(!map.contains::<i16>());
assert!(!map.contains::<i32>());
assert!(map.is_empty());
map.insert::<i8>(10);
assert_eq!(*map.get::<i8>().unwrap(), 10);
@ -183,4 +192,34 @@ mod tests {
assert_eq!(extensions.get::<bool>(), None);
assert_eq!(extensions.get(), Some(&MyType(10)));
}
#[test]
fn test_extend() {
#[derive(Debug, PartialEq)]
struct MyType(i32);
let mut extensions = Extensions::new();
extensions.insert(5i32);
extensions.insert(MyType(10));
let mut other = Extensions::new();
other.insert(15i32);
other.insert(20u8);
extensions.extend(other);
assert_eq!(extensions.get(), Some(&15i32));
assert_eq!(extensions.get_mut(), Some(&mut 15i32));
assert_eq!(extensions.remove::<i32>(), Some(15i32));
assert!(extensions.get::<i32>().is_none());
assert_eq!(extensions.get::<bool>(), None);
assert_eq!(extensions.get(), Some(&MyType(10)));
assert_eq!(extensions.get(), Some(&20u8));
assert_eq!(extensions.get_mut(), Some(&20u8));
}
}

View File

@ -264,12 +264,12 @@ mod tests {
async fn test_data() {
let cfg = |cfg: &mut ServiceConfig| {
cfg.data(10usize);
cfg.app_data(10usize);
cfg.app_data(15u8);
};
let mut srv = init_service(App::new().configure(cfg).service(
web::resource("/").to(|_: web::Data<usize>, req: HttpRequest| {
assert_eq!(*req.app_data::<usize>().unwrap(), 10usize);
assert_eq!(*req.app_data::<u8>().unwrap(), 15u8);
HttpResponse::Ok()
}),
))

View File

@ -209,6 +209,12 @@ where
self.data = Some(data);
}
if !cfg.extensions.is_empty() {
let mut data = self.data.unwrap_or_else(Extensions::new);
data.extend(cfg.extensions);
self.data = Some(data);
}
self
}