mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:12:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			95 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/Shell
 | |
| 
 | |
| echo "Not running Shell-valid as it has a high failure rate on target #7336"
 | |
| echo PASS
 | |
| exit 0
 | |
| 
 | |
| source $(dirname "$0")/test-commons.inc
 | |
| 
 | |
| # Are comments ignored?
 | |
| # Sanity check: can we do && and || ?
 | |
| true || exit 2
 | |
| false
 | |
| 
 | |
| # Can we chain &&'s?
 | |
| false && exit 2 && fail "can't chain &&'s"
 | |
| 
 | |
| # Proper precedence between &&'s and ||'s
 | |
| false && exit 2 || true && false && fail Invalid precedence between '&&' and '||'
 | |
| 
 | |
| 
 | |
| # Sanity check: can we pass arguments to 'test'?
 | |
| if not test yes = yes  { exit 2 }
 | |
| 
 | |
| # Sanity check: can we use $(command)?
 | |
| if not test "$(echo yes)" = yes  { exit 2 }
 | |
| # Redirections.
 | |
| if not test -z "$(echo foo > /dev/null)"  { fail direct path redirection }
 | |
| if not test -z "$(echo foo 2> /dev/null 1>&2)"  { fail indirect redirection }
 | |
| if not test -n "$(echo foo 2> /dev/null)"  { fail fds interfere with each other }
 | |
| 
 | |
| # Argument unpack
 | |
| if not test "$(echo (yes))" = yes  { fail arguments inside bare lists }
 | |
| if not test "$(echo (no)() yes)" = yes  { fail arguments inside juxtaposition: empty }
 | |
| if not test "$(echo (y)(es))" = yes  { fail arguments inside juxtaposition: list }
 | |
| if not test "$(echo "y"es)" = yes  { fail arguments inside juxtaposition: string }
 | |
| 
 | |
| # String substitution
 | |
| foo=yes
 | |
| if not test "$(echo $foo)" = yes  { fail simple string var lookup }
 | |
| if not test "$(echo "$foo")" = yes  { fail stringified string var lookup }
 | |
| 
 | |
| # List substitution
 | |
| foo=(yes)
 | |
| # Static lookup, as list
 | |
| if not test "$(echo $foo)" = yes  { fail simple list var lookup }
 | |
| # Static lookup, stringified
 | |
| if not test "$(echo "$foo")" = yes  { fail stringified list var lookup }
 | |
| # Dynamic lookup through static expression
 | |
| if not test "$(echo $'foo')" = yes  { fail dynamic lookup through static exp }
 | |
| # Dynamic lookup through dynamic expression
 | |
| ref_to_foo=foo
 | |
| if not test "$(echo $"$ref_to_foo")" = yes  { fail dynamic lookup through dynamic exp }
 | |
| 
 | |
| # More redirections
 | |
| echo test > /tmp/sh-test
 | |
| if not test "$(cat /tmp/sh-test)" = test  { fail simple path redirect }
 | |
| rm /tmp/sh-test
 | |
| 
 | |
| # 'brace' expansions
 | |
| if not test "$(echo x(yes no))" = "xyes xno"  { fail simple juxtaposition expansion }
 | |
| if not test "$(echo (y n)(es o))" = "yes yo nes no"  { fail list-list juxtaposition expansion }
 | |
| if not test "$(echo ()(foo bar baz))" = ""  { fail empty expansion }
 | |
| 
 | |
| # Variables inside commands
 | |
| to_devnull=(>/dev/null)
 | |
| if not test "$(echo hewwo $to_devnull)" = ""  { fail variable containing simple command }
 | |
| 
 | |
| word_count=(() | wc -w)
 | |
| if not test "$(echo well hello friends $word_count)" -eq 3  { fail variable containing pipeline }
 | |
| 
 | |
| # Globs
 | |
| rm -fr /tmp/sh-test 2> /dev/null
 | |
| mkdir -p /tmp/sh-test
 | |
| pushd /tmp/sh-test
 | |
|     touch (a b c)(d e f)
 | |
|     if not test "$(echo a*)" = "ad ae af"  { fail '*' glob expansion }
 | |
|     if not test "$(echo a?)" = "ad ae af"  { fail '?' glob expansion }
 | |
| 
 | |
|     glob_in_var='*'
 | |
|     if not test "$(echo $glob_in_var)" = '*'  { fail substituted string acts as glob }
 | |
| 
 | |
|     if not test "$(echo (a*))" = "ad ae af"  { fail globs in lists resolve wrong }
 | |
|     if not test "$(echo x(a*))" = "xad xae xaf"  { fail globs in lists do not resolve to lists }
 | |
|     if not test "$(echo "foo"a*)" = "fooad fooae fooaf"  { fail globs join to dquoted strings }
 | |
| popd
 | |
| rm -fr /tmp/sh-test
 | |
| 
 | |
| # Setopt
 | |
| setopt --inline_exec_keep_empty_segments
 | |
| if not test "$(echo -n "a\n\nb")" = "a  b"  { fail inline_exec_keep_empty_segments has no effect }
 | |
| 
 | |
| setopt --no_inline_exec_keep_empty_segments
 | |
| if not test "$(echo -n "a\n\nb")" = "a b"  { fail cannot unset inline_exec_keep_empty_segments }
 | |
| 
 | |
| echo PASS
 | 
