futures_test/task/
panic_spawner.rs

1use futures_task::{FutureObj, Spawn, SpawnError};
2
3/// An implementation of [`Spawn`](futures_task::Spawn) that panics
4/// when used.
5///
6/// # Examples
7///
8/// ```should_panic
9/// use futures::task::SpawnExt;
10/// use futures_test::task::PanicSpawner;
11///
12/// let spawn = PanicSpawner::new();
13/// spawn.spawn(async { })?; // Will panic
14/// # Ok::<(), Box<dyn std::error::Error>>(())
15/// ```
16#[derive(Debug)]
17pub struct PanicSpawner {
18    _reserved: (),
19}
20
21impl PanicSpawner {
22    /// Create a new instance
23    pub fn new() -> Self {
24        Self { _reserved: () }
25    }
26}
27
28impl Spawn for PanicSpawner {
29    fn spawn_obj(&self, _future: FutureObj<'static, ()>) -> Result<(), SpawnError> {
30        panic!("should not spawn")
31    }
32}
33
34impl Default for PanicSpawner {
35    fn default() -> Self {
36        Self::new()
37    }
38}
39
40/// Get a reference to a singleton instance of [`PanicSpawner`].
41///
42/// # Examples
43///
44/// ```should_panic
45/// use futures::task::SpawnExt;
46/// use futures_test::task::panic_spawner_mut;
47///
48/// let spawner = panic_spawner_mut();
49/// spawner.spawn(async { })?; // Will panic
50/// # Ok::<(), Box<dyn std::error::Error>>(())
51/// ```
52pub fn panic_spawner_mut() -> &'static mut PanicSpawner {
53    Box::leak(Box::new(PanicSpawner::new()))
54}