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.
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py
index c3010d6..2e912c8 100644
--- a/Lib/test/string_tests.py
+++ b/Lib/test/string_tests.py
@@ -53,6 +53,8 @@
 
     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')
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 855b0a2..2a24255 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -31,6 +31,8 @@
 
 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')
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 5c193dd..7b12594 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -2631,11 +2631,25 @@
 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;
     }
-    return 0;
+    s++;
+    while (--len > 0) {
+        if (Py_UNICODE_ISUPPER(*s)) {
+            *s = Py_UNICODE_TOLOWER(*s);
+            status = 1;
+        }
+        s++;
+    }
+    return status;
 }
 
 static