Skip to content

Commit d314651

Browse files
committed
uefi: Adding unit test for EFI Shell Vars struct
1 parent 6b35e5a commit d314651

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

uefi/src/proto/shell/mod.rs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,64 @@ impl Shell {
146146
unsafe { (self.0.set_cur_dir)(fs_ptr.cast(), dir_ptr.cast()) }
147147
}
148148
}
149+
150+
#[cfg(test)]
151+
mod tests {
152+
use super::*;
153+
use alloc::vec::Vec;
154+
use uefi::cstr16;
155+
156+
/// Testing Vars struct
157+
#[test]
158+
fn test_vars() {
159+
// Empty Vars
160+
let mut vars_mock = Vec::<u16>::new();
161+
vars_mock.push(0);
162+
vars_mock.push(0);
163+
let mut vars = Vars {
164+
inner: vars_mock.as_ptr().cast(),
165+
placeholder: PhantomData,
166+
};
167+
assert!(vars.next().is_none());
168+
169+
// One environment variable in Vars
170+
let mut vars_mock = Vec::<u16>::new();
171+
vars_mock.push(b'f' as u16);
172+
vars_mock.push(b'o' as u16);
173+
vars_mock.push(b'o' as u16);
174+
vars_mock.push(0);
175+
vars_mock.push(0);
176+
let vars = Vars {
177+
inner: vars_mock.as_ptr().cast(),
178+
placeholder: PhantomData,
179+
};
180+
assert_eq!(vars.collect::<Vec<_>>(), Vec::from([cstr16!("foo")]));
181+
182+
// Multiple environment variables in Vars
183+
let mut vars_mock = Vec::<u16>::new();
184+
vars_mock.push(b'f' as u16);
185+
vars_mock.push(b'o' as u16);
186+
vars_mock.push(b'o' as u16);
187+
vars_mock.push(b'1' as u16);
188+
vars_mock.push(0);
189+
vars_mock.push(b'b' as u16);
190+
vars_mock.push(b'a' as u16);
191+
vars_mock.push(b'r' as u16);
192+
vars_mock.push(0);
193+
vars_mock.push(b'b' as u16);
194+
vars_mock.push(b'a' as u16);
195+
vars_mock.push(b'z' as u16);
196+
vars_mock.push(b'2' as u16);
197+
vars_mock.push(0);
198+
vars_mock.push(0);
199+
200+
let vars = Vars {
201+
inner: vars_mock.as_ptr().cast(),
202+
placeholder: PhantomData,
203+
};
204+
assert_eq!(
205+
vars.collect::<Vec<_>>(),
206+
Vec::from([cstr16!("foo1"), cstr16!("bar"), cstr16!("baz2")])
207+
);
208+
}
209+
}

0 commit comments

Comments
 (0)