Home | History | Annotate | Download | only in lib
      1 #!/bin/sh
      2 # ***************************************************************************
      3 # *                                  _   _ ____  _
      4 # *  Project                     ___| | | |  _ \| |
      5 # *                             / __| | | | |_) | |
      6 # *                            | (__| |_| |  _ <| |___
      7 # *                             \___|\___/|_| \_\_____|
      8 # *
      9 # * Copyright (C) 2013, Daniel Stenberg, <daniel (at] haxx.se>, et al.
     10 # *
     11 # * This software is licensed as described in the file COPYING, which
     12 # * you should have received as part of this distribution. The terms
     13 # * are also available at https://curl.haxx.se/docs/copyright.html.
     14 # *
     15 # * You may opt to use, copy, modify, merge, publish, distribute and/or sell
     16 # * copies of the Software, and permit persons to whom the Software is
     17 # * furnished to do so, under the terms of the COPYING file.
     18 # *
     19 # * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
     20 # * KIND, either express or implied.
     21 # *
     22 # ***************************************************************************
     23 
     24 #
     25 # This Bourne shell script file is used by test case 1221 to do
     26 # unit testing of curl_10char_object_name() shell function which
     27 # is defined in file objnames.inc and sourced by this file and
     28 # any other shell script that may use it.
     29 #
     30 
     31 #
     32 # argument validation
     33 #
     34 
     35 if test $# -eq 1; then
     36   :
     37 else
     38   echo "Usage: ${0} srcdir"
     39   exit 1
     40 fi
     41 
     42 if test -f "${1}/runtests.pl"; then
     43   :
     44 else
     45   echo "${0}: Wrong srcdir"
     46   exit 1
     47 fi
     48 
     49 srcdir=${1}
     50 
     51 if test -f "$srcdir/../lib/objnames.inc"; then
     52   :
     53 else
     54   echo "$0: Missing objnames.inc"
     55   exit 1
     56 fi
     57 
     58 #
     59 # Some variables
     60 #
     61 
     62 logdir=log
     63 tstnum=1221
     64 
     65 list_c=$logdir/${tstnum}_list_c
     66 list_obj=$logdir/${tstnum}_list_obj
     67 list_obj_c=$logdir/${tstnum}_list_obj_c
     68 list_obj_uniq=$logdir/${tstnum}_list_obj_uniq
     69 
     70 
     71 #
     72 # Source curl_10char_object_name() function definition
     73 #
     74 
     75 . $srcdir/../lib/objnames.inc
     76 
     77 #
     78 # Some curl_10char_object_name() unit tests
     79 #
     80 
     81 echo 'Testing curl_10char_object_name...'
     82 echo ""
     83 
     84 argstr=123__678__ABC__FGH__KLM__PQRSTUV
     85 expect=16AFKPQRST
     86 outstr=`curl_10char_object_name $argstr`
     87 echo "result: $outstr expected: $expect input: $argstr"
     88 
     89 argstr=123__678__ABC__FGH__KLM__PQ.S.UV
     90 expect=16AFKPQ
     91 outstr=`curl_10char_object_name $argstr`
     92 echo "result: $outstr expected: $expect input: $argstr"
     93 
     94 argstr=123__678__ABC..FGH..KLM..PQRSTUV
     95 expect=16ABC
     96 outstr=`curl_10char_object_name $argstr`
     97 echo "result: $outstr expected: $expect input: $argstr"
     98 
     99 argstr=123__678_.ABC._FGH__KLM__PQRSTUV
    100 expect=16
    101 outstr=`curl_10char_object_name $argstr`
    102 echo "result: $outstr expected: $expect input: $argstr"
    103 
    104 argstr=123.567.90ABCDEFGHIJKLMNOPQRSTUV
    105 expect=123
    106 outstr=`curl_10char_object_name $argstr`
    107 echo "result: $outstr expected: $expect input: $argstr"
    108 
    109 argstr=1234567.90A.CDEFGHIJKLMNOPQRSTUV
    110 expect=1234567
    111 outstr=`curl_10char_object_name $argstr`
    112 echo "result: $outstr expected: $expect input: $argstr"
    113 
    114 argstr=1234567890.BCD.FGHIJKLMNOPQRSTUV
    115 expect=1234567890
    116 outstr=`curl_10char_object_name $argstr`
    117 echo "result: $outstr expected: $expect input: $argstr"
    118 
    119 argstr=12=45-78+0AB.DE.GHIJKLMNOPQRSTUV
    120 expect=1470AB
    121 outstr=`curl_10char_object_name $argstr`
    122 echo "result: $outstr expected: $expect input: $argstr"
    123 
    124 argstr=1234567890ABCDEFGHIJKLMNOPQRSTUV
    125 expect=1234567890
    126 outstr=`curl_10char_object_name $argstr`
    127 echo "result: $outstr expected: $expect input: $argstr"
    128 
    129 argstr=123_567_90A_CDE_GHIJKLMNOPQRSTUV
    130 expect=159CGHIJKL
    131 outstr=`curl_10char_object_name $argstr`
    132 echo "result: $outstr expected: $expect input: $argstr"
    133 
    134 argstr=123_567_90A_CDEFGHIJKLMNOPQRSTUV
    135 expect=159CDEFGHI
    136 outstr=`curl_10char_object_name $argstr`
    137 echo "result: $outstr expected: $expect input: $argstr"
    138 
    139 argstr=123_567_90ABCDEFGHIJKLMNOPQRSTUV
    140 expect=1590ABCDEF
    141 outstr=`curl_10char_object_name $argstr`
    142 echo "result: $outstr expected: $expect input: $argstr"
    143 
    144 argstr=123_567890ABCDEFGHIJKLMNOPQRSTUV
    145 expect=1567890ABC
    146 outstr=`curl_10char_object_name $argstr`
    147 echo "result: $outstr expected: $expect input: $argstr"
    148 
    149 argstr=1234567890ABCDEFGHIJKLMNOPQRSTUV
    150 expect=1234567890
    151 outstr=`curl_10char_object_name $argstr`
    152 echo "result: $outstr expected: $expect input: $argstr"
    153 
    154 #
    155 # Verify that generated object name is distinct for
    156 # all *.c source files in lib and src subdirectories.
    157 #
    158 
    159 ls $srcdir/../lib/*.c > $list_c
    160 ls $srcdir/../src/*.c >> $list_c
    161 
    162 rm -f $list_obj
    163 
    164 for c_fname in `cat $list_c`; do
    165   obj_name=`curl_10char_object_name $c_fname`
    166   echo "$obj_name" >> $list_obj
    167 done
    168 
    169 sort -u $list_obj > $list_obj_uniq
    170 
    171 cnt_c=`cat $list_c | wc -l`
    172 cnt_u=`cat $list_obj_uniq | wc -l`
    173 
    174 echo ""
    175 echo ""
    176 echo ""
    177 if test $cnt_c -eq $cnt_u; then
    178   echo "10-characters-or-less generated object names are unique."
    179   obj_name_clash="no"
    180 else
    181   echo "10-characters-or-less generated object names are clashing..."
    182   obj_name_clash="yes"
    183 fi
    184 
    185 if test $obj_name_clash = "yes"; then
    186   #
    187   # Show clashing object names and respective source file names
    188   #
    189   echo ""
    190   paste $list_obj $list_c | sort > $list_obj_c
    191   prev_match="no"
    192   prev_line="unknown"
    193   prev_obj_name="unknown"
    194   while read this_line; do
    195     obj_name=`echo "$this_line" | cut -f1`
    196     if test "x$obj_name" = "x$prev_obj_name"; then
    197       if test "x$prev_match" != "xyes"; then
    198         echo "$prev_line"
    199         echo "$this_line"
    200         prev_match="yes"
    201       else
    202         echo "$this_line"
    203       fi
    204     else
    205       prev_match="no"
    206     fi
    207     prev_line=$this_line
    208     prev_obj_name=$obj_name
    209   done < $list_obj_c
    210 fi
    211 
    212 rm -f $list_c
    213 rm -f $list_obj
    214 rm -f $list_obj_c
    215 rm -f $list_obj_uniq
    216 
    217 # end of objnames-test10.sh
    218