creator_simctl/
terminate.rs

1use super::{Device, Result, Validate};
2
3impl Device {
4    /// Terminates a running application with the given bundle ID on this
5    /// device.
6    pub fn terminate(&self, bundle_id: &str) -> Result<()> {
7        self.simctl()
8            .command("terminate")
9            .arg(&self.udid)
10            .arg(bundle_id)
11            .output()?
12            .validate()
13    }
14}
15
16#[cfg(test)]
17mod tests {
18    use serial_test::serial;
19    use std::sync::{Arc, Mutex};
20
21    use super::*;
22    use crate::mock;
23
24    #[test]
25    #[serial]
26    fn test_terminate() -> Result<()> {
27        mock::device()?.boot()?;
28
29        let result = Arc::new(Mutex::new(None));
30
31        std::thread::spawn({
32            let result = result.clone();
33
34            move || {
35                fn test_terminate_inner() -> Result<()> {
36                    std::thread::sleep(std::time::Duration::from_secs(1));
37
38                    mock::device()?.terminate("com.apple.mobilesafari")
39                }
40
41                let mut result = result.lock().unwrap();
42                result.replace(Some(test_terminate_inner()));
43            }
44        });
45
46        mock::device()?.launch("com.apple.mobilesafari").exec()?;
47
48        let result = result.lock().unwrap().take().flatten();
49        assert!(result.is_some());
50        assert!(result.unwrap().is_ok());
51
52        mock::device()?.shutdown()?;
53
54        Ok(())
55    }
56}