Home | History | Annotate | Line # | Download | only in tests
format-boost-1 revision 1.1.1.1
      1 #! /bin/sh
      2 
      3 # Test recognition of Boost format strings.
      4 
      5 tmpfiles=""
      6 trap 'rm -fr $tmpfiles' 1 2 3 15
      7 
      8 tmpfiles="$tmpfiles f-bo-1.data"
      9 cat <<\EOF > f-bo-1.data
     10 # Valid: no argument
     11 "abc%%"
     12 # Valid: one character argument
     13 "abc%c"
     14 # Valid: one character argument
     15 "abc%|c|"
     16 # Valid: one string argument
     17 "abc%s"
     18 # Valid: one string argument
     19 "abc%|s|"
     20 # Valid: one integer argument
     21 "abc%i"
     22 # Valid: one integer argument
     23 "abc%|i|"
     24 # Valid: one integer argument
     25 "abc%d"
     26 # Valid: one integer argument
     27 "abc%|d|"
     28 # Valid: one integer argument
     29 "abc%o"
     30 # Valid: one integer argument
     31 "abc%|o|"
     32 # Valid: one integer argument
     33 "abc%u"
     34 # Valid: one integer argument
     35 "abc%|u|"
     36 # Valid: one integer argument
     37 "abc%x"
     38 # Valid: one integer argument
     39 "abc%|x|"
     40 # Valid: one integer argument
     41 "abc%X"
     42 # Valid: one integer argument
     43 "abc%|X|"
     44 # Valid: one floating-point argument
     45 "abc%e"
     46 # Valid: one floating-point argument
     47 "abc%|e|"
     48 # Valid: one floating-point argument
     49 "abc%E"
     50 # Valid: one floating-point argument
     51 "abc%|E|"
     52 # Valid: one floating-point argument
     53 "abc%f"
     54 # Valid: one floating-point argument
     55 "abc%|f|"
     56 # Valid: one floating-point argument
     57 "abc%g"
     58 # Valid: one floating-point argument
     59 "abc%|g|"
     60 # Valid: one floating-point argument
     61 "abc%G"
     62 # Valid: one floating-point argument
     63 "abc%|G|"
     64 # Valid: one pointer argument
     65 "abc%p"
     66 # Valid: one pointer argument
     67 "abc%|p|"
     68 # Valid: no argument
     69 "abc%n"
     70 # Valid: no argument
     71 "abc%|n|"
     72 # Valid: one argument with flags
     73 "abc%0#g"
     74 # Valid: one argument with flags
     75 "abc%|0#g|"
     76 # Valid: one argument with width
     77 "abc%2g"
     78 # Valid: one argument with width
     79 "abc%|2g|"
     80 # Valid: one argument with width
     81 "abc%*g"
     82 # Valid: one argument with width
     83 "abc%|*g|"
     84 # Valid: one argument with precision
     85 "abc%.4g"
     86 # Valid: one argument with precision
     87 "abc%|.4g|"
     88 # Valid: one argument with precision
     89 "abc%.*g"
     90 # Valid: one argument with precision
     91 "abc%|.*g|"
     92 # Valid: one argument with width and precision
     93 "abc%14.4g"
     94 # Valid: one argument with width and precision
     95 "abc%|14.4g|"
     96 # Valid: one argument with width and precision
     97 "abc%14.*g"
     98 # Valid: one argument with width and precision
     99 "abc%|14.*g|"
    100 # Valid: one argument with width and precision
    101 "abc%*.4g"
    102 # Valid: one argument with width and precision
    103 "abc%|*.4g|"
    104 # Valid: one argument with width and precision
    105 "abc%*.*g"
    106 # Valid: one argument with width and precision
    107 "abc%|*.*g|"
    108 # Valid: one argument with size specifier
    109 "abc%hhi"
    110 # Valid: one argument with size specifier
    111 "abc%|hhi|"
    112 # Valid: one argument with size specifier
    113 "abc%hi"
    114 # Valid: one argument with size specifier
    115 "abc%|hi|"
    116 # Valid: one argument with size specifier
    117 "abc%li"
    118 # Valid: one argument with size specifier
    119 "abc%|li|"
    120 # Valid: one argument with size specifier
    121 "abc%lli"
    122 # Valid: one argument with size specifier
    123 "abc%|lli|"
    124 # Valid: one argument with size specifier
    125 "abc%Lg"
    126 # Valid: one argument with size specifier
    127 "abc%|Lg|"
    128 # Invalid: unknown size specifier
    129 "abc%qi"
    130 # Invalid: unknown size specifier
    131 "abc%|qi|"
    132 # Invalid: unknown size specifier
    133 "abc%ji"
    134 # Invalid: unknown size specifier
    135 "abc%|ji|"
    136 # Invalid: unknown size specifier
    137 "abc%zi"
    138 # Invalid: unknown size specifier
    139 "abc%|zi|"
    140 # Invalid: unterminated
    141 "abc%"
    142 # Invalid: unterminated
    143 "abc%|"
    144 # Invalid: unterminated
    145 "abc%|d"
    146 # Invalid: unknown format specifier
    147 "abc%a"
    148 # Invalid: unknown format specifier
    149 "abc%|a|"
    150 # Invalid: unknown format specifier
    151 "abc%A"
    152 # Invalid: unknown format specifier
    153 "abc%|A|"
    154 # Invalid: unknown format specifier
    155 "abc%F"
    156 # Invalid: unknown format specifier
    157 "abc%|F|"
    158 # Invalid: unknown format specifier
    159 "abc%y"
    160 # Invalid: unknown format specifier
    161 "abc%|y|"
    162 # Invalid: flags after width
    163 "abc%*0g"
    164 # Invalid: flags after width
    165 "abc%|*0g|"
    166 # Invalid: twice precision
    167 "abc%.4.2g"
    168 # Invalid: twice precision
    169 "abc%|.4.2g|"
    170 # Valid: three arguments
    171 "abc%d%u%u"
    172 # Valid: three arguments, mixed syntax
    173 "abc%|d|%u%u"
    174 # Valid: three arguments, mixed syntax
    175 "abc%d%u%|u|"
    176 # Valid: a numbered argument
    177 "abc%1$d"
    178 # Valid: a numbered argument
    179 "abc%|1$d|"
    180 # Valid: a numbered argument
    181 "abc%1%"
    182 # Invalid: zero
    183 "abc%0$d"
    184 # Invalid: zero
    185 "abc%|0$d|"
    186 # Invalid: zero
    187 "abc%0%def"
    188 # Valid: two-digit numbered arguments
    189 "abc%11$def%10$dgh%9$dij%8$dkl%7$dmn%6$dop%5$dqr%4$dst%3$duv%2$dwx%1$dyz"
    190 # Valid: two-digit numbered arguments
    191 "abc%|11$d|ef%|10$d|gh%|9$d|ij%|8$d|kl%|7$d|mn%|6$d|op%|5$d|qr%|4$d|st%|3$d|uv%|2$d|wx%|1$d|yz"
    192 # Invalid: unterminated number
    193 "abc%1"
    194 # Valid: omitted directive number
    195 "abc%|1|"
    196 # Invalid: flags before number
    197 "abc%+1$d"
    198 # Invalid: flags before number
    199 "abc%|+1$d|"
    200 # Valid: three arguments, two with same number
    201 "abc%1$4x,%2$c,%1$u"
    202 # Valid: three arguments, two with same number
    203 "abc%|1$4x|,%|2$c|,%|1$u|"
    204 # Invalid: argument with conflicting types
    205 "abc%1$4x,%2$c,%1$p"
    206 # Invalid: argument with conflicting types
    207 "abc%|1$4x|,%|2$c|,%|1$p|"
    208 # Valid: no conflict
    209 "abc%1$4x,%2$c,%1$s"
    210 # Valid: no conflict
    211 "abc%|1$4x|,%|2$c|,%|1$s|"
    212 # Valid: no conflict
    213 "abc%1$4x,%2$c,%1$u"
    214 # Valid: no conflict
    215 "abc%|1$4x|,%|2$c|,%|1$u|"
    216 # Invalid: mixing of numbered and unnumbered arguments
    217 "abc%d%2$x"
    218 # Invalid: mixing of numbered and unnumbered arguments
    219 "abc%|d|%|2$x|"
    220 # Invalid: mixing of numbered and unnumbered arguments
    221 "abc%|d|%2%"
    222 # Valid: numbered argument with constant precision
    223 "abc%1$.9x"
    224 # Valid: numbered argument with constant precision
    225 "abc%|1$.9x|"
    226 # Invalid: mixing of numbered and unnumbered arguments
    227 "abc%1$.*x"
    228 # Invalid: mixing of numbered and unnumbered arguments
    229 "abc%|1$.*x|"
    230 # Valid: missing non-final argument
    231 "abc%2$x%3$s"
    232 # Valid: missing non-final argument
    233 "abc%|2$x|%|3$s|"
    234 # Valid: missing non-final argument
    235 "abc%2%%3%"
    236 # Valid: permutation
    237 "abc%2$ddef%1$d"
    238 # Valid: permutation
    239 "abc%|2$d|def%|1$d|"
    240 # Valid: multiple uses of same argument
    241 "abc%2$xdef%1$pghi%2$x"
    242 # Valid: multiple uses of same argument
    243 "abc%|2$x|def%|1$p|ghi|%2$x|"
    244 # Valid: one argument with width
    245 "abc%2$#*1$g"
    246 # Valid: one argument with width
    247 "abc%|2$#*1$g|"
    248 # Valid: one argument with width and precision
    249 "abc%3$*2$.*1$g"
    250 # Valid: one argument with width and precision
    251 "abc%|3$*2$.*1$g|"
    252 # Invalid: zero
    253 "abc%2$*0$.*1$g"
    254 # Invalid: zero
    255 "abc%|2$*0$.*1$g|"
    256 # Valid: tab
    257 "abc%t"
    258 # Valid: tab
    259 "abc%9t"
    260 # Valid: tab
    261 "abc%|9t|"
    262 # Invalid: unterminated directive
    263 "abc%T"
    264 # Valid: tab
    265 "abc%T "
    266 # Valid: tab
    267 "abc%99T "
    268 # Invalid: unterminated directive
    269 "abc%|99T "
    270 # Invalid: unterminated directive
    271 "abc%|99T|"
    272 # Valid: tab
    273 "abc%|99T |"
    274 # Valid: tab
    275 "abc%|99T||"
    276 EOF
    277 
    278 : ${XGETTEXT=xgettext}
    279 n=0
    280 while read comment; do
    281   read string
    282   n=`expr $n + 1`
    283   tmpfiles="$tmpfiles f-bo-1-$n.in f-bo-1-$n.po"
    284   cat <<EOF > f-bo-1-$n.in
    285 gettext(${string});
    286 EOF
    287   ${XGETTEXT} -L C++ --boost -o f-bo-1-$n.po f-bo-1-$n.in || exit 1
    288   test -f f-bo-1-$n.po || exit 1
    289   fail=
    290   if echo "$comment" | grep 'Valid:' > /dev/null; then
    291     if grep boost-format f-bo-1-$n.po > /dev/null; then
    292       :
    293     else
    294       fail=yes
    295     fi
    296   else
    297     if grep boost-format f-bo-1-$n.po > /dev/null; then
    298       fail=yes
    299     else
    300       :
    301     fi
    302   fi
    303   if test -n "$fail"; then
    304     echo "Format string recognition error:" 1>&2
    305     cat f-bo-1-$n.in 1>&2
    306     echo "Got:" 1>&2
    307     cat f-bo-1-$n.po 1>&2
    308     exit 1
    309   fi
    310   rm -f f-bo-1-$n.in f-bo-1-$n.po
    311 done < f-bo-1.data
    312 
    313 rm -fr $tmpfiles
    314 
    315 exit 0
    316