@@ -286,7 +286,6 @@ suite('CommandLineAutoApprover', () => {
286
286
} ) ;
287
287
288
288
ok ( isAutoApproved ( 'echo hello world' ) ) ;
289
- ok ( ! isAutoApproved ( ' echo hello' ) ) ;
290
289
} ) ;
291
290
292
291
test ( 'should be case-sensitive by default' , ( ) => {
@@ -618,4 +617,90 @@ suite('CommandLineAutoApprover', () => {
618
617
} ) ;
619
618
} ) ;
620
619
} ) ;
620
+
621
+ suite ( 'environment variable handling' , ( ) => {
622
+ test ( 'should handle environment variable assignments before commands in bash/sh' , ( ) => {
623
+ shell = 'bash' ;
624
+ os = OperatingSystem . Linux ;
625
+
626
+ setAutoApprove ( {
627
+ "env" : true ,
628
+ "echo" : true
629
+ } ) ;
630
+
631
+ ok ( isAutoApproved ( 'FOO=bar env' ) , 'Basic environment variable assignment' ) ;
632
+ ok ( isAutoApproved ( 'FOO=bar echo test' ) , 'Basic environment variable assignment' ) ;
633
+
634
+ ok ( isAutoApproved ( 'FOO=bar BAZ=qux env' ) , 'Multiple environment variables' ) ;
635
+ ok ( isAutoApproved ( 'PATH=/usr/bin HOME=/home/user echo hello' ) , 'Multiple environment variables' ) ;
636
+
637
+ ok ( isAutoApproved ( 'MESSAGE="hello world" echo test' ) , 'Environment variables with quoted values' ) ;
638
+ ok ( isAutoApproved ( "GREETING='hello there' echo test" ) , 'Environment variables with quoted values' ) ;
639
+ } ) ;
640
+
641
+ test ( 'should not match denied commands even with environment variables' , ( ) => {
642
+ shell = 'bash' ;
643
+ os = OperatingSystem . Linux ;
644
+
645
+ setAutoApprove ( {
646
+ "env" : true ,
647
+ "rm" : false
648
+ } ) ;
649
+
650
+ ok ( isAutoApproved ( 'FOO=bar env' ) , 'Should approve env command with environment variable' ) ;
651
+ ok ( ! isAutoApproved ( 'FOO=bar rm file.txt' ) , 'Should deny rm command even with environment variable' ) ;
652
+ } ) ;
653
+
654
+ test ( 'should handle environment variables with different shell types' , ( ) => {
655
+ setAutoApprove ( {
656
+ "echo" : true
657
+ } ) ;
658
+
659
+ shell = 'bash' ;
660
+ os = OperatingSystem . Linux ;
661
+ ok ( isAutoApproved ( 'FOO=bar echo test' ) ) ;
662
+
663
+ shell = 'powershell' ;
664
+ os = OperatingSystem . Windows ;
665
+ ok ( ! isAutoApproved ( 'FOO=bar echo test' ) , 'This should not match since FOO=bar is not recognized as env var syntax in PowerShell' ) ;
666
+ } ) ;
667
+
668
+ test ( 'should fallback to original command if no environment variables detected' , ( ) => {
669
+ shell = 'bash' ;
670
+ os = OperatingSystem . Linux ;
671
+
672
+ setAutoApprove ( {
673
+ "echo" : true
674
+ } ) ;
675
+
676
+ ok ( isAutoApproved ( 'echo hello' ) ) ;
677
+ ok ( isAutoApproved ( 'echo test' ) ) ;
678
+ ok ( isAutoApproved ( 'echo FOO=bar' ) , '// Commands that look like they might have env vars but don\'t match the pattern' ) ;
679
+ } ) ;
680
+
681
+ test ( 'should handle edge cases in environment variable parsing' , ( ) => {
682
+ shell = 'bash' ;
683
+ os = OperatingSystem . Linux ;
684
+
685
+ setAutoApprove ( {
686
+ "echo" : true
687
+ } ) ;
688
+
689
+ ok ( isAutoApproved ( 'FOO= echo test' ) , 'Empty value' ) ;
690
+ ok ( isAutoApproved ( 'MY_VAR=test echo hello' ) , 'Underscore in variable name' ) ;
691
+ ok ( isAutoApproved ( 'VAR1=test echo hello' ) , 'Number in variable name (but not at start)' ) ;
692
+ ok ( ! isAutoApproved ( '1VAR=test echo hello' ) , 'Should not match if variable name starts with number (invalid)' ) ;
693
+ } ) ;
694
+
695
+ test ( 'should handle unknown shell types by defaulting to bourne shell syntax' , ( ) => {
696
+ shell = 'unknown-shell' ;
697
+ os = OperatingSystem . Linux ;
698
+
699
+ setAutoApprove ( {
700
+ "echo" : true
701
+ } ) ;
702
+
703
+ ok ( isAutoApproved ( 'FOO=bar echo test' ) , 'Unknown shells should default to bourne shell behavior' ) ;
704
+ } ) ;
705
+ } ) ;
621
706
} ) ;
0 commit comments