mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 02:32:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| source $(dirname "$0")/test-commons.inc
 | |
| 
 | |
| singlecommand_ok=yes
 | |
| multicommand_ok=yes
 | |
| inlineexec_ok=yes
 | |
| implicit_ok=yes
 | |
| infinite_ok=''
 | |
| break_ok=yes
 | |
| continue_ok=yes
 | |
| break_in_infinite_ok=''
 | |
| 
 | |
| # Full form
 | |
|  # Empty
 | |
| for x in () { }
 | |
| 
 | |
|  # Empty block but nonempty list
 | |
| for x in (1 2 3) { }
 | |
| 
 | |
|  # Single command in block
 | |
| for cmd in ((test 1 = 1) (test 2 = 2)) {
 | |
|     $cmd || unset singlecommand_ok
 | |
| }
 | |
| 
 | |
| # with index
 | |
| for index i val in (0 1 2) {
 | |
|     if not test "$i" -eq "$val" {
 | |
|         unset singlecommand_ok
 | |
|     }
 | |
| }
 | |
| 
 | |
| for index i val in (1 2 3) {
 | |
|     if not test "$i" -ne "$val" {
 | |
|         unset singlecommand_ok
 | |
|     }
 | |
| }
 | |
| 
 | |
|  # Multiple commands in block
 | |
| for cmd in ((test 1 = 1) (test 2 = 2)) {
 | |
|     test -z "$cmd"
 | |
|     test -z "$cmd" && unset multicommand_ok
 | |
| 
 | |
| }
 | |
| 
 | |
|  # $(...) as iterable expression
 | |
| test_file=sh-test-1
 | |
| echo 1 > $test_file
 | |
| echo 2 >> $test_file
 | |
| echo 3 >> $test_file
 | |
| echo 4 >> $test_file
 | |
| lst=()
 | |
| for line in $(cat $test_file) {
 | |
|     lst=($lst $line)
 | |
| }
 | |
| test "$lst" = "1 2 3 4" || unset inlineexec_ok
 | |
| rm $test_file
 | |
| 
 | |
| # Implicit var
 | |
| for ((test 1 = 1) (test 2 = 2)) {
 | |
|     $it || unset implicit_ok
 | |
| }
 | |
| 
 | |
| # Infinite loop
 | |
| loop {
 | |
|     infinite_ok=yes
 | |
|     break
 | |
|     unset break_ok
 | |
| }
 | |
| 
 | |
| # 'Continue'
 | |
| for (1 2 3) {
 | |
|     continue
 | |
|     unset continue_ok
 | |
| }
 | |
| 
 | |
| # 'break' in infinite external loop
 | |
| for $(yes) {
 | |
|     break_in_infinite_ok=yes
 | |
|     break
 | |
| }
 | |
| 
 | |
| if not test $singlecommand_ok { fail Single command inside for body }
 | |
| if not test $multicommand_ok { fail Multiple commands inside for body }
 | |
| if not test $inlineexec_ok { fail Inline Exec }
 | |
| if not test $implicit_ok { fail implicit iter variable }
 | |
| if not test $infinite_ok { fail infinite loop }
 | |
| if not test $break_ok { fail break }
 | |
| if not test $continue_ok { fail continue }
 | |
| if not test $break_in_infinite_ok { fail break from external infinite loop }
 | |
| 
 | |
| if not test \
 | |
|     "$singlecommand_ok $multicommand_ok $inlineexec_ok $implicit_ok $infinite_ok $break_ok $continue_ok $break_in_infinite_ok" \
 | |
|     = "yes yes yes yes yes yes yes yes" {
 | |
| 
 | |
|     fail "Something failed :("
 | |
| }
 | |
| 
 | |
| echo PASS
 | 
