about summary refs log tree commit diff
path: root/Test/10prompt.ztst
blob: 91be7fcfc5f083bbbe7be62bdd545bcdc52cc618 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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[7,8] ))
  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