1- #[ cfg( windows) ]
2- use std:: sync:: { LazyLock , Mutex , MutexGuard } ;
31use std:: {
42 io:: { BufRead , BufReader , IsTerminal , Read , Write , stderr, stdin, stdout} ,
53 time:: { Duration , Instant } ,
@@ -10,19 +8,10 @@ use portable_pty::CommandBuilder;
108use pty_terminal:: { geo:: ScreenSize , terminal:: Terminal } ;
119use subprocess_test:: command_for_fn;
1210
13- #[ cfg( windows) ]
14- fn windows_test_serial_guard ( ) -> MutexGuard < ' static , ( ) > {
15- static WINDOWS_TEST_MUTEX : LazyLock < Mutex < ( ) > > = LazyLock :: new ( || Mutex :: new ( ( ) ) ) ;
16- WINDOWS_TEST_MUTEX . lock ( ) . unwrap ( )
17- }
18-
1911#[ test]
2012#[ timeout( 5000 ) ]
2113#[ expect( clippy:: print_stdout, reason = "subprocess test output" ) ]
2214fn is_terminal ( ) {
23- #[ cfg( windows) ]
24- let _guard = windows_test_serial_guard ( ) ;
25-
2615 let cmd = CommandBuilder :: from ( command_for_fn ! ( ( ) , |( ) : ( ) | {
2716 println!( "{} {} {}" , stdin( ) . is_terminal( ) , stdout( ) . is_terminal( ) , stderr( ) . is_terminal( ) ) ;
2817 } ) ) ;
@@ -31,7 +20,7 @@ fn is_terminal() {
3120 Terminal :: spawn ( ScreenSize { rows : 80 , cols : 80 } , cmd) . unwrap ( ) ;
3221 let mut discard = Vec :: new ( ) ;
3322 pty_reader. read_to_end ( & mut discard) . unwrap ( ) ;
34- let _ = child_handle. wait ( ) ;
23+ let _ = child_handle. wait ( ) . unwrap ( ) ;
3524 let output = pty_reader. screen_contents ( ) ;
3625 assert_eq ! ( output. trim( ) , "true true true" ) ;
3726}
@@ -40,9 +29,6 @@ fn is_terminal() {
4029#[ timeout( 5000 ) ]
4130#[ expect( clippy:: print_stdout, reason = "subprocess test output" ) ]
4231fn write_basic_echo ( ) {
43- #[ cfg( windows) ]
44- let _guard = windows_test_serial_guard ( ) ;
45-
4632 let cmd = CommandBuilder :: from ( command_for_fn ! ( ( ) , |( ) : ( ) | {
4733 use std:: io:: { BufRead , Write , stdin, stdout} ;
4834 let stdin = stdin( ) ;
@@ -61,7 +47,7 @@ fn write_basic_echo() {
6147
6248 let mut discard = Vec :: new ( ) ;
6349 pty_reader. read_to_end ( & mut discard) . unwrap ( ) ;
64- let _ = child_handle. wait ( ) ;
50+ let _ = child_handle. wait ( ) . unwrap ( ) ;
6551
6652 let output = pty_reader. screen_contents ( ) ;
6753 // PTY echoes the input, so we see "hello world\nhello world"
@@ -72,9 +58,6 @@ fn write_basic_echo() {
7258#[ timeout( 5000 ) ]
7359#[ expect( clippy:: print_stdout, reason = "subprocess test output" ) ]
7460fn write_multiple_lines ( ) {
75- #[ cfg( windows) ]
76- let _guard = windows_test_serial_guard ( ) ;
77-
7861 let cmd = CommandBuilder :: from ( command_for_fn ! ( ( ) , |( ) : ( ) | {
7962 use std:: io:: { BufRead , Write , stdin, stdout} ;
8063 let stdin = stdin( ) ;
@@ -115,7 +98,7 @@ fn write_multiple_lines() {
11598
11699 let mut discard = Vec :: new ( ) ;
117100 pty_reader. read_to_end ( & mut discard) . unwrap ( ) ;
118- let _ = child_handle. wait ( ) ;
101+ let _ = child_handle. wait ( ) . unwrap ( ) ;
119102
120103 let output = pty_reader. screen_contents ( ) ;
121104 // PTY echoes input, then child prints "Echo: {line}\n" for each
@@ -126,9 +109,6 @@ fn write_multiple_lines() {
126109#[ timeout( 5000 ) ]
127110#[ expect( clippy:: print_stdout, reason = "subprocess test output" ) ]
128111fn write_after_exit ( ) {
129- #[ cfg( windows) ]
130- let _guard = windows_test_serial_guard ( ) ;
131-
132112 let cmd = CommandBuilder :: from ( command_for_fn ! ( ( ) , |( ) : ( ) | {
133113 print!( "exiting" ) ;
134114 } ) ) ;
@@ -139,7 +119,7 @@ fn write_after_exit() {
139119 // Read all output - this blocks until child exits and EOF is reached
140120 let mut discard = Vec :: new ( ) ;
141121 pty_reader. read_to_end ( & mut discard) . unwrap ( ) ;
142- let _ = child_handle. wait ( ) ;
122+ let _ = child_handle. wait ( ) . unwrap ( ) ;
143123
144124 // Writer shutdown is done by a background thread after child wait returns.
145125 // Poll briefly for the writer state to flip to closed before asserting write failure.
@@ -157,9 +137,6 @@ fn write_after_exit() {
157137#[ timeout( 5000 ) ]
158138#[ expect( clippy:: print_stdout, reason = "subprocess test output" ) ]
159139fn write_interactive_prompt ( ) {
160- #[ cfg( windows) ]
161- let _guard = windows_test_serial_guard ( ) ;
162-
163140 let cmd = CommandBuilder :: from ( command_for_fn ! ( ( ) , |( ) : ( ) | {
164141 use std:: io:: { Write , stdin, stdout} ;
165142 let mut stdout = stdout( ) ;
@@ -188,7 +165,7 @@ fn write_interactive_prompt() {
188165
189166 let mut discard = Vec :: new ( ) ;
190167 pty_reader. read_to_end ( & mut discard) . unwrap ( ) ;
191- let _ = child_handle. wait ( ) ;
168+ let _ = child_handle. wait ( ) . unwrap ( ) ;
192169
193170 let output = pty_reader. screen_contents ( ) ;
194171 assert_eq ! ( output. trim( ) , "Name: Alice\n Hello, Alice" ) ;
@@ -198,9 +175,6 @@ fn write_interactive_prompt() {
198175#[ timeout( 5000 ) ]
199176#[ expect( clippy:: print_stdout, reason = "subprocess test output" ) ]
200177fn resize_terminal ( ) {
201- #[ cfg( windows) ]
202- let _guard = windows_test_serial_guard ( ) ;
203-
204178 let cmd = CommandBuilder :: from ( command_for_fn ! ( ( ) , |( ) : ( ) | {
205179 use std:: io:: { Write , stdin, stdout} ;
206180 #[ cfg( unix) ]
@@ -298,9 +272,6 @@ fn resize_terminal() {
298272#[ timeout( 5000 ) ]
299273#[ expect( clippy:: print_stdout, reason = "subprocess test output" ) ]
300274fn send_ctrl_c_interrupts_process ( ) {
301- #[ cfg( windows) ]
302- let _guard = windows_test_serial_guard ( ) ;
303-
304275 let cmd = CommandBuilder :: from ( command_for_fn ! ( ( ) , |( ) : ( ) | {
305276 use std:: io:: { Write , stdout} ;
306277
@@ -367,9 +338,6 @@ fn send_ctrl_c_interrupts_process() {
367338#[ timeout( 5000 ) ]
368339#[ expect( clippy:: print_stdout, reason = "subprocess test output" ) ]
369340fn read_to_end_returns_exit_status_success ( ) {
370- #[ cfg( windows) ]
371- let _guard = windows_test_serial_guard ( ) ;
372-
373341 let cmd = CommandBuilder :: from ( command_for_fn ! ( ( ) , |( ) : ( ) | {
374342 println!( "success" ) ;
375343 } ) ) ;
@@ -378,17 +346,14 @@ fn read_to_end_returns_exit_status_success() {
378346 Terminal :: spawn ( ScreenSize { rows : 80 , cols : 80 } , cmd) . unwrap ( ) ;
379347 let mut discard = Vec :: new ( ) ;
380348 pty_reader. read_to_end ( & mut discard) . unwrap ( ) ;
381- let status = child_handle. wait ( ) ;
349+ let status = child_handle. wait ( ) . unwrap ( ) ;
382350 assert ! ( status. success( ) ) ;
383351 assert_eq ! ( status. exit_code( ) , 0 ) ;
384352}
385353
386354#[ test]
387355#[ timeout( 5000 ) ]
388356fn read_to_end_returns_exit_status_nonzero ( ) {
389- #[ cfg( windows) ]
390- let _guard = windows_test_serial_guard ( ) ;
391-
392357 let cmd = CommandBuilder :: from ( command_for_fn ! ( ( ) , |( ) : ( ) | {
393358 std:: process:: exit( 42 ) ;
394359 } ) ) ;
@@ -397,7 +362,7 @@ fn read_to_end_returns_exit_status_nonzero() {
397362 Terminal :: spawn ( ScreenSize { rows : 80 , cols : 80 } , cmd) . unwrap ( ) ;
398363 let mut discard = Vec :: new ( ) ;
399364 pty_reader. read_to_end ( & mut discard) . unwrap ( ) ;
400- let status = child_handle. wait ( ) ;
365+ let status = child_handle. wait ( ) . unwrap ( ) ;
401366 assert ! ( !status. success( ) ) ;
402367 assert_eq ! ( status. exit_code( ) , 42 ) ;
403368}
0 commit comments