armature_testing/
test_container.rs1use armature_core::{Container, Provider};
4
5pub struct TestContainer {
7 container: Container,
8}
9
10impl TestContainer {
11 pub fn new() -> Self {
13 Self {
14 container: Container::new(),
15 }
16 }
17
18 pub fn register<T: Provider + Clone + 'static>(&self, provider: T) {
20 self.container.register(provider);
21 }
22
23 pub fn register_mock<T: Provider + Clone + 'static>(&self, mock: T) {
25 self.container.register(mock);
26 }
27
28 pub fn get<T: Provider + Clone + 'static>(&self) -> Option<T> {
34 self.container.get::<T>().ok().map(|arc| (*arc).clone())
35 }
36
37 pub fn clear(&mut self) {
39 self.container = Container::new();
40 }
41
42 pub fn inner(&self) -> &Container {
44 &self.container
45 }
46}
47
48impl Default for TestContainer {
49 fn default() -> Self {
50 Self::new()
51 }
52}
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57
58 #[test]
59 fn test_container_creation() {
60 let _container = TestContainer::new();
61 }
62
63 #[derive(Clone)]
64 struct Widget {
65 value: u32,
66 }
67
68 #[test]
69 fn registered_provider_is_retrievable() {
70 let container = TestContainer::new();
71 container.register(Widget { value: 5 });
72
73 let widget = container
74 .get::<Widget>()
75 .expect("Widget should be registered");
76 assert_eq!(widget.value, 5);
77 }
78
79 #[test]
80 fn mock_provider_is_retrievable() {
81 let container = TestContainer::new();
82 container.register_mock(Widget { value: 11 });
83
84 let widget = container
85 .get::<Widget>()
86 .expect("Widget mock should be registered");
87 assert_eq!(widget.value, 11);
88 }
89
90 #[test]
91 fn unregistered_provider_returns_none() {
92 let container = TestContainer::new();
93 assert!(container.get::<Widget>().is_none());
94 }
95
96 #[test]
97 fn clear_removes_previously_registered_providers() {
98 let mut container = TestContainer::new();
99 container.register(Widget { value: 1 });
100 assert!(container.get::<Widget>().is_some());
101
102 container.clear();
103 assert!(container.get::<Widget>().is_none());
104 }
105}