mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			123 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
#![warn(rust_2018_idioms)]
 | 
						|
#![allow(clippy::declare_interior_mutable_const)]
 | 
						|
#![cfg(all(feature = "full", not(tokio_wasi)))]
 | 
						|
 | 
						|
use futures::future;
 | 
						|
use std::error::Error;
 | 
						|
use tokio::runtime::Builder;
 | 
						|
use tokio::task::{self, block_in_place};
 | 
						|
 | 
						|
mod support {
 | 
						|
    pub mod panic;
 | 
						|
}
 | 
						|
use support::panic::test_panic;
 | 
						|
 | 
						|
#[test]
 | 
						|
fn block_in_place_panic_caller() -> Result<(), Box<dyn Error>> {
 | 
						|
    let panic_location_file = test_panic(|| {
 | 
						|
        let rt = Builder::new_current_thread().enable_all().build().unwrap();
 | 
						|
        rt.block_on(async {
 | 
						|
            block_in_place(|| {});
 | 
						|
        });
 | 
						|
    });
 | 
						|
 | 
						|
    // The panic location should be in this file
 | 
						|
    assert_eq!(&panic_location_file.unwrap(), file!());
 | 
						|
 | 
						|
    Ok(())
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn local_set_spawn_local_panic_caller() -> Result<(), Box<dyn Error>> {
 | 
						|
    let panic_location_file = test_panic(|| {
 | 
						|
        let _local = task::LocalSet::new();
 | 
						|
 | 
						|
        let _ = task::spawn_local(async {});
 | 
						|
    });
 | 
						|
 | 
						|
    // The panic location should be in this file
 | 
						|
    assert_eq!(&panic_location_file.unwrap(), file!());
 | 
						|
 | 
						|
    Ok(())
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn local_set_block_on_panic_caller() -> Result<(), Box<dyn Error>> {
 | 
						|
    let panic_location_file = test_panic(|| {
 | 
						|
        let rt = Builder::new_current_thread().enable_all().build().unwrap();
 | 
						|
        let local = task::LocalSet::new();
 | 
						|
 | 
						|
        rt.block_on(async {
 | 
						|
            local.block_on(&rt, future::pending::<()>());
 | 
						|
        });
 | 
						|
    });
 | 
						|
 | 
						|
    // The panic location should be in this file
 | 
						|
    assert_eq!(&panic_location_file.unwrap(), file!());
 | 
						|
 | 
						|
    Ok(())
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn spawn_panic_caller() -> Result<(), Box<dyn Error>> {
 | 
						|
    let panic_location_file = test_panic(|| {
 | 
						|
        tokio::spawn(future::pending::<()>());
 | 
						|
    });
 | 
						|
 | 
						|
    // The panic location should be in this file
 | 
						|
    assert_eq!(&panic_location_file.unwrap(), file!());
 | 
						|
 | 
						|
    Ok(())
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn local_key_sync_scope_panic_caller() -> Result<(), Box<dyn Error>> {
 | 
						|
    tokio::task_local! {
 | 
						|
        static NUMBER: u32;
 | 
						|
    }
 | 
						|
 | 
						|
    let panic_location_file = test_panic(|| {
 | 
						|
        NUMBER.sync_scope(1, || {
 | 
						|
            NUMBER.with(|_| {
 | 
						|
                NUMBER.sync_scope(1, || {});
 | 
						|
            });
 | 
						|
        });
 | 
						|
    });
 | 
						|
 | 
						|
    // The panic location should be in this file
 | 
						|
    assert_eq!(&panic_location_file.unwrap(), file!());
 | 
						|
 | 
						|
    Ok(())
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn local_key_with_panic_caller() -> Result<(), Box<dyn Error>> {
 | 
						|
    tokio::task_local! {
 | 
						|
        static NUMBER: u32;
 | 
						|
    }
 | 
						|
 | 
						|
    let panic_location_file = test_panic(|| {
 | 
						|
        NUMBER.with(|_| {});
 | 
						|
    });
 | 
						|
 | 
						|
    // The panic location should be in this file
 | 
						|
    assert_eq!(&panic_location_file.unwrap(), file!());
 | 
						|
 | 
						|
    Ok(())
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn local_key_get_panic_caller() -> Result<(), Box<dyn Error>> {
 | 
						|
    tokio::task_local! {
 | 
						|
        static NUMBER: u32;
 | 
						|
    }
 | 
						|
 | 
						|
    let panic_location_file = test_panic(|| {
 | 
						|
        NUMBER.get();
 | 
						|
    });
 | 
						|
 | 
						|
    // The panic location should be in this file
 | 
						|
    assert_eq!(&panic_location_file.unwrap(), file!());
 | 
						|
 | 
						|
    Ok(())
 | 
						|
}
 |