diff options
-rw-r--r-- | Test/10prompt.ztst | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/Test/10prompt.ztst b/Test/10prompt.ztst new file mode 100644 index 000000000..08bf8f6a9 --- /dev/null +++ b/Test/10prompt.ztst @@ -0,0 +1,106 @@ +%prep + + mydir=$PWD + SHLVL=2 + setopt extendedglob + +%test + +# 'mydir=$PWD; hash -d mydir; print -P %~' doesn't seem to abbreviate +# to ~mydir in a non-interactive shell. Is this correct? + + print -P ' %%%): %) + %%d: %d + %%1/: %1/ + %%h: %h + %%L: %L + %%M: %M + %%m: %m + %%n: %n + %%N: %N + %%i: %i + a%%{...%%}b: a%{%}b + ' +0q:Basic prompt escapes as shown. +> %): ) +> %d: $mydir +> %1/: ${mydir:t} +> %h: 0 +> %L: 2 +> %M: $HOST +> %m: ${HOST%%.*} +> %n: $USERNAME +> %N: ZTST_execchunk +> %i: 2 +> a%{...%}b: ab +> + + true + print -P '%?' + false + print -P '%?' +0:`%?' prompt escape +>0 +>1 + + PS4="%_> " + setopt xtrace + if true; then true; else false; fi + unsetopt xtrace +0:`%_' prompt escape +?if> true +?then> true +?> unsetopt xtrace + + diff =(print -P '%#') =(print -P '%(!.#.%%)') +0:`%#' prompt escape and its equivalent + + psvar=(caesar adsum jam forte) + print -P '%v' '%4v' +0:`%v' prompt escape +>caesar forte + + true + print -P '%(?.true.false)' + false + print -P '%(?.true.false)' +0:ternary prompt escapes +>true +>false + + print -P '%10<...<truncated at 10%<< Not truncated' + print -P '%10>...>truncated at 10%>> Not truncated' +0:prompt truncation +>...d at 10 Not truncated +>truncat... Not truncated + +# It's hard to check the time and date as they are moving targets. +# We therefore just check that various forms of the date are consistent. +# In fact, if you perform this at midnight it can still fail. +# We could test for that, but we can't be bothered. +# I hope LC_ALL is enough to make the format what's expected. + + LC_ALL=C + date1=$(print -P %w) + date2=$(print -P %W) + date3=$(print -P %D) + if [[ $date1 != [A-Z][a-z][a-z][[:blank:]]##[0-9]## ]]; then + print "Date \`$date1' is not in the form \`Day DD' (e.g. \`Mon 1'" + fi + if [[ $date2 != [0-9][0-9]/[0-9][0-9]/[0-9][0-9] ]]; then + print "Date \`$date2' is not in the form \`DD/MM/YYYY'" + fi + if [[ $date3 != [0-9][0-9]-[0-9][0-9]-[0-9][0-9] ]]; then + print "Date \`$date3' is not in the form \`YY-MM-DD'" + fi + if (( $date1[5,-1] != $date2[4,5] )) || (( $date2[4,5] != $date3[8,9] )) + then + print "Days of month do not agree in $date1, $date2, $date3" + fi + if (( $date2[1,2] != $date3[4,5] )); then + print "Months do not agree in $date2, $date3" + fi + if (( $date2[7,8] != $date3[1,2] )); then + print "Years do not agree in $date2, $date3" + fi +0:Dates produced by prompt escapes |