#! /bin/sh # Test checking of Perl format strings. # This test is for the combination of printf and brace format strings. tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles f-pm-2.data" cat <<\EOF > f-pm-2.data # Valid: normal case. #, perl-format, perl-brace-format msgid "{foo} %d {bar} %s" msgstr "{bar} {foo} %d %s" # Invalid: missing argument. #, perl-format, perl-brace-format msgid "{foo} %d {bar} %s" msgstr "{bar} %d %s" # Valid: missing argument but checking disabled. #, perl-format, no-perl-brace-format msgid "{foo} %d {bar} %s" msgstr "{bar} %d %s" # Invalid: printf format reordered without position specifiers %1$, %2$. #, perl-format, perl-brace-format msgid "{foo} %d {bar} %s" msgstr "{bar} %s {foo} %d" # Valid: same thing but checking disabled. #, no-perl-format, perl-brace-format msgid "{foo} %d {bar} %s" msgstr "{bar} %s {foo} %d" # Invalid: unnamed vs. named arguments #, perl-format msgid "abc%sdef" msgstr "xyz{value}" # Invalid: named vs. unnamed arguments #, perl-brace-format msgid "abc{value}def" msgstr "xyz%s" EOF : ${MSGFMT=msgfmt} n=0 while read comment; do read formats read msgid_line read msgstr_line n=`expr $n + 1` tmpfiles="$tmpfiles f-pm-2-$n.po f-pm-2-$n.mo" cat <<EOF > f-pm-2-$n.po ${formats} ${msgid_line} ${msgstr_line} EOF fail= if echo "$comment" | grep 'Valid:' > /dev/null; then if ${MSGFMT} --check-format -o f-pm-2-$n.mo f-pm-2-$n.po; then : else fail=yes fi else ${MSGFMT} --check-format -o f-pm-2-$n.mo f-pm-2-$n.po 2> /dev/null if test $? = 1; then : else fail=yes fi fi if test -n "$fail"; then echo "Format string checking error:" 1>&2 cat f-pm-2-$n.po 1>&2 exit 1 fi done < f-pm-2.data rm -fr $tmpfiles exit 0 |