#!/bin/sh
#
# $Id$
#
##############################################################################
#
# Licensed to the Apache Software  Foundation (ASF) under one or more
# contributor  license agreements.  See  the NOTICE  file distributed
# with  this  work  for  additional information  regarding  copyright
# ownership.   The ASF  licenses this  file to  you under  the Apache
# License, Version  2.0 (the  "License"); you may  not use  this file
# except in  compliance with the License.   You may obtain  a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the  License is distributed on an  "AS IS" BASIS,
# WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
# implied.   See  the License  for  the  specific language  governing
# permissions and limitations under the License.
#
# Copyright 1999-2007 Rogue Wave Software, Inc.
#
##############################################################################
#
# NAME
#     run_locale_utils.sh
#
# SYNOPSIS
#     run_locale_utils.sh
#
# DESCRIPTION
#     Exercise the locale utilities:
#     1. Locale utilities sanity: location, output, etc;
#     2. Functionality:
#         - (re)generation of databases;
#    
# OPTIONS:
#    - "-d" debug
#    - "-n" no cleanup
#    - "-s" tests location, output
#    - "-f" tests functionality; is followed by:
#        - "-i <nlsdir>"
#        - "-l <locale name>"
#    
##############################################################################


OSNAME=`uname`

if [ "$OSNAME" = "OSF1" -a "$BIN_SH" != "xpg4" ]; then
    # make getopts work on Tru64 by setting the BIN_SH variable
    # and re-executing self with the same command line arguments
    BIN_SH=xpg4
    export BIN_SH
    exec $0 $*
elif [ "$OSNAME" = "AIX" -a -z "$BASH_VERSION" ]; then
    # use an alternate shell to work around a bug (?) in the AIX system
    # shell that prevents it from trapping SIGHUP (and invoking the signal
    # handler)
    if [ -x /bin/bash ]; then
        exec /bin/bash $0 $*
    fi
fi


locale="./locale"
localedef="./localedef"

output ()
{
    if test -z "$outfile"; then
        echo "$*" 2>/dev/null
    else
        echo "$*" >> $outfile
    fi;
}


debug_output ()
{
    if test ! -z "$dbgout"; then
        echo "$*" >> $dbgout 2>/dev/null
    fi;
}

##############################################################################
#	Function definitions - checking sanity
##############################################################################

check_locale_help ()
{
    debug_output "Checking \"locale --help\" output..."

    loc_h_out=`${locale} --help 2>/dev/null`
    loc_h_xout="NAME SYNOPSIS DESCRIPTION"
    loc_h_regexp="locale - get locale-specific information"
    for it in $loc_h_xout; do
        assertions=`expr $assertions + 1`
        if test -z "`echo $loc_h_out | grep $it`"; then
            debug_output " incorrect."
            debug_output "ERROR: \"locale --help\" gives wrong output ($it)."
            debug_output ""
            failedassertions=`expr $failedassertions + 1`
        fi;
    done

    debug_output "...ok"
}


check_locale_all()
{
    debug_output "Checking \"locale -a\" output..."

    loc_a_out=`${locale} -a 2>/dev/null`
    loc_a_regexp="[a-z]\{2\}_[A-Z]\{2\}"
    for it in $loc_a_out; do					
        assertions=`expr $assertions + 1`
	test "$it" = "C" && continue;
	if test -z "`echo $it | grep -e \"$loc_a_regexp\"`"; then
            debug_output "incorrect."
            debug_output "Warning: Locale name \"$it\" not matching pattern."
            failedassertions=`expr $failedassertions + 1`
	fi;							
    done

    debug_output "...ok"
}


check_locale_m()
{
    debug_output "Checking \"locale -m\" output..."

    any_failed=0

    loc_m_out=`${locale} -m 2>/dev/null`
    any_failed=$?

    for it in $loc_m_out; do
        assertions=`expr $assertions + 1`
	if test -z "`echo $it | grep .cm`" ; then
            any_failed=1
            debug_output " incorrect."
            debug_output "ERROR: \"locale -m\" failed."
            debug_output
            failedassertions=`expr $failedassertions + 1`
        fi;
    done;						

    if [ $any_failed -eq 0 ]; then
        debug_output "...ok"
    fi
}


check_locale_k()
{
    debug_output "Checking \"locale -k LC_ALL\" output..."

    loc_k_out=`${locale} -k LC_ALL 2>/dev/null`
    loc_k_xout="upper lower space print                                     \
                cntrl alpha digit punct                                     \
                graph xdigit toupper tolower                                \
                abday day abmon  mon                                        \
                am_pm d_t_fmt d_fmt t_fmt t_fmt_ampm                        \
                int_curr_symbol currency_symbol mon_decimal_point           \
                mon_thousands_sep mon_grouping positive_sign negative_sign  \
                int_frac_digits frac_digits p_cs_precedes p_sep_by_space    \
                n_cs_precedes n_sep_by_space p_sign_posn n_sign_posn        \
                decimal_point thousands_sep grouping"

    any_failed=0
    for it in $loc_k_xout; do
        assertions=`expr $assertions + 1`;
        if test -z "`echo $loc_k_out | grep $it`"; then
            # output text only for the first failure
            [ $any_failed -eq 0 ] && debug_output " incorrect."
            debug_output "ERROR: \"locale -k\" gives wrong output ($it)."
            debug_output
            failedassertions=`expr $failedassertions + 1`
            any_failed=1
        fi;
    done

    if [ $any_failed -eq 0 ]; then
        debug_output "...ok"
    fi
}

check_localedef_help()
{
    debug_output "Checking \"localedef --help\" output..."

    locdef_h_out=`${localedef} --help 2>/dev/null`
    locdef_h_xout="NAME SYNOPSIS DESCRIPTION"
    locdef_h_regexp="localedef - generate a locale environment"
    for it in $locdef_h_xout; do
        assertions=`expr $assertions + 1`;
        if test -z "`echo $locdef_h_out | grep $it`"; then
            debug_output " incorrect."
            debug_output "ERROR: \"localedef --help\" gives wrong output ($it)."
            debug_output
            failedassertions=`expr $failedassertions + 1`
        fi;
    done

    debug_output "...ok"
}

##############################################################################
#	Function definitions - checking functionality
##############################################################################


#
# Generates one specified locale
#
generate_locale()
{
    err="Cannot generate locale database - "

    # 1 - character map file used in generating the locale database
    # 2 - source/locale definition file
    # 3 - locale database name

    if [ "$1" = "" ]; then
        output "$err character maps file not specified."
        exit 1;
    fi

    if [ "$2" = "" ]; then
        output "$err source input file not specified."
        exit 1;
    fi

    if [ "$3" = "" ]; then
        output "$err output locale name not specified."
        exit 1;
    fi

    assertions=`expr $assertions + 1`

    # Generating the database
    debug_output "${localedef} -w -c -f $1 -i $2 $3 >${dbgout:-/dev/null} 2>&1"
    ${localedef} -w -c -f $1 -i $2 $3 >${dbgout:-/dev/null} 2>&1

    retcode=$?
    if [ $retcode -ne 0 ]; then
        # exit with the same status as the tool
        exit $retcode
    fi
}


#
#
#
dump_charmap()
{
    err="Cannot create characater set description file - "

    # $1: LC_ALL value
    # $2: output file name

    assertions=`expr $assertions + 1`

    # dumping charmap
    output "LC_ALL=$1 ${locale} --charmap -l >$2 2>${dbgout:-/dev/null}"
    LC_ALL=$1 ${locale} --charmap -l > $2 2>${dbgout:-/dev/null}

    retcode=$?
    if [ $retcode -ne 0 ]; then 
        # exit with the same status as the tool
        exit $retcode
    fi
}

#
# Dumps one locale database
#
dump_locale ()
{
    err="Cannot dump locale database - "

    # $1: LC_ALL value
    # $2: current locale dump file

    if [ "$2" = "" ]; then
        output "$err - no output file specified."
        exit 1
    fi

    assertions=`expr $assertions + 1`

    # dumping locale database
    output "LC_ALL=$1 ${locale} -ck -h -l LC_ALL >$2 2>${dbgout:-/dev/null}"
    LC_ALL=$1 ${locale} -ck -h -l LC_ALL > $2 2>${dbgout:-/dev/null}
    
    retcode=$?
    if [ $retcode -ne 0 ]; then 
        # exit with the same status as the tool
        exit $retcode
    fi
}

#
# Test one locale
#
test_locale()
{
    err="Cannot test locale - "

    # $1 - nls subdirectory of the source directory tree
    # $2 - the test (sandbox) directory
    # $3 - name of the locale database
    
    if [ "$1" = "" ]; then 
        output "$err - nls directory not specified."
        exit 1
    fi

    if [ "$2" = "" ]; then 
        output "$err - temporary directory not specified."
        exit 1
    fi

    if [ "$3" = "" ]; then 
        output "$err - locale database name not specified."
        exit 1
    fi

    nlsdir=$1
    tmpdir=$2
    fname=$3

    # get the name of the locale and the character map
    source=`echo $fname | sed "s:\([^.]*\)\.\([^@]*\)\(.*\):\1\3:;y:@:.:"`;
    charmap=`echo $fname | sed "s:\([^.]*\)\.\([^@]*\)\(.*\):\2:"`;

    src_path=$nlsdir/src/$source
    cm_path=$nlsdir/charmaps/$charmap

    stage_1=$tmpdir/stage.1
    stage_2=$tmpdir/stage.2
    stage_3=$tmpdir/stage.3

    # point locale at the original source directory
    debug_output "RWSTD_SRC_ROOT="$nlsdir
    RWSTD_SRC_ROOT=$nlsdir
    debug_output "export RWSTD_SRC_ROOT"
    export RWSTD_SRC_ROOT

    # create a directory for stage 1 charmap source files
    debug_output "mkdir -p $stage_1/charmaps"
    mkdir -p $stage_1/charmaps

    assertions=`expr $assertions + 1`

    ## generate stage 1 locale database from the orignal sources
    generate_locale $cm_path $src_path $stage_1/$fname
    if [ $? -ne 0 ]; then
        failedassertions=`expr $failedassertions + 1`
        return;
    fi

    # set necessary environment variables
    # debug_output "LC_ALL=$fname"
    # LC_ALL=$fname
    # debug_output "export LC_ALL"
    # export LC_ALL
    # debug_output "LANG=$fname"
    # LANG=$fname
    # debug_output "export LANG"
    # export LANG

    assertions=`expr $assertions + 1`

    # dump the charmap and the locale data from the database
    # to a pair of charmap and locale source files
    dump_charmap $stage_1/$fname $stage_1/charmaps/$charmap
    dump_locale $stage_1/$fname $stage_1/$source.src

    if [ -z "$no_clean" ]; then
        # remove stage 1 locale to free up disk space but keep
        # the text dumps for later processing
        debug_output "rm $stage_1/$fname"
        rm $stage_1/$fname
    fi

    # create a directory for stage 2 charmap source files
    debug_output "mkdir -p $stage_2/charmaps"
    mkdir -p $stage_2/charmaps

    assertions=`expr $assertions + 1`

    # generate stage 2 locale database from the charmap and locale
    # source files produced by locale from the stage 1 database
    generate_locale $stage_1/charmaps/$charmap \
                    $stage_1/$source.src \
                    $stage_2/$fname

    if [ $? -ne 0 ]; then
        failedassertions=`expr $failedassertions + 1`
        return;
    fi

    # point locale at the stage 1 directory
    debug_output "RWSTD_SRC_ROOT=$stage_1"
    RWSTD_SRC_ROOT=$stage_1
    debug_output "export RWSTD_SRC_ROOT"
    export RWSTD_SRC_ROOT

    assertions=`expr $assertions + 1`

    # dump the charmap and the locale data from the database
    # to a pair of charmap and locale source files
    dump_charmap $stage_2/$fname $stage_2/charmaps/$charmap
    dump_locale $stage_2/$fname $stage_2/$source.src

    if [ -z "$no_clean" ]; then
        # remove stage 2 locale to free up disk space but keep
        # the text dumps for later processing
        debug_output "rm $stage_2/$fname"
        rm $stage_2/$fname
    fi

    assertions=`expr $assertions + 1`

    # create a directory for stage 2 charmap source files
    debug_output "mkdir -p $stage_3/charmaps"
    mkdir -p $stage_3/charmaps

    # generate stage 3 locale database from the charmap and locale
    # source files produced by locale from the stage 2 database
    generate_locale $stage_2/charmaps/$charmap \
                    $stage_2/$source.src \
                    $stage_3/$fname

    if [ $? -ne 0 ]; then
        failedassertions=`expr $failedassertions + 1`
        return;
    fi

    # point locale at the stage 2 directory
    debug_output "RWSTD_SRC_ROOT=$stage_2"
    RWSTD_SRC_ROOT=$stage_2
    debug_output "export RWSTD_SRC_ROOT"
    export RWSTD_SRC_ROOT

    assertions=`expr $assertions + 1`

    # dump the charmap and the locale data from the database
    # to a pair of charmap and locale source files
    dump_charmap $stage_3/$fname $stage_3/charmaps/$charmap
    dump_locale $stage_3/$fname $stage_3/$source.src

    if [ -z "$no_clean" ]; then
        # remove stage 3 locale to free up disk space but keep
        # the text dumps for later processing
        debug_output "rm $stage_3/$fname"
        rm $stage_3/$fname
     fi

    assertions=`expr $assertions + 1`

    # verify that stage 1 and stage 2 charmaps are the same
    debug_output "diff $stage_1/charmaps/$charmap " \
                      "$stage_2/charmaps/$charmap >/dev/null"
    diff $stage_1/charmaps/$charmap $stage_2/charmaps/$charmap >/dev/null
    if [ $? -ne 0 ]; then
        debug_output "## AssertionFailed: $stage_1/charmaps/$charmap " \
                     "and $stage_2/charmaps/$charmap differ."
        failedassertions=`expr $failedassertions + 1`
    fi

    # verify that stage 2 and stage 3 charmaps are the same
    debug_output "diff $stage_2/charmaps/$charmap " \
                      "$stage_3/charmaps/$charmap >/dev/null"
    diff $stage_2/charmaps/$charmap $stage_3/charmaps/$charmap >/dev/null
    if [ $? -ne 0 ]; then
        debug_output "## AssertionFailed: $stage_2/charmaps/$charmap " \
                     "and $stage_3/charmaps/$charmap differ."
        failedassertions=`expr $failedassertions + 1`
    fi

    # verify that stage 2 and stage 3 locale sources are the same
    debug_output "diff $stage_2/$source.src " \
                      "$stage_3/$source.src >/dev/null"
    diff $stage_2/$source.src $stage_3/$source.src >/dev/null
    if [ $? -ne 0 ]; then
        debug_output "## AssertionFailed: $stage_2/$source.src " \
                     "and $stage_3/$source.src differ."
        failedassertions=`expr $failedassertions + 1`
    fi

    if [ -z "$no_clean" ]; then
        # clean up
        debug_output "rm -rf $stage_1 $stage_2 $stage_3"
        rm -rf $stage_1 $stage_2 $stage_3
    fi
}

#
# cleanup/signal handler
#
cleanup ()
{
    if [ -z "$no_clean" ]; then
        # clean up
        debug_output "rm -rf $tmpdir"
        rm -rf $tmpdir
    fi

    exit
}

##############################################################################
#  Main code
##############################################################################


## assertions
assertions=0
failedassertions=0

## main functions
debug=no
chk_sanity=no
chk_func=no

## directories
bindir=""
nlsdir=""
locdir=""

## Get the options from the command line
while getopts ":nsfdb:i:l:O:L:M:C:D:" opt_name; do
    case $opt_name in 
        d) dbgout="/dev/tty";;
        s) chk_sanity=yes;;
        f) chk_func=yes;;
        b) bindir=$OPTARG;;
        i) nlsdir=$OPTARG;;
        l) locale_db=$OPTARG;;
        n) no_clean=yes;;
        O) outfile=$OPTARG;;
        L);; ## ignored
        M);; ## ignored
        C);; ## ignored
        D);; ## ignored
        *) echo "Unimplemented option : -$opt_name" >&2;
           exit 1;;
     esac;
done

## set temporary (working) directory
if [ -z "$TMP" ]; then
    TMP="/tmp";
    export TMP;
fi

tmpdir=$TMP/${locale_db:-unnamed-locale}.$$

## Actual test
if [ "$chk_sanity" = "yes" ]; then

    ## checking locale sanity
    check_locale_help
    check_locale_all
    check_locale_m
    check_locale_k
    check_localedef_help

elif [ "$chk_func" = "yes" ]; then

    ## create the temp dir
    mkdir $tmpdir
    if [ $? -ne 0 ]; then
        echo "$0: Unable to create $tmpdir, aborting" >&2
        exit 1
    fi

    # clean up temporary files on signal or exit
    trap cleanup HUP INT QUIT TERM EXIT

    # test only one locale
    test_locale $nlsdir $tmpdir $locale_db;
else 
    ## Invocation is wrong
    echo "$0: Usage : " >&2
    echo "script -s -b <bindir> ## checking sanity" >&2
    echo "script -f -i <nlsdir> -l <locale name> ## check functionality" >&2
    exit 2
fi

pcnt=`expr 100 \* \( $assertions - $failedassertions \) / $assertions`
output "# +-----------------------+--------+--------+--------+"
output "# | DIAGNOSTIC            | ACTIVE |  TOTAL |INACTIVE|"
output "# +-----------------------+--------+--------+--------+"

if test -z "$outfile"; then
    printf "# | (S7) ASSERTION        | %6d | %6d | %5d%% |\n" \
            $failedassertions $assertions $pcnt
else
    printf "# | (S7) ASSERTION        | %6d | %6d | %5d%% |\n" \
            $failedassertions $assertions $pcnt >> $outfile
fi

output "# +-----------------------+--------+--------+--------+"
output
output "## Assertions = "$assertions
output "## FailedAssertions = "$failedassertions
output
