2003-04-14 04:21:52 +04:00
#! /usr/bin/python
2003-03-19 06:42:27 +03:00
# Comfychair test cases for Samba string functions.
# Copyright (C) 2003 by Martin Pool <mbp@samba.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
2007-07-10 05:52:05 +04:00
# published by the Free Software Foundation; either version 3 of the
2003-03-19 06:42:27 +03:00
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
2007-07-10 07:42:26 +04:00
# along with this program; if not, see <http://www.gnu.org/licenses/>.
2003-03-19 06:42:27 +03:00
2003-04-14 04:21:52 +04:00
# XXX: All this code assumes that the Unix character set is UTF-8,
# which is the most common setting. I guess it would be better to
# force it to that value while running the tests. I'm not sure of the
# best way to do that yet.
#
# Note that this is NOT the case in C code until the loadparm table is
# intialized -- the default seems to be ASCII, which rather lets Samba
# off the hook. :-) The best way seems to be to put this in the test
# harnesses:
#
# lp_load("/dev/null", True, False, False);
#
# -- mbp
2003-03-19 06:42:27 +03:00
import sys , re , comfychair
2003-04-14 04:21:52 +04:00
from unicodenames import *
2003-03-19 06:42:27 +03:00
def signum ( a ) :
if a < 0 :
return - 1
elif a > 0 :
return + 1
else :
return 0
2003-04-14 04:21:52 +04:00
class PushUCS2_Tests ( comfychair . TestCase ) :
""" Conversion to/from UCS2 """
def runtest ( self ) :
OE = LATIN_CAPITAL_LETTER_O_WITH_DIARESIS
oe = LATIN_CAPITAL_LETTER_O_WITH_DIARESIS
cases = [ ' hello ' ,
' hello world ' ,
' g ' + OE + OE + ' gomobile ' ,
' g ' + OE + oe + ' gomobile ' ,
u ' foo \u0100 ' ,
KATAKANA_LETTER_A * 20 ,
]
for u8str in cases :
out , err = self . runcmd ( " t_push_ucs2 \" %s \" " % u8str . encode ( ' utf-8 ' ) )
self . assert_equal ( out , " 0 \n " )
2003-03-19 06:42:27 +03:00
2003-04-14 04:21:52 +04:00
class StrCaseCmp ( comfychair . TestCase ) :
2003-03-19 06:42:27 +03:00
""" String comparisons in simple ASCII """
def run_strcmp ( self , a , b , expect ) :
2003-04-14 04:21:52 +04:00
out , err = self . runcmd ( ' t_strcmp \" %s \" \" %s \" ' % ( a . encode ( ' utf-8 ' ) , b . encode ( ' utf-8 ' ) ) )
2003-03-19 06:42:27 +03:00
if signum ( int ( out ) ) != expect :
self . fail ( " comparison failed: \n "
" a= %s \n "
" b= %s \n "
" expected= %s \n "
" result= %s \n " % ( ` a ` , ` b ` , ` expect ` , ` out ` ) )
def runtest ( self ) :
2003-03-19 11:32:42 +03:00
# A, B, strcasecmp(A, B)
2003-03-19 06:42:27 +03:00
cases = [ ( ' hello ' , ' hello ' , 0 ) ,
( ' hello ' , ' goodbye ' , + 1 ) ,
( ' goodbye ' , ' hello ' , - 1 ) ,
2003-03-19 11:32:42 +03:00
( ' hell ' , ' hello ' , - 1 ) ,
( ' ' , ' ' , 0 ) ,
( ' a ' , ' ' , + 1 ) ,
( ' ' , ' a ' , - 1 ) ,
( ' a ' , ' A ' , 0 ) ,
( ' aa ' , ' aA ' , 0 ) ,
( ' Aa ' , ' aa ' , 0 ) ,
( ' longstring ' * 100 , ' longstring ' * 100 , 0 ) ,
( ' longstring ' * 100 , ' longstring ' * 100 + ' a ' , - 1 ) ,
( ' longstring ' * 100 + ' a ' , ' longstring ' * 100 , + 1 ) ,
2003-04-14 04:21:52 +04:00
( KATAKANA_LETTER_A , KATAKANA_LETTER_A , 0 ) ,
( KATAKANA_LETTER_A , ' a ' , 1 ) ,
2003-03-19 11:32:42 +03:00
]
2003-03-19 06:42:27 +03:00
for a , b , expect in cases :
self . run_strcmp ( a , b , expect )
2004-03-09 14:15:44 +03:00
class strstr_m ( comfychair . TestCase ) :
""" String comparisons in simple ASCII """
def run_strstr ( self , a , b , expect ) :
out , err = self . runcmd ( ' t_strstr \" %s \" \" %s \" ' % ( a . encode ( ' utf-8 ' ) , b . encode ( ' utf-8 ' ) ) )
if ( out != ( expect + ' \n ' ) . encode ( ' utf-8 ' ) ) :
self . fail ( " comparison failed: \n "
" a= %s \n "
" b= %s \n "
" expected= %s \n "
" result= %s \n " % ( ` a ` , ` b ` , ` expect + ' \n ' ` , ` out ` ) )
def runtest ( self ) :
# A, B, strstr_m(A, B)
cases = [ ( ' hello ' , ' hello ' , ' hello ' ) ,
( ' hello ' , ' goodbye ' , ' (null) ' ) ,
( ' goodbye ' , ' hello ' , ' (null) ' ) ,
( ' hell ' , ' hello ' , ' (null) ' ) ,
( ' hello ' , ' hell ' , ' hello ' ) ,
( ' ' , ' ' , ' ' ) ,
( ' a ' , ' ' , ' a ' ) ,
( ' ' , ' a ' , ' (null) ' ) ,
( ' a ' , ' A ' , ' (null) ' ) ,
( ' aa ' , ' aA ' , ' (null) ' ) ,
( ' Aa ' , ' aa ' , ' (null) ' ) ,
( ' % v foo ' , ' % v ' , ' % v foo ' ) ,
( ' foo % v foo ' , ' % v ' , ' % v foo ' ) ,
( ' foo % v ' , ' % v ' , ' % v ' ) ,
( ' longstring ' * 100 , ' longstring ' * 99 , ' longstring ' * 100 ) ,
( ' longstring ' * 99 , ' longstring ' * 100 , ' (null) ' ) ,
( ' longstring a ' * 99 , ' longstring ' * 100 + ' a ' , ' (null) ' ) ,
( ' longstring ' * 100 + ' a ' , ' longstring ' * 100 , ' longstring ' * 100 + ' a ' ) ,
( KATAKANA_LETTER_A , KATAKANA_LETTER_A + ' bcd ' , ' (null) ' ) ,
( KATAKANA_LETTER_A + ' bcde ' , KATAKANA_LETTER_A + ' bcd ' , KATAKANA_LETTER_A + ' bcde ' ) ,
( ' d ' + KATAKANA_LETTER_A + ' bcd ' , KATAKANA_LETTER_A + ' bcd ' , KATAKANA_LETTER_A + ' bcd ' ) ,
( ' d ' + KATAKANA_LETTER_A + ' bd ' , KATAKANA_LETTER_A + ' bcd ' , ' (null) ' ) ,
( ' e ' + KATAKANA_LETTER_A + ' bcdf ' , KATAKANA_LETTER_A + ' bcd ' , KATAKANA_LETTER_A + ' bcdf ' ) ,
( KATAKANA_LETTER_A , KATAKANA_LETTER_A + ' bcd ' , ' (null) ' ) ,
( KATAKANA_LETTER_A * 3 , ' a ' , ' (null) ' ) ,
]
for a , b , expect in cases :
self . run_strstr ( a , b , expect )
2003-03-19 11:32:42 +03:00
# Define the tests exported by this module
2003-04-14 04:21:52 +04:00
tests = [ StrCaseCmp ,
2004-03-09 14:15:44 +03:00
strstr_m ,
2003-04-14 04:21:52 +04:00
PushUCS2_Tests ]
2003-03-19 06:42:27 +03:00
2003-03-19 11:32:42 +03:00
# Handle execution of this file as a main program
2003-03-19 06:42:27 +03:00
if __name__ == ' __main__ ' :
comfychair . main ( tests )
2003-04-14 04:21:52 +04:00
# Local variables:
# coding: utf-8
# End: