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', 'hello ', 'Hello ') test('capitalize', 'hello ', 'Hello ')
test('capitalize', 'aaaa', 'Aaaa')
test('capitalize', 'AaAa', 'Aaaa')
test('count', 'aaa', 3, 'a') test('count', 'aaa', 3, 'a')
test('count', 'aaa', 0, 'b') 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'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', 3, u'a')
test('count', u'aaa', 0, u'b') test('count', u'aaa', 0, u'b')

View File

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