forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![warn(rust_2018_idioms)]
 | |
| #![cfg(feature = "full")]
 | |
| 
 | |
| use tokio::runtime::Runtime;
 | |
| 
 | |
| #[test]
 | |
| fn basic_enter() {
 | |
|     let rt1 = rt();
 | |
|     let rt2 = rt();
 | |
| 
 | |
|     let enter1 = rt1.enter();
 | |
|     let enter2 = rt2.enter();
 | |
| 
 | |
|     drop(enter2);
 | |
|     drop(enter1);
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| #[should_panic]
 | |
| fn interleave_enter_different_rt() {
 | |
|     let rt1 = rt();
 | |
|     let rt2 = rt();
 | |
| 
 | |
|     let enter1 = rt1.enter();
 | |
|     let enter2 = rt2.enter();
 | |
| 
 | |
|     drop(enter1);
 | |
|     drop(enter2);
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| #[should_panic]
 | |
| fn interleave_enter_same_rt() {
 | |
|     let rt1 = rt();
 | |
| 
 | |
|     let _enter1 = rt1.enter();
 | |
|     let enter2 = rt1.enter();
 | |
|     let enter3 = rt1.enter();
 | |
| 
 | |
|     drop(enter2);
 | |
|     drop(enter3);
 | |
| }
 | |
| 
 | |
| #[test]
 | |
| #[cfg(not(tokio_wasi))]
 | |
| fn interleave_then_enter() {
 | |
|     let _ = std::panic::catch_unwind(|| {
 | |
|         let rt1 = rt();
 | |
|         let rt2 = rt();
 | |
| 
 | |
|         let enter1 = rt1.enter();
 | |
|         let enter2 = rt2.enter();
 | |
| 
 | |
|         drop(enter1);
 | |
|         drop(enter2);
 | |
|     });
 | |
| 
 | |
|     // Can still enter
 | |
|     let rt3 = rt();
 | |
|     let _enter = rt3.enter();
 | |
| }
 | |
| 
 | |
| fn rt() -> Runtime {
 | |
|     tokio::runtime::Builder::new_current_thread()
 | |
|         .build()
 | |
|         .unwrap()
 | |
| }
 | 
