@@ -296,6 +296,7 @@ mod tests {
296
296
use super :: * ;
297
297
use crate :: components:: echo:: Echo ;
298
298
use crate :: testing:: SuperConsoleTestingExt ;
299
+ use crate :: testing:: TestOutput ;
299
300
use crate :: testing:: frame_contains;
300
301
use crate :: testing:: test_console;
301
302
@@ -451,4 +452,139 @@ mod tests {
451
452
}
452
453
Ok ( ( ) )
453
454
}
455
+
456
+ #[ test]
457
+ fn test_emit_aux ( ) -> anyhow:: Result < ( ) > {
458
+ let mut console = test_console ( ) ;
459
+
460
+ let root = Echo ( Lines ( vec ! [ vec![ "state" ] . try_into( ) ?] ) ) ;
461
+
462
+ // Emit auxiliary output
463
+ console. emit_aux ( Lines ( vec ! [ vec![ "aux line 1" ] . try_into( ) ?] ) ) ;
464
+ console. render ( & root) ?;
465
+
466
+ // Since we emit aux, we don't output the whole frame once in TestConsole
467
+ let frame: Vec < u8 > = console
468
+ . test_output_mut ( ) ?
469
+ . frames
470
+ . iter ( )
471
+ . flatten ( )
472
+ . copied ( )
473
+ . collect ( ) ;
474
+
475
+ assert ! ( frame_contains( & frame, "state" ) ) ;
476
+ assert ! ( frame_contains(
477
+ & frame,
478
+ TestOutput :: aux_output_with_prefix( "aux line 1" ) ,
479
+ ) ) ;
480
+
481
+ Ok ( ( ) )
482
+ }
483
+
484
+ #[ test]
485
+ fn test_emit_aux_multiple_lines ( ) -> anyhow:: Result < ( ) > {
486
+ let mut console = test_console ( ) ;
487
+
488
+ let root = Echo ( Lines ( vec ! [ vec![ "state" ] . try_into( ) ?] ) ) ;
489
+
490
+ // Emit multiple auxiliary output lines
491
+ console. emit_aux ( Lines ( vec ! [
492
+ vec![ "aux line 1" ] . try_into( ) ?,
493
+ vec![ "aux line 2" ] . try_into( ) ?,
494
+ vec![ "aux line 3" ] . try_into( ) ?,
495
+ ] ) ) ;
496
+ console. render ( & root) ?;
497
+
498
+ // Since we emit aux, we don't output the whole frame once in TestConsole
499
+ let frame: Vec < u8 > = console
500
+ . test_output_mut ( ) ?
501
+ . frames
502
+ . iter ( )
503
+ . flatten ( )
504
+ . copied ( )
505
+ . collect ( ) ;
506
+
507
+ println ! ( "frame: {:?}" , String :: from_utf8_lossy( & frame) ) ;
508
+
509
+ assert ! ( frame_contains( & frame, "state" ) ) ;
510
+ assert ! ( frame_contains(
511
+ & frame,
512
+ TestOutput :: aux_output_with_prefix( "aux line 1" )
513
+ ) ) ;
514
+ // Only the first line of a render of aux output is prefixed
515
+ assert ! ( frame_contains( & frame, "aux line 2" ) ) ;
516
+ assert ! ( frame_contains( & frame, "aux line 3" ) ) ;
517
+
518
+ Ok ( ( ) )
519
+ }
520
+
521
+ #[ test]
522
+ fn test_block_aux_lines ( ) -> anyhow:: Result < ( ) > {
523
+ let mut console = test_console ( ) ;
524
+
525
+ let root = Echo ( Lines ( vec ! [ vec![ "state" ] . try_into( ) ?] ) ) ;
526
+
527
+ // Block rendering and emit auxiliary output
528
+ console. test_output_mut ( ) ?. should_render = false ;
529
+ console. emit_aux ( Lines ( vec ! [ vec![ "aux line 1" ] . try_into( ) ?] ) ) ;
530
+ console. render ( & root) ?;
531
+ assert_eq ! ( console. test_output( ) ?. frames. len( ) , 0 ) ;
532
+
533
+ // Unblock rendering and check if auxiliary output is rendered
534
+ console. test_output_mut ( ) ?. should_render = true ;
535
+ console. emit_aux ( Lines ( vec ! [ vec![ "aux line 2" ] . try_into( ) ?] ) ) ;
536
+ console. render ( & root) ?;
537
+
538
+ // Since we emit aux, we don't output the whole frame once in TestConsole
539
+ let frame: Vec < u8 > = console
540
+ . test_output_mut ( ) ?
541
+ . frames
542
+ . iter ( )
543
+ . flatten ( )
544
+ . copied ( )
545
+ . collect ( ) ;
546
+
547
+ assert ! ( frame_contains( & frame, "state" ) ) ;
548
+ assert ! ( frame_contains(
549
+ & frame,
550
+ TestOutput :: aux_output_with_prefix( "aux line 1" )
551
+ ) ) ;
552
+ assert ! ( frame_contains( & frame, "aux line 2" ) ) ;
553
+
554
+ Ok ( ( ) )
555
+ }
556
+
557
+ #[ test]
558
+ fn test_emit_and_emit_aux ( ) -> anyhow:: Result < ( ) > {
559
+ let mut console = test_console ( ) ;
560
+
561
+ let root = Echo ( Lines ( vec ! [ vec![ "state" ] . try_into( ) ?] ) ) ;
562
+
563
+ // Emit both regular and auxiliary output
564
+ console. emit ( Lines ( vec ! [ vec![ "regular line 1" ] . try_into( ) ?] ) ) ;
565
+ console. emit ( Lines ( vec ! [ vec![ "regular line 2" ] . try_into( ) ?] ) ) ;
566
+ console. emit_aux ( Lines ( vec ! [ vec![ "aux line 1" ] . try_into( ) ?] ) ) ;
567
+ console. emit_aux ( Lines ( vec ! [ vec![ "aux line 2" ] . try_into( ) ?] ) ) ;
568
+ console. render ( & root) ?;
569
+
570
+ // Since we emit aux, we don't output the whole frame once in TestConsole
571
+ let frame: Vec < u8 > = console
572
+ . test_output_mut ( ) ?
573
+ . frames
574
+ . iter ( )
575
+ . flatten ( )
576
+ . copied ( )
577
+ . collect ( ) ;
578
+
579
+ assert ! ( frame_contains( & frame, "state" ) ) ;
580
+ assert ! ( frame_contains( & frame, "regular line 1" ) ) ;
581
+ assert ! ( frame_contains( & frame, "regular line 2" ) ) ;
582
+ assert ! ( frame_contains(
583
+ & frame,
584
+ TestOutput :: aux_output_with_prefix( "aux line 1" )
585
+ ) ) ;
586
+ assert ! ( frame_contains( & frame, "aux line 2" ) ) ;
587
+
588
+ Ok ( ( ) )
589
+ }
454
590
}
0 commit comments