1*946379e7Schristos#! /bin/sh 2*946379e7Schristos 3*946379e7Schristos# Test recognition of Java format strings. 4*946379e7Schristos 5*946379e7Schristostmpfiles="" 6*946379e7Schristostrap 'rm -fr $tmpfiles' 1 2 3 15 7*946379e7Schristos 8*946379e7Schristostmpfiles="$tmpfiles f-j-1.data" 9*946379e7Schristoscat <<\EOF > f-j-1.data 10*946379e7Schristos# Valid: one argument 11*946379e7Schristos"abc{0}def" 12*946379e7Schristos# Valid: ten arguments 13*946379e7Schristos"abc{9}def" 14*946379e7Schristos# Valid: two-digit argument numbers 15*946379e7Schristos"abc{00}def" 16*946379e7Schristos# Valid: huge argument numbers 17*946379e7Schristos"abc{500000000}def" 18*946379e7Schristos# Invalid: unterminated 19*946379e7Schristos"abc{" 20*946379e7Schristos# Invalid: unterminated 21*946379e7Schristos"abc{0" 22*946379e7Schristos# Invalid: missing number 23*946379e7Schristos"abc{}def" 24*946379e7Schristos# Invalid: non-digit 25*946379e7Schristos"abc{number}def" 26*946379e7Schristos# Invalid: non-digit 27*946379e7Schristos"abc{-0}def" 28*946379e7Schristos# Valid: two arguments 29*946379e7Schristos"abc{1}def{0}" 30*946379e7Schristos# Valid: multiple uses of same argument 31*946379e7Schristos"abc{1}def{0}ghi{1}" 32*946379e7Schristos# Invalid: broken elementFormat 33*946379e7Schristos"abc{0,}def" 34*946379e7Schristos# Invalid: invalid elementFormat 35*946379e7Schristos"abc{1,string}def" 36*946379e7Schristos# Valid: elementFormat of length 1 37*946379e7Schristos"abc{1,number}def" 38*946379e7Schristos# Valid: elementFormat of length 1 39*946379e7Schristos"abc{1,date}def" 40*946379e7Schristos# Valid: elementFormat of length 1 41*946379e7Schristos"abc{1,time}def" 42*946379e7Schristos# Valid: elementFormat of length 1 43*946379e7Schristos"abc{1,choice}def" 44*946379e7Schristos# Invalid: broken elementFormat 45*946379e7Schristos"abc{1,number,}def" 46*946379e7Schristos# Valid: builtin numberStyle 47*946379e7Schristos"abc{1,number,currency}def" 48*946379e7Schristos# Valid: builtin numberStyle 49*946379e7Schristos"abc{1,number,percent}def" 50*946379e7Schristos# Valid: builtin numberStyle 51*946379e7Schristos"abc{1,number,integer}def" 52*946379e7Schristos# Valid: builtin datetimeStyle 53*946379e7Schristos"abc{1,date,short}def" 54*946379e7Schristos# Valid: builtin datetimeStyle 55*946379e7Schristos"abc{1,date,medium}def" 56*946379e7Schristos# Valid: builtin datetimeStyle 57*946379e7Schristos"abc{1,date,long}def" 58*946379e7Schristos# Valid: builtin datetimeStyle 59*946379e7Schristos"abc{1,date,full}def" 60*946379e7Schristos# Valid: builtin datetimeStyle 61*946379e7Schristos"abc{1,time,short}def" 62*946379e7Schristos# Valid: builtin datetimeStyle 63*946379e7Schristos"abc{1,time,medium}def" 64*946379e7Schristos# Valid: builtin datetimeStyle 65*946379e7Schristos"abc{1,time,long}def" 66*946379e7Schristos# Valid: builtin datetimeStyle 67*946379e7Schristos"abc{1,time,full}def" 68*946379e7Schristos# Valid: dateFormatPattern 69*946379e7Schristos"abc{1,date,foobar}" 70*946379e7Schristos# Valid: dateFormatPattern 71*946379e7Schristos"abc{1,time,foobar}" 72*946379e7Schristos# Valid: dateFormatPattern with comma 73*946379e7Schristos"abc{1,date,foo,bar}" 74*946379e7Schristos# Valid: numberFormatPattern 75*946379e7Schristos"abc{1,number,###,##0}def" 76*946379e7Schristos# Invalid: numberFormatPattern 77*946379e7Schristos"abc{1,number,foobar}" 78*946379e7Schristos# Valid: empty choiceFormatPattern 79*946379e7Schristos"abc{1,choice,}def" 80*946379e7Schristos# Valid: choiceFormatPattern 81*946379e7Schristos"abc{1,choice,0#zero|1#one|2#many}def" 82*946379e7Schristos# Invalid: empty clause in choiceFormatPattern 83*946379e7Schristos"abc{1,choice,|0#zero|1#one|2#many}def" 84*946379e7Schristos# Valid: empty clause at end of choiceFormatPattern 85*946379e7Schristos"abc{1,choice,0#zero|1#one|2#many|}def" 86*946379e7Schristos# Invalid: short clause in choiceFormatPattern 87*946379e7Schristos"abc{1,choice,-1|0#zero|1#one|2#many}def" 88*946379e7Schristos# Valid: short clause at end of choiceFormatPattern 89*946379e7Schristos"abc{1,choice,0#zero|1#one|2#many|3}def" 90*946379e7Schristos# Valid: choiceFormatPattern with different argument 91*946379e7Schristos"abc{1,choice,1#one|2#{0,date}}def" 92*946379e7Schristos# Valid: choiceFormatPattern with same argument 93*946379e7Schristos"abc{1,choice,1#one|2#{1}}def" 94*946379e7Schristos# Valid: choiceFormatPattern with same argument 95*946379e7Schristos"abc{1,choice,1#one|2#{1,number}}def" 96*946379e7Schristos# Invalid: choiceFormatPattern with same argument, type conflict 97*946379e7Schristos"abc{1,choice,1#one|2#{1,date}}def" 98*946379e7Schristos# Invalid: missing opening brace 99*946379e7Schristos"abc1}def{0}" 100*946379e7Schristos# Valid: quoted brace 101*946379e7Schristos"abc1'}'def{0}" 102*946379e7Schristos# Invalid: quoted brace 103*946379e7Schristos"abc{1'}'def" 104*946379e7Schristos# Valid: unterminated quote 105*946379e7Schristos"abc{0}1'}" 106*946379e7Schristos# Valid: quoted brace, '' counts as a single quote 107*946379e7Schristos"abc''1'}'def{0}" 108*946379e7Schristos# Invalid: '' counts as a single quote 109*946379e7Schristos"abc{1''}def" 110*946379e7Schristos# Valid: quote inside elementFormat is hidden 111*946379e7Schristos"abc{1,date,x'y}def" 112*946379e7Schristos# Valid: numberFormatPattern with quote 113*946379e7Schristos"abc{1,number,#0';'}def" 114*946379e7Schristos# Invalid: numberFormatPattern with wrong number syntax 115*946379e7Schristos"abc{1,number,#0;}def" 116*946379e7Schristos# Valid: numberFormatPattern with quote 117*946379e7Schristos"abc{1,number,0.##'E}def" 118*946379e7Schristos# Valid: numberFormatPattern without quote 119*946379e7Schristos"abc{1,number,0.##E}def" 120*946379e7SchristosEOF 121*946379e7Schristos 122*946379e7Schristos: ${XGETTEXT=xgettext} 123*946379e7Schristosn=0 124*946379e7Schristoswhile read comment; do 125*946379e7Schristos read string 126*946379e7Schristos n=`expr $n + 1` 127*946379e7Schristos tmpfiles="$tmpfiles f-j-1-$n.in f-j-1-$n.po" 128*946379e7Schristos cat <<EOF > f-j-1-$n.in 129*946379e7Schristosgettext(${string}); 130*946379e7SchristosEOF 131*946379e7Schristos ${XGETTEXT} -L Java -o f-j-1-$n.po f-j-1-$n.in || exit 1 132*946379e7Schristos test -f f-j-1-$n.po || exit 1 133*946379e7Schristos fail= 134*946379e7Schristos if echo "$comment" | grep 'Valid:' > /dev/null; then 135*946379e7Schristos if grep java-format f-j-1-$n.po > /dev/null; then 136*946379e7Schristos : 137*946379e7Schristos else 138*946379e7Schristos fail=yes 139*946379e7Schristos fi 140*946379e7Schristos else 141*946379e7Schristos if grep java-format f-j-1-$n.po > /dev/null; then 142*946379e7Schristos fail=yes 143*946379e7Schristos else 144*946379e7Schristos : 145*946379e7Schristos fi 146*946379e7Schristos fi 147*946379e7Schristos if test -n "$fail"; then 148*946379e7Schristos echo "Format string recognition error:" 1>&2 149*946379e7Schristos cat f-j-1-$n.in 1>&2 150*946379e7Schristos echo "Got:" 1>&2 151*946379e7Schristos cat f-j-1-$n.po 1>&2 152*946379e7Schristos exit 1 153*946379e7Schristos fi 154*946379e7Schristos rm -f f-j-1-$n.in f-j-1-$n.po 155*946379e7Schristosdone < f-j-1.data 156*946379e7Schristos 157*946379e7Schristosrm -fr $tmpfiles 158*946379e7Schristos 159*946379e7Schristosexit 0 160