diff options
| author | HampusM <hampus@hampusmat.com> | 2022-10-09 20:41:09 +0200 | 
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2022-10-09 20:42:07 +0200 | 
| commit | fd5b6786d29d056ff0721a59435b50005f13f05c (patch) | |
| tree | 3839ff2ffa99a14d1aefb952a55f1cb05aa0f09e /src/di_container/binding_map.rs | |
| parent | 5b0c6a52022e67a2d9cee251b3d08b9cb2b5f6cb (diff) | |
test: add more unit tests
Diffstat (limited to 'src/di_container/binding_map.rs')
| -rw-r--r-- | src/di_container/binding_map.rs | 201 | 
1 files changed, 201 insertions, 0 deletions
| diff --git a/src/di_container/binding_map.rs b/src/di_container/binding_map.rs index eb71ff7..6ecd34c 100644 --- a/src/di_container/binding_map.rs +++ b/src/di_container/binding_map.rs @@ -89,3 +89,204 @@ where          self.bindings.len()      }  } + +#[cfg(test)] +mod tests +{ +    use super::*; + +    mod subjects +    { +        pub trait SomeProvider +        { +            fn get_id(&self) -> u8; +        } + +        pub struct SomeProviderImpl +        { +            pub id: u8, +        } + +        impl SomeProvider for SomeProviderImpl +        { +            fn get_id(&self) -> u8 +            { +                self.id +            } +        } +    } + +    #[test] +    fn can_get() +    { +        type Interface = (); + +        let mut binding_map = DIContainerBindingMap::<dyn subjects::SomeProvider>::new(); + +        binding_map.bindings.insert( +            DIContainerBindingKey { +                type_id: TypeId::of::<Interface>(), +                name: None, +            }, +            Box::new(subjects::SomeProviderImpl { id: 20 }), +        ); + +        assert!(binding_map +            .get::<Interface>(None) +            .map_or_else(|| false, |provider| provider.get_id() == 20)); +    } + +    #[test] +    fn can_get_with_name() +    { +        type Interface = (); + +        let mut binding_map = DIContainerBindingMap::<dyn subjects::SomeProvider>::new(); + +        binding_map.bindings.insert( +            DIContainerBindingKey { +                type_id: TypeId::of::<Interface>(), +                name: Some("hello"), +            }, +            Box::new(subjects::SomeProviderImpl { id: 11 }), +        ); + +        assert!(binding_map +            .get::<Interface>(Some("hello")) +            .map_or_else(|| false, |provider| provider.get_id() == 11)); + +        assert!(binding_map.get::<Interface>(None).is_none()); +    } + +    #[test] +    fn can_set() +    { +        type Interface = (); + +        let mut binding_map = DIContainerBindingMap::<dyn subjects::SomeProvider>::new(); + +        binding_map +            .set::<Interface>(None, Box::new(subjects::SomeProviderImpl { id: 65 })); + +        let expected_key = &DIContainerBindingKey { +            type_id: TypeId::of::<Interface>(), +            name: None, +        }; + +        assert!(binding_map.bindings.contains_key(expected_key)); + +        assert_eq!(binding_map.bindings[expected_key].get_id(), 65); +    } + +    #[test] +    fn can_set_with_name() +    { +        type Interface = (); + +        let mut binding_map = DIContainerBindingMap::<dyn subjects::SomeProvider>::new(); + +        binding_map.set::<Interface>( +            Some("special"), +            Box::new(subjects::SomeProviderImpl { id: 3 }), +        ); + +        let expected_key = &DIContainerBindingKey { +            type_id: TypeId::of::<Interface>(), +            name: Some("special"), +        }; + +        assert!(binding_map.bindings.contains_key(expected_key)); + +        assert_eq!(binding_map.bindings[expected_key].get_id(), 3); +    } + +    #[test] +    fn can_remove() +    { +        type Interface = (); + +        let mut binding_map = DIContainerBindingMap::<dyn subjects::SomeProvider>::new(); + +        binding_map.bindings.insert( +            DIContainerBindingKey { +                type_id: TypeId::of::<Interface>(), +                name: None, +            }, +            Box::new(subjects::SomeProviderImpl { id: 103 }), +        ); + +        binding_map.remove::<Interface>(None); + +        let expected_key = &DIContainerBindingKey { +            type_id: TypeId::of::<Interface>(), +            name: None, +        }; + +        assert!(!binding_map.bindings.contains_key(expected_key)); +    } + +    #[test] +    fn can_remove_with_name() +    { +        type Interface = (); + +        let mut binding_map = DIContainerBindingMap::<dyn subjects::SomeProvider>::new(); + +        binding_map.bindings.insert( +            DIContainerBindingKey { +                type_id: TypeId::of::<Interface>(), +                name: Some("cool"), +            }, +            Box::new(subjects::SomeProviderImpl { id: 42 }), +        ); + +        binding_map.remove::<Interface>(Some("cool")); + +        let expected_key = &DIContainerBindingKey { +            type_id: TypeId::of::<Interface>(), +            name: Some("cool"), +        }; + +        assert!(!binding_map.bindings.contains_key(expected_key)); +    } + +    #[test] +    fn can_get_has() +    { +        type Interface = (); + +        let mut binding_map = DIContainerBindingMap::<dyn subjects::SomeProvider>::new(); + +        assert!(!binding_map.has::<Interface>(None)); + +        binding_map.bindings.insert( +            DIContainerBindingKey { +                type_id: TypeId::of::<Interface>(), +                name: None, +            }, +            Box::new(subjects::SomeProviderImpl { id: 103 }), +        ); + +        assert!(binding_map.has::<Interface>(None)); +    } + +    #[test] +    fn can_get_has_with_name() +    { +        type Interface = (); + +        let mut binding_map = DIContainerBindingMap::<dyn subjects::SomeProvider>::new(); + +        assert!(!binding_map.has::<Interface>(Some("awesome"))); + +        binding_map.bindings.insert( +            DIContainerBindingKey { +                type_id: TypeId::of::<Interface>(), +                name: Some("awesome"), +            }, +            Box::new(subjects::SomeProviderImpl { id: 101 }), +        ); + +        assert!(binding_map.has::<Interface>(Some("awesome"))); +    } +} | 
