@@ -5,6 +5,9 @@ use self::States::*;
55
66use std:: iter:: repeat;
77
8+ #[ cfg( test) ]
9+ mod tests;
10+
811#[ derive( Clone , Copy , PartialEq ) ]
912enum States {
1013 Nothing ,
@@ -526,144 +529,3 @@ fn format(val: Param, op: FormatOp, flags: Flags) -> Result<Vec<u8>, String> {
526529 }
527530 Ok ( s)
528531}
529-
530- #[ cfg( test) ]
531- mod test {
532- use super :: { expand, Variables } ;
533- use super :: Param :: { self , Words , Number } ;
534- use std:: result:: Result :: Ok ;
535-
536- #[ test]
537- fn test_basic_setabf ( ) {
538- let s = b"\\ E[48;5;%p1%dm" ;
539- assert_eq ! ( expand( s, & [ Number ( 1 ) ] , & mut Variables :: new( ) ) . unwrap( ) ,
540- "\\ E[48;5;1m" . bytes( ) . collect:: <Vec <_>>( ) ) ;
541- }
542-
543- #[ test]
544- fn test_multiple_int_constants ( ) {
545- assert_eq ! ( expand( b"%{1}%{2}%d%d" , & [ ] , & mut Variables :: new( ) ) . unwrap( ) ,
546- "21" . bytes( ) . collect:: <Vec <_>>( ) ) ;
547- }
548-
549- #[ test]
550- fn test_op_i ( ) {
551- let mut vars = Variables :: new ( ) ;
552- assert_eq ! ( expand( b"%p1%d%p2%d%p3%d%i%p1%d%p2%d%p3%d" ,
553- & [ Number ( 1 ) , Number ( 2 ) , Number ( 3 ) ] ,
554- & mut vars) ,
555- Ok ( "123233" . bytes( ) . collect:: <Vec <_>>( ) ) ) ;
556- assert_eq ! ( expand( b"%p1%d%p2%d%i%p1%d%p2%d" , & [ ] , & mut vars) ,
557- Ok ( "0011" . bytes( ) . collect:: <Vec <_>>( ) ) ) ;
558- }
559-
560- #[ test]
561- fn test_param_stack_failure_conditions ( ) {
562- let mut varstruct = Variables :: new ( ) ;
563- let vars = & mut varstruct;
564- fn get_res ( fmt : & str ,
565- cap : & str ,
566- params : & [ Param ] ,
567- vars : & mut Variables )
568- -> Result < Vec < u8 > , String > {
569- let mut u8v: Vec < _ > = fmt. bytes ( ) . collect ( ) ;
570- u8v. extend ( cap. as_bytes ( ) . iter ( ) . map ( |& b| b) ) ;
571- expand ( & u8v, params, vars)
572- }
573-
574- let caps = [ "%d" , "%c" , "%s" , "%Pa" , "%l" , "%!" , "%~" ] ;
575- for & cap in caps. iter ( ) {
576- let res = get_res ( "" , cap, & [ ] , vars) ;
577- assert ! ( res. is_err( ) ,
578- "Op {} succeeded incorrectly with 0 stack entries" ,
579- cap) ;
580- let p = if cap == "%s" || cap == "%l" {
581- Words ( "foo" . to_string ( ) )
582- } else {
583- Number ( 97 )
584- } ;
585- let res = get_res ( "%p1" , cap, & [ p] , vars) ;
586- assert ! ( res. is_ok( ) ,
587- "Op {} failed with 1 stack entry: {}" ,
588- cap,
589- res. unwrap_err( ) ) ;
590- }
591- let caps = [ "%+" , "%-" , "%*" , "%/" , "%m" , "%&" , "%|" , "%A" , "%O" ] ;
592- for & cap in caps. iter ( ) {
593- let res = expand ( cap. as_bytes ( ) , & [ ] , vars) ;
594- assert ! ( res. is_err( ) ,
595- "Binop {} succeeded incorrectly with 0 stack entries" ,
596- cap) ;
597- let res = get_res ( "%{1}" , cap, & [ ] , vars) ;
598- assert ! ( res. is_err( ) ,
599- "Binop {} succeeded incorrectly with 1 stack entry" ,
600- cap) ;
601- let res = get_res ( "%{1}%{2}" , cap, & [ ] , vars) ;
602- assert ! ( res. is_ok( ) ,
603- "Binop {} failed with 2 stack entries: {}" ,
604- cap,
605- res. unwrap_err( ) ) ;
606- }
607- }
608-
609- #[ test]
610- fn test_push_bad_param ( ) {
611- assert ! ( expand( b"%pa" , & [ ] , & mut Variables :: new( ) ) . is_err( ) ) ;
612- }
613-
614- #[ test]
615- fn test_comparison_ops ( ) {
616- let v = [ ( '<' , [ 1u8 , 0u8 , 0u8 ] ) , ( '=' , [ 0u8 , 1u8 , 0u8 ] ) , ( '>' , [ 0u8 , 0u8 , 1u8 ] ) ] ;
617- for & ( op, bs) in v. iter ( ) {
618- let s = format ! ( "%{{1}}%{{2}}%{}%d" , op) ;
619- let res = expand ( s. as_bytes ( ) , & [ ] , & mut Variables :: new ( ) ) ;
620- assert ! ( res. is_ok( ) , res. unwrap_err( ) ) ;
621- assert_eq ! ( res. unwrap( ) , vec![ b'0' + bs[ 0 ] ] ) ;
622- let s = format ! ( "%{{1}}%{{1}}%{}%d" , op) ;
623- let res = expand ( s. as_bytes ( ) , & [ ] , & mut Variables :: new ( ) ) ;
624- assert ! ( res. is_ok( ) , res. unwrap_err( ) ) ;
625- assert_eq ! ( res. unwrap( ) , vec![ b'0' + bs[ 1 ] ] ) ;
626- let s = format ! ( "%{{2}}%{{1}}%{}%d" , op) ;
627- let res = expand ( s. as_bytes ( ) , & [ ] , & mut Variables :: new ( ) ) ;
628- assert ! ( res. is_ok( ) , res. unwrap_err( ) ) ;
629- assert_eq ! ( res. unwrap( ) , vec![ b'0' + bs[ 2 ] ] ) ;
630- }
631- }
632-
633- #[ test]
634- fn test_conditionals ( ) {
635- let mut vars = Variables :: new ( ) ;
636- let s = b"\\ E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m" ;
637- let res = expand ( s, & [ Number ( 1 ) ] , & mut vars) ;
638- assert ! ( res. is_ok( ) , res. unwrap_err( ) ) ;
639- assert_eq ! ( res. unwrap( ) , "\\ E[31m" . bytes( ) . collect:: <Vec <_>>( ) ) ;
640- let res = expand ( s, & [ Number ( 8 ) ] , & mut vars) ;
641- assert ! ( res. is_ok( ) , res. unwrap_err( ) ) ;
642- assert_eq ! ( res. unwrap( ) , "\\ E[90m" . bytes( ) . collect:: <Vec <_>>( ) ) ;
643- let res = expand ( s, & [ Number ( 42 ) ] , & mut vars) ;
644- assert ! ( res. is_ok( ) , res. unwrap_err( ) ) ;
645- assert_eq ! ( res. unwrap( ) , "\\ E[38;5;42m" . bytes( ) . collect:: <Vec <_>>( ) ) ;
646- }
647-
648- #[ test]
649- fn test_format ( ) {
650- let mut varstruct = Variables :: new ( ) ;
651- let vars = & mut varstruct;
652- assert_eq ! ( expand( b"%p1%s%p2%2s%p3%2s%p4%.2s" ,
653- & [ Words ( "foo" . to_string( ) ) ,
654- Words ( "foo" . to_string( ) ) ,
655- Words ( "f" . to_string( ) ) ,
656- Words ( "foo" . to_string( ) ) ] ,
657- vars) ,
658- Ok ( "foofoo ffo" . bytes( ) . collect:: <Vec <_>>( ) ) ) ;
659- assert_eq ! ( expand( b"%p1%:-4.2s" , & [ Words ( "foo" . to_string( ) ) ] , vars) ,
660- Ok ( "fo " . bytes( ) . collect:: <Vec <_>>( ) ) ) ;
661-
662- assert_eq ! ( expand( b"%p1%d%p1%.3d%p1%5d%p1%:+d" , & [ Number ( 1 ) ] , vars) ,
663- Ok ( "1001 1+1" . bytes( ) . collect:: <Vec <_>>( ) ) ) ;
664- assert_eq ! ( expand( b"%p1%o%p1%#o%p2%6.4x%p2%#6.4X" ,
665- & [ Number ( 15 ) , Number ( 27 ) ] ,
666- vars) ,
667- Ok ( "17017 001b0X001B" . bytes( ) . collect:: <Vec <_>>( ) ) ) ;
668- }
669- }
0 commit comments