cpython/Lib/test/test_string.py

86 lines
2.6 KiB
Python

from test.test_support import verbose, TestSkipped
from test import string_tests
import string, sys
# XXX: kludge... short circuit if strings don't have methods
try:
''.join
except AttributeError:
raise TestSkipped
def test(name, input, output, *args):
if verbose:
print 'string.%s%s =? %s... ' % (name, (input,) + args, output),
try:
# Prefer string methods over string module functions
try:
f = getattr(input, name)
value = apply(f, args)
except AttributeError:
f = getattr(string, name)
value = apply(f, (input,) + args)
except:
value = sys.exc_type
f = name
if value == output:
# if the original is returned make sure that
# this doesn't happen with subclasses
if value is input:
class ssub(str):
def __repr__(self):
return 'ssub(%r)' % str.__repr__(self)
input = ssub(input)
try:
f = getattr(input, name)
value = apply(f, args)
except AttributeError:
f = getattr(string, name)
value = apply(f, (input,) + args)
if value is input:
if verbose:
print 'no'
print '*',f, `input`, `output`, `value`
return
if value != output:
if verbose:
print 'no'
print f, `input`, `output`, `value`
else:
if verbose:
print 'yes'
string_tests.run_module_tests(test)
string_tests.run_method_tests(test)
string_tests.run_contains_tests(test)
string_tests.run_inplace_tests(str)
string.whitespace
string.lowercase
string.uppercase
# Float formatting
for prec in range(100):
formatstring = '%%.%if' % prec
value = 0.01
for x in range(60):
value = value * 3.141592655 / 3.0 * 10.0
#print 'Overflow check for x=%i and prec=%i:' % \
# (x, prec),
try:
result = formatstring % value
except OverflowError:
# The formatfloat() code in stringobject.c and
# unicodeobject.c uses a 120 byte buffer and switches from
# 'f' formatting to 'g' at precision 50, so we expect
# OverflowErrors for the ranges x < 50 and prec >= 67.
if x >= 50 or \
prec < 67:
print '*** unexpected OverflowError for x=%i and prec=%i' % (x, prec)
else:
#print 'OverflowError'
pass
else:
#print result
pass