forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			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(())
 | |
| }
 | 
