From fbbedbf53f38768ee62a6f7c9b31f5113ddf3911 Mon Sep 17 00:00:00 2001 From: Augusto Date: Mon, 26 Oct 2020 15:44:55 +0100 Subject: [PATCH] Adding support also for Scope and more tests in the Extensions --- actix-http/src/extensions.rs | 39 ++++++++++++++++++++++++++++++++++++ src/config.rs | 4 ++-- src/scope.rs | 6 ++++++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/actix-http/src/extensions.rs b/actix-http/src/extensions.rs index 6436c5c29..fc09da472 100644 --- a/actix-http/src/extensions.rs +++ b/actix-http/src/extensions.rs @@ -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::(8); map.insert::(16); map.insert::(32); @@ -100,12 +107,14 @@ mod tests { assert!(map.contains::()); assert!(map.contains::()); assert!(map.contains::()); + assert!(!map.is_empty()); map.clear(); assert!(!map.contains::()); assert!(!map.contains::()); assert!(!map.contains::()); + assert!(map.is_empty()); map.insert::(10); assert_eq!(*map.get::().unwrap(), 10); @@ -183,4 +192,34 @@ mod tests { assert_eq!(extensions.get::(), 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::(), Some(15i32)); + assert!(extensions.get::().is_none()); + + assert_eq!(extensions.get::(), None); + assert_eq!(extensions.get(), Some(&MyType(10))); + + assert_eq!(extensions.get(), Some(&20u8)); + assert_eq!(extensions.get_mut(), Some(&20u8)); + } } diff --git a/src/config.rs b/src/config.rs index 116ccd529..03ba82732 100644 --- a/src/config.rs +++ b/src/config.rs @@ -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, req: HttpRequest| { - assert_eq!(*req.app_data::().unwrap(), 10usize); + assert_eq!(*req.app_data::().unwrap(), 15u8); HttpResponse::Ok() }), )) diff --git a/src/scope.rs b/src/scope.rs index 1c5d8700b..9a7cd5279 100644 --- a/src/scope.rs +++ b/src/scope.rs @@ -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 }