Add Character.isTitleCase.

PiperOrigin-RevId: 355341342
Change-Id: I0d57f07dab3905299d519f90f487e461259da79e
diff --git a/user/super/com/google/gwt/emul/java/lang/Character.java b/user/super/com/google/gwt/emul/java/lang/Character.java
index 345a629..9bef6a5 100644
--- a/user/super/com/google/gwt/emul/java/lang/Character.java
+++ b/user/super/com/google/gwt/emul/java/lang/Character.java
@@ -18,7 +18,6 @@
 import static javaemul.internal.InternalPreconditions.checkCriticalArgument;
 
 import java.io.Serializable;
-
 import javaemul.internal.NativeRegExp;
 
 /**
@@ -44,7 +43,6 @@
  *  - isISOControl(char)
  *  - isMirrored(char)
  *  - isSpaceChar(char)
- *  - isTitleCase(char)
  *  - isUnicodeIdentifierPart(char)
  *  - isUnicodeIdentifierStart(char)
  *  - getDirectionality(*)
@@ -329,6 +327,11 @@
     return isHighSurrogate(highSurrogate) && isLowSurrogate(lowSurrogate);
   }
 
+  public static boolean isTitleCase(char c) {
+    // https://www.compart.com/en/unicode/category/Lt
+    return c != toUpperCase(c) && c != toLowerCase(c);
+  }
+
   /*
    * TODO: correct Unicode handling.
    */
diff --git a/user/test/com/google/gwt/emultest/java/lang/CharacterTest.java b/user/test/com/google/gwt/emultest/java/lang/CharacterTest.java
index e843146..426e817 100644
--- a/user/test/com/google/gwt/emultest/java/lang/CharacterTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/CharacterTest.java
@@ -16,6 +16,7 @@
 package com.google.gwt.emultest.java.lang;
 
 import com.google.gwt.junit.client.GWTTestCase;
+import java.util.Arrays;
 
 /**
  * Tests for java.lang.Character.
@@ -416,6 +417,52 @@
     }
   }
 
+  public void test_isTitleCaseC() {
+    char[] expectedTitleCaseChars = {
+      (char) 0x01c5,
+      (char) 0x01c8,
+      (char) 0x01cb,
+      (char) 0x01f2,
+      (char) 0x1f88,
+      (char) 0x1f89,
+      (char) 0x1f8a,
+      (char) 0x1f8b,
+      (char) 0x1f8c,
+      (char) 0x1f8d,
+      (char) 0x1f8e,
+      (char) 0x1f8f,
+      (char) 0x1f98,
+      (char) 0x1f99,
+      (char) 0x1f9a,
+      (char) 0x1f9b,
+      (char) 0x1f9c,
+      (char) 0x1f9d,
+      (char) 0x1f9e,
+      (char) 0x1f9f,
+      (char) 0x1fa8,
+      (char) 0x1fa9,
+      (char) 0x1faa,
+      (char) 0x1fab,
+      (char) 0x1fac,
+      (char) 0x1fad,
+      (char) 0x1fae,
+      (char) 0x1faf,
+      (char) 0x1fbc,
+      (char) 0x1fcc,
+      (char) 0x1ffc
+    };
+
+    char[] foundChars = new char[expectedTitleCaseChars.length];
+    int lastFoundCharIndex = 0;
+    for (char c = 0; c < 65535; c++) {
+      if (Character.isTitleCase(c)) {
+        foundChars[lastFoundCharIndex++] = c;
+      }
+    }
+
+    assertTrue(Arrays.equals(expectedTitleCaseChars, foundChars));
+  }
+
   public void testToString() {
     assertEquals(" ", new Character((char) 32).toString());
   }