Fixed .capitalize() method of Unicode objects to work like the

corresponding string method. Added tests for this too.

Patch written by Marc-Andre Lemburg. Copyright assigned to Guido van Rossum.
This commit is contained in:
Marc-André Lemburg 2001-01-29 11:14:16 +00:00
parent 30be8708c5
commit fde66e1bcc
3 changed files with 22 additions and 4 deletions

View File

@ -53,6 +53,8 @@ def run_method_tests(test):
test('capitalize', ' hello ', ' hello ')
test('capitalize', 'hello ', 'Hello ')
test('capitalize', 'aaaa', 'Aaaa')
test('capitalize', 'AaAa', 'Aaaa')
test('count', 'aaa', 3, 'a')
test('count', 'aaa', 0, 'b')

View File

@ -31,6 +31,8 @@ def test(method, input, output, *args):
test('capitalize', u' hello ', u' hello ')
test('capitalize', u'hello ', u'Hello ')
test('capitalize', u'aaaa', u'Aaaa')
test('capitalize', u'AaAa', u'Aaaa')
test('count', u'aaa', 3, u'a')
test('count', u'aaa', 0, u'b')

View File

@ -2631,11 +2631,25 @@ int fixswapcase(PyUnicodeObject *self)
static
int fixcapitalize(PyUnicodeObject *self)
{
if (self->length > 0 && Py_UNICODE_ISLOWER(self->str[0])) {
self->str[0] = Py_UNICODE_TOUPPER(self->str[0]);
return 1;
}
int len = self->length;
Py_UNICODE *s = self->str;
int status = 0;
if (len == 0)
return 0;
if (Py_UNICODE_ISLOWER(*s)) {
*s = Py_UNICODE_TOUPPER(*s);
status = 1;
}
s++;
while (--len > 0) {
if (Py_UNICODE_ISUPPER(*s)) {
*s = Py_UNICODE_TOLOWER(*s);
status = 1;
}
s++;
}
return status;
}
static