Author: [EMAIL PROTECTED]
Date: Thu Sep  4 14:06:36 2008
New Revision: 3620

Added:
     
changes/jat/ucd/user/src/com/google/gwt/i18n/client/impl/ucd/CharTableImpl_UCD.java
    
(contents, props changed)
    changes/jat/ucd/user/test/com/google/gwt/emultest/EmulSuiteUCD.gwt.xml
     
changes/jat/ucd/user/test/com/google/gwt/emultest/java/lang/CharacterUCDTest.java
    
(contents, props changed)
Modified:
    changes/jat/ucd/user/src/com/google/gwt/compression/common/Huffman.java
    changes/jat/ucd/user/src/com/google/gwt/i18n/I18N.gwt.xml
     
changes/jat/ucd/user/src/com/google/gwt/i18n/client/impl/CharTableImpl.java
    changes/jat/ucd/user/super/com/google/gwt/emul/java/lang/Character.java
     
changes/jat/ucd/user/super/com/google/gwt/emul/java/lang/StringBuilder.java

Log:
UCD tables integrated and passing all tests.


Modified:  
changes/jat/ucd/user/src/com/google/gwt/compression/common/Huffman.java
==============================================================================
--- changes/jat/ucd/user/src/com/google/gwt/compression/common/Huffman.java     
 
(original)
+++ changes/jat/ucd/user/src/com/google/gwt/compression/common/Huffman.java     
 
Thu Sep  4 14:06:36 2008
@@ -23,7 +23,7 @@
  import java.util.PriorityQueue;

  /**
- * TODO(jat): Class description here.
+ * Class for encoding/decoding huffman-compressed data.
   */
  public class Huffman {

@@ -256,7 +256,10 @@
    }

    /**
-   * TODO(jat): Class description here.
+   * Huffman encoding.
+   *
+   * Generates the canonical encoding of code lengths and codewords based  
on
+   * the frequencies of the literal symbols.
     */
    public static class Encode {


Modified: changes/jat/ucd/user/src/com/google/gwt/i18n/I18N.gwt.xml
==============================================================================
--- changes/jat/ucd/user/src/com/google/gwt/i18n/I18N.gwt.xml   (original)
+++ changes/jat/ucd/user/src/com/google/gwt/i18n/I18N.gwt.xml   Thu Sep  4  
14:06:36 2008
@@ -73,4 +73,21 @@
        <generate-with class="com.google.gwt.i18n.rebind.LocaleInfoGenerator">
                <when-type-is 
class="com.google.gwt.i18n.client.impl.LocaleInfoImpl" />
        </generate-with>
+
+  <!-- This property defines how the various Character properties (such as  
-->
+  <!-- isLetter(), toLowerCase(), etc) are handled.  The default            
-->
+  <!-- implementation only works with with US-ASCII characters in general,  
-->
+  <!-- but does not pull in large tables.  To get full Unicode support,     
-->
+  <!-- add the following to your module.gwt.xml file:                       
-->
+  <!--      <extend-property name="charTables" values="ucd"/>               
-->
+  <!--      <set-property name="charTables" value="ucd"/>                   
-->
+  <!-- Note that this will pull in the decompression code if any of the     
-->
+  <!-- tables are used, and relatively small tables for each property that  
-->
+  <!-- is  
used.                                                               -->
+  <define-property name="charTables" values="ascii" />
+
+  <replace-with  
class="com.google.gwt.i18n.client.impl.ucd.CharTableImpl_UCD">
+    <when-type-is class="com.google.gwt.i18n.client.impl.CharTableImpl"/>
+    <when-property-is name="charTables" value="ucd"/>
+  </replace-with>
  </module>

Modified:  
changes/jat/ucd/user/src/com/google/gwt/i18n/client/impl/CharTableImpl.java
==============================================================================
---  
changes/jat/ucd/user/src/com/google/gwt/i18n/client/impl/CharTableImpl.java     
 
(original)
+++  
changes/jat/ucd/user/src/com/google/gwt/i18n/client/impl/CharTableImpl.java     
 
Thu Sep  4 14:06:36 2008
@@ -37,7 +37,7 @@
      return Instance.instance;
    }

-  public int getDirectionality(int cp) {
+  public byte getDirectionality(@SuppressWarnings("unused") int cp) {
      return Character.DIRECTIONALITY_LEFT_TO_RIGHT;
    }

@@ -63,6 +63,37 @@
    }

    public int getType(int cp) {
+    if (isLetter(cp)) {
+      if (isLowerCase(cp)) {
+        return Character.LOWERCASE_LETTER;
+      }
+      if (isUpperCase(cp)) {
+        return Character.UPPERCASE_LETTER;
+      }
+      if (Character.isTitleCase(cp)) {
+        return Character.TITLECASE_LETTER;
+      }
+      return Character.OTHER_LETTER;
+    }
+    if (isDigit(cp)
+        // US-ASCII digits taken care of in isDigit
+        // || (cp >= '0' && cp <= '9')
+        // Arabic-Indic digits
+        || (cp >= 0x660 && cp <= 0x669)
+        // Extended Arabic-Indic digits
+        || (cp >= 0x6F0 && cp <= 0x6F9)
+        // Devenagari digits
+        || (cp >= 0x966 && cp <= 0x96F)
+        // Full-width digits
+        || (cp >= 0xFF10 && cp <= 0xFF19)) {
+      return Character.DECIMAL_DIGIT_NUMBER;
+    }
+    if (cp < 32 || (cp >= 0x7F && cp <= 0x9F)) {
+      return Character.CONTROL;
+    }
+    if (cp == 32 || cp == 0xA0) {
+      return Character.SPACE_SEPARATOR;
+    }
      return Character.UNASSIGNED;
    }

@@ -70,7 +101,6 @@
      return cp >= Character.MIN_CODE_POINT && cp <=  
Character.MAX_CODE_POINT;
    }

-
    public native boolean isDigit(int cp) /*-{
      if (cp < 0 || cp > 0xFFFF) {
        return false;
@@ -132,6 +162,10 @@

    public boolean isUpperCase(int cp) {
      return toUpperCase(cp) == cp && isLetter(cp);
+  }
+
+  public boolean supportsFullUnicode() {
+    return false;
    }

    public native int toLowerCase(int cp) /*-{

Added:  
changes/jat/ucd/user/src/com/google/gwt/i18n/client/impl/ucd/CharTableImpl_UCD.java
==============================================================================
--- (empty file)
+++  
changes/jat/ucd/user/src/com/google/gwt/i18n/client/impl/ucd/CharTableImpl_UCD.java
      
Thu Sep  4 14:06:36 2008
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may  
not
+ * use this file except in compliance with the License. You may obtain a  
copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations  
under
+ * the License.
+ */
+package com.google.gwt.i18n.client.impl.ucd;
+
+import com.google.gwt.i18n.client.impl.CharTableImpl;
+
+/**
+ * @author [EMAIL PROTECTED] (Your Name Here)
+ *
+ */
+public class CharTableImpl_UCD extends CharTableImpl {
+
+  @Override
+  public byte getDirectionality(int cp) {
+    return (byte) DirectionalityTable.getDirectionality(cp);
+  }
+
+  @Override
+  public int getNumericValue(int codePoint) {
+    return NumericValueTable.getNumericValue(codePoint);
+  }
+
+  @Override
+  public int getType(int codePoint) {
+    return TypeTable.getType(codePoint);
+  }
+
+  @Override
+  public boolean isDefined(int codePoint) {
+    return super.isDefined(codePoint);
+  }
+
+  @Override
+  public boolean isDigit(int codePoint) {
+    return DigitTable.isDigit(codePoint);
+  }
+
+  @Override
+  public boolean isIdentifierIgnorable(int codePoint) {
+    return IdentifierIgnorableTable.isIdentifierIgnorable(codePoint);
+  }
+
+  @Override
+  public boolean isJavaIdentifierPart(int codePoint) {
+    return JavaIdentifierPartTable.isJavaIdentifierPart(codePoint)
+        ^ isLetterOrDigit(codePoint);
+  }
+
+  @Override
+  public boolean isJavaIdentifierStart(int codePoint) {
+    return JavaIdentifierStartTable.isJavaIdentifierStart(codePoint)
+        ^ isLetter(codePoint);
+  }
+
+  @Override
+  public boolean isLetter(int codePoint) {
+    return LetterTable.isLetter(codePoint);
+  }
+
+  @Override
+  public boolean isLetterOrDigit(int codePoint) {
+    return isLetter(codePoint) | isDigit(codePoint);
+  }
+
+  @Override
+  public boolean isLowerCase(int codePoint) {
+    return LowerCaseTable.isLowerCase(codePoint);
+  }
+
+  @Override
+  public boolean isMirrored(int codePoint) {
+    return MirroredTable.isMirrored(codePoint);
+  }
+
+  @Override
+  public boolean isSpaceChar(int codePoint) {
+    return SpaceCharTable.isSpaceChar(codePoint);
+  }
+
+  @Override
+  public boolean isUnicodeIdentifierPart(int codePoint) {
+    return UnicodeIdentifierPartTable.isUnicodeIdentifierPart(codePoint)
+        ^ isLetterOrDigit(codePoint);
+  }
+
+  @Override
+  public boolean isUnicodeIdentifierStart(int codePoint) {
+    return UnicodeIdentifierStartTable.isUnicodeIdentifierStart(codePoint)
+        ^ isLetter(codePoint);
+  }
+
+  @Override
+  public boolean isUpperCase(int codePoint) {
+    return UpperCaseTable.isUpperCase(codePoint);
+  }
+
+  @Override
+  public boolean supportsFullUnicode() {
+    return true;
+  }
+
+  @Override
+  public int toLowerCase(int codePoint) {
+    return ToLowerCaseTable.toLowerCase(codePoint);
+  }
+
+  @Override
+  public String toLowerCase(String str) {
+    // TODO(jat): handle special cases, such as locale and context
+    StringBuilder buf = new StringBuilder();
+    int n = str.length();
+    int i = 0;
+    while (i < n) {
+      int cp = str.codePointAt(i);
+      i += Character.charCount(cp);
+      buf.appendCodePoint(toLowerCase(cp));
+    }
+    return buf.toString();
+  }
+
+  @Override
+  public int toTitleCase(int codePoint) {
+    return ToTitleCaseTable.toTitleCase(codePoint);
+  }
+
+  @Override
+  public int toUpperCase(int codePoint) {
+    return ToUpperCaseTable.toUpperCase(codePoint);
+  }
+
+  @Override
+  public String toUpperCase(String str) {
+    // TODO(jat): handle special cases, such as locale and context
+    StringBuilder buf = new StringBuilder();
+    int n = str.length();
+    int i = 0;
+    while (i < n) {
+      int cp = str.codePointAt(i);
+      i += Character.charCount(cp);
+      buf.appendCodePoint(toUpperCase(cp));
+    }
+    return buf.toString();
+  }
+
+}

Modified:  
changes/jat/ucd/user/super/com/google/gwt/emul/java/lang/Character.java
==============================================================================
--- changes/jat/ucd/user/super/com/google/gwt/emul/java/lang/Character.java     
 
(original)
+++ changes/jat/ucd/user/super/com/google/gwt/emul/java/lang/Character.java     
 
Thu Sep  4 14:06:36 2008
@@ -119,7 +119,7 @@

    public static final byte DIRECTIONALITY_UNDEFINED = -1;
    public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = 0;
-  public static final byte DIRECTONALITY_RIGHT_TO_LEFT = 1;
+  public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = 1;
    public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = 2;
    public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = 3;
    public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = 4;
@@ -262,7 +262,7 @@
      }
    }

-  public static int getDirectionality(int cp) {
+  public static byte getDirectionality(int cp) {
      return CharTableImpl.instance().getDirectionality(cp);
    }

@@ -364,7 +364,7 @@
      return isHighSurrogate(highSurrogate) && isLowSurrogate(lowSurrogate);
    }

-  public static boolean isTitleCase(int cp) {
+  public static boolean isTitleCase(@SuppressWarnings("unused") int cp) {
      return false;
    }

@@ -541,7 +541,7 @@

    /**
     * Computes the high surrogate character of the UTF16 representation of a
-   * non-BMP code point. See [EMAIL PROTECTED] getLowSurrogate}.
+   * non-BMP code point. See [EMAIL PROTECTED] #getLowSurrogate}.
     *
     * @param codePoint requested codePoint, required to be >=
     *          MIN_SUPPLEMENTARY_CODE_POINT
@@ -554,7 +554,7 @@

    /**
     * Computes the low surrogate character of the UTF16 representation of a
-   * non-BMP code point. See [EMAIL PROTECTED] getHighSurrogate}.
+   * non-BMP code point. See [EMAIL PROTECTED] #getHighSurrogate}.
     *
     * @param codePoint requested codePoint, required to be >=
     *          MIN_SUPPLEMENTARY_CODE_POINT

Modified:  
changes/jat/ucd/user/super/com/google/gwt/emul/java/lang/StringBuilder.java
==============================================================================
---  
changes/jat/ucd/user/super/com/google/gwt/emul/java/lang/StringBuilder.java     
 
(original)
+++  
changes/jat/ucd/user/super/com/google/gwt/emul/java/lang/StringBuilder.java     
 
Thu Sep  4 14:06:36 2008
@@ -121,12 +121,16 @@
        }
      }
      return this;
-  };
+  }

    public StringBuilder append(StringBuffer x) {
      return append(String.valueOf(x));
    }

+  public StringBuilder appendCodePoint(int codePoint) {
+    return append(Character.toChars(codePoint));
+  }
+
    /**
     * This implementation does not track capacity; always returns
     * [EMAIL PROTECTED] Integer#MAX_VALUE}.
@@ -139,6 +143,18 @@
      return toString().charAt(index);
    }

+  public int codePointAt(int index) {
+    return toString().codePointAt(index);
+  }
+
+  public int codePointBefore(int index) {
+    return toString().codePointBefore(index);
+  }
+
+  public int codePointCount(int beginIndex, int endIndex) {
+    return toString().codePointCount(beginIndex, endIndex);
+  }
+
    public StringBuilder delete(int start, int end) {
      return replace(start, end, "");
    }
@@ -230,6 +246,10 @@

    public int length() {
      return stringLength;
+  }
+
+  public int offsetByCodePoints(int index, int codePointOffset) {
+    return toString().offsetByCodePoints(index, codePointOffset);
    }

    public StringBuilder replace(int start, int end, String toInsert) {

Added:  
changes/jat/ucd/user/test/com/google/gwt/emultest/EmulSuiteUCD.gwt.xml
==============================================================================
--- (empty file)
+++ changes/jat/ucd/user/test/com/google/gwt/emultest/EmulSuiteUCD.gwt.xml      
 
Thu Sep  4 14:06:36 2008
@@ -0,0 +1,19 @@
+<!--                                                                         
-->
+<!-- Copyright 2008 Google  
Inc.                                             -->
+<!-- Licensed under the Apache License, Version 2.0 (the "License");  
you    -->
+<!-- may not use this file except in compliance with the License. You  
may   -->
+<!-- may obtain a copy of the License  
at                                    -->
+<!--                                                                         
-->
+<!--  
http://www.apache.org/licenses/LICENSE-2.0                             -->
+<!--                                                                         
-->
+<!-- Unless required by applicable law or agreed to in writing,  
software    -->
+<!-- distributed under the License is distributed on an "AS IS"  
BASIS,      -->
+<!-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express  
or        -->
+<!-- implied. License for the specific language governing permissions  
and   -->
+<!-- limitations under the  
License.                                         -->
+
+<module>
+  <inherits name='com.google.gwt.emultest.EmulSuite'/>
+  <extend-property name="charTables" values="ucd"/>
+  <set-property name="charTables" value="ucd"/>
+</module>

Added:  
changes/jat/ucd/user/test/com/google/gwt/emultest/java/lang/CharacterUCDTest.java
==============================================================================
--- (empty file)
+++  
changes/jat/ucd/user/test/com/google/gwt/emultest/java/lang/CharacterUCDTest.java
        
Thu Sep  4 14:06:36 2008
@@ -0,0 +1,365 @@
+/*
+ * Copyright 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may  
not
+ * use this file except in compliance with the License. You may obtain a  
copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,  
WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations  
under
+ * the License.
+ */
+package com.google.gwt.emultest.java.lang;
+
+import com.google.gwt.junit.client.GWTTestCase;
+
+/**
+ * Tests for java.lang.Character.
+ */
+public class CharacterUCDTest extends GWTTestCase {
+
+  private static class CharSequenceAdapter implements CharSequence {
+    private char[] charArray;
+    private int start;
+    private int end;
+
+    public CharSequenceAdapter(char[] charArray) {
+      this(charArray, 0, charArray.length);
+    }
+
+    public CharSequenceAdapter(char[] charArray, int start, int end) {
+      this.charArray = charArray;
+      this.start = start;
+      this.end = end;
+    }
+
+    public char charAt(int index) {
+      return charArray[index + start];
+    }
+
+    public int length() {
+      return end - start;
+    }
+
+    public java.lang.CharSequence subSequence(int start, int end) {
+      return new CharSequenceAdapter(charArray, this.start + start,
+          this.start + end);
+    }
+  }
+
+
+  /**
+   * Helper class which applies some arbitrary char mutation function
+   * to a string and returns it.
+   */
+  public abstract class Changer {
+    String original;
+
+    public Changer(String o) {
+      original = o;
+    }
+
+    public abstract char change(char c);
+
+    public String changed() {
+      StringBuffer buf = new StringBuffer();
+      for (int i = 0; i < original.length(); i++) {
+        buf.append(change(original.charAt(i)));
+      }
+      return buf.toString();
+    }
+  }
+  /**
+   * Helper class which collects the set of characters which pass some
+   * arbitrary boolean function.
+   */
+  public abstract class Judge {
+    String original;
+
+    public Judge(String o) {
+      original = o;
+    }
+
+    public String allPass() {
+      StringBuffer buf = new StringBuffer();
+      for (int i = 0; i < original.length(); i++) {
+        if (pass(original.charAt(i))) {
+          buf.append(original.charAt(i));
+        }
+      }
+      return buf.toString();
+    }
+
+    public abstract boolean pass(char c);
+  }
+
+  class LowerCaseJudge extends Judge {
+    public LowerCaseJudge(String s) {
+      super(s);
+    }
+
+    public boolean pass(char c) {
+      return Character.isLowerCase(c);
+    }
+  }
+
+  class UpperCaseJudge extends Judge {
+    public UpperCaseJudge(String s) {
+      super(s);
+    }
+
+    public boolean pass(char c) {
+      return Character.isUpperCase(c);
+    }
+  }
+
+  public static String allChars;
+
+  public static final int NUM_CHARS_HANDLED = 127;
+
+  static {
+    StringBuffer b = new StringBuffer();
+    for (char c = 0; c < NUM_CHARS_HANDLED; c++) {
+      b.append(c);
+    }
+    allChars = b.toString();
+  }
+
+  Judge digitJudge = new Judge(allChars) {
+    public boolean pass(char c) {
+      return Character.isDigit(c);
+    }
+  };
+  Judge letterJudge = new Judge(allChars) {
+    public boolean pass(char c) {
+      return Character.isLetter(c);
+    }
+  };
+  Judge letterOrDigitJudge = new Judge(allChars) {
+    public boolean pass(char c) {
+      return Character.isLetterOrDigit(c);
+    }
+  };
+  Changer lowerCaseChanger = new Changer(allChars) {
+    public char change(char c) {
+      return Character.toLowerCase(c);
+    }
+  };
+  Judge lowerCaseJudge = new LowerCaseJudge(allChars);
+  Judge spaceJudge = new Judge(allChars) {
+    @SuppressWarnings("deprecation") // Character.isSpace()
+    public boolean pass(char c) {
+      return Character.isSpace(c); // suppress deprecation
+    }
+  };
+  Changer upperCaseChanger = new Changer(allChars) {
+    public char change(char c) {
+      return Character.toUpperCase(c);
+    }
+  };
+  Judge upperCaseJudge = new UpperCaseJudge(allChars);
+
+  @Override
+  public String getModuleName() {
+    return "com.google.gwt.emultest.EmulSuiteUCD";
+  }
+
+  public void testCharValue() {
+    assertEquals(new Character((char) 32).charValue(), (char) 32);
+  }
+
+  public void testCodePoint() {
+    assertEquals(1, Character.charCount(65));
+    assertEquals(2,  
Character.charCount(Character.MIN_SUPPLEMENTARY_CODE_POINT));
+    char[] testPlain = new char[] { 'C', 'A', 'T' };
+    char[] testUnicode = new char[] { 'C', '\uD801', '\uDF00', 'T' };
+    CharSequence plainSequence = new CharSequenceAdapter(testPlain);
+    CharSequence unicodeSequence = new CharSequenceAdapter(testUnicode);
+    assertEquals(65, Character.codePointAt(testPlain, 1));
+    assertEquals(65, Character.codePointAt(plainSequence, 1));
+    assertEquals("codePointAt fails on surrogate pair", 67328,
+        Character.codePointAt(testUnicode, 1));
+    assertEquals("codePointAt fails on surrogate pair", 67328,
+        Character.codePointAt(unicodeSequence, 1));
+    assertEquals("codePointAt fails on first char of surrogate pair",  
0xD801,
+        Character.codePointAt(testUnicode, 1, 2));
+    assertEquals(65, Character.codePointBefore(testPlain, 2));
+    assertEquals(65, Character.codePointBefore(plainSequence, 2));
+    assertEquals("codePointBefore fails on surrogate pair", 67328,
+        Character.codePointBefore(testUnicode, 3));
+    assertEquals("codePointBefore fails on surrogate pair", 67328,
+        Character.codePointBefore(unicodeSequence, 3));
+    assertEquals("codePointBefore fails on second char of surrogate pair",
+        0xDF00, Character.codePointBefore(testUnicode, 3, 2));
+    assertEquals("codePointCount(plain): ", 3,
+        Character.codePointCount(testPlain, 0, 3));
+    assertEquals("codePointCount(plain): ", 3,
+        Character.codePointCount(plainSequence, 0, 3));
+    assertEquals("codePointCount(unicode): ", 3,
+        Character.codePointCount(testUnicode, 0, 4));
+    assertEquals("codePointCount(unicode): ", 3,
+        Character.codePointCount(unicodeSequence, 0, 4));
+    assertEquals(1, Character.codePointCount(testPlain, 1, 1));
+    assertEquals(1, Character.codePointCount(plainSequence, 1, 2));
+    assertEquals(1, Character.codePointCount(testUnicode, 1, 2));
+    assertEquals(1, Character.codePointCount(unicodeSequence, 1, 3));
+    assertEquals(2, Character.codePointCount(testUnicode, 2, 2));
+    assertEquals(2, Character.codePointCount(unicodeSequence, 2, 4));
+    assertEquals(1, Character.offsetByCodePoints(testUnicode, 0, 4, 0, 1));
+    assertEquals(1, Character.offsetByCodePoints(unicodeSequence, 0, 1));
+    assertEquals("offsetByCodePoints(1,1): ", 3,
+        Character.offsetByCodePoints(testUnicode, 0, 4, 1, 1));
+    assertEquals("offsetByCodePoints(1,1): ", 3,
+        Character.offsetByCodePoints(unicodeSequence, 1, 1));
+    assertEquals("offsetByCodePoints(2,1): ", 3,
+        Character.offsetByCodePoints(testUnicode, 0, 4, 2, 1));
+    assertEquals("offsetByCodePoints(2,1): ", 3,
+        Character.offsetByCodePoints(unicodeSequence, 2, 1));
+    assertEquals(4, Character.offsetByCodePoints(testUnicode, 0, 4, 3, 1));
+    assertEquals(4, Character.offsetByCodePoints(unicodeSequence, 3, 1));
+    assertEquals(1, Character.offsetByCodePoints(testUnicode, 0, 4, 2,  
-1));
+    assertEquals(1, Character.offsetByCodePoints(unicodeSequence, 2, -1));
+    assertEquals(1, Character.offsetByCodePoints(testUnicode, 0, 4, 3,  
-1));
+    assertEquals(1, Character.offsetByCodePoints(unicodeSequence, 3, -1));
+    assertEquals("offsetByCodePoints(4.-1): ", 3,
+        Character.offsetByCodePoints(testUnicode, 0, 4, 4, -1));
+    assertEquals("offsetByCodePoints(4.-1): ", 3,
+        Character.offsetByCodePoints(unicodeSequence, 4, -1));
+    assertEquals(0, Character.offsetByCodePoints(testUnicode, 0, 4, 3,  
-2));
+    assertEquals(0, Character.offsetByCodePoints(unicodeSequence, 3, -2));
+    char[] nonBmpChar = new char[] { '\uD800', '\uDF46' };
+    assertEquals(0x10346, Character.codePointAt(nonBmpChar, 0));
+    assertEquals(1, Character.codePointCount(nonBmpChar, 0, 2));
+  }
+
+  public void testCompareTo() {
+    assertTrue(Character.valueOf('A').compareTo('B') < 0);
+    assertTrue(Character.valueOf('B').compareTo('A') > 0);
+    assertTrue(Character.valueOf('C').compareTo('C') == 0);
+    assertTrue(Character.valueOf('\uA001').compareTo('\uA000') > 0);
+  }
+
+  public void testConstructor() {
+    assertEquals(new Character((char) 32), new Character(' '));
+  }
+
+  public void testDigit() {
+    assertEquals("wrong number of digits", 10,  
digitJudge.allPass().length());
+  }
+
+  public void testSurrogates() {
+    assertFalse(Character.isHighSurrogate('\uDF46'));
+    assertTrue(Character.isLowSurrogate('\uDF46'));
+    assertTrue(Character.isHighSurrogate('\uD800'));
+    assertFalse(Character.isLowSurrogate('\uD800'));
+    assertFalse(Character.isHighSurrogate('X'));
+    assertFalse(Character.isLowSurrogate('X'));
+    assertTrue(Character.isSurrogatePair('\uD800', '\uDF46'));
+    assertFalse(Character.isSurrogatePair('\uDF46', '\uD800'));
+    assertFalse(Character.isSurrogatePair('A', '\uDF46'));
+    assertFalse(Character.isSurrogatePair('\uD800', 'A'));
+    char[] chars = Character.toChars(0x10346);
+    assertEquals(0xD800, chars[0]);
+    assertEquals(0xDF46, chars[1]);
+    assertEquals(2, Character.toChars(67328, chars, 0));
+    assertEquals(0xD801, chars[0]);
+    assertEquals(0xDF00, chars[1]);
+    assertEquals(1, Character.toChars(65, chars, 0));
+    assertEquals('A', chars[0]);
+    assertTrue(Character.isSupplementaryCodePoint(0x10346));
+    assertFalse(Character.isSupplementaryCodePoint(65));
+    assertTrue(Character.isValidCodePoint(0x10346));
+    assertTrue(Character.isValidCodePoint(65));
+    assertFalse(Character.isValidCodePoint(0x1FFFFFFF));
+    assertEquals(0x10346, Character.toCodePoint('\uD800', '\uDF46'));
+  }
+
+  public void testLetter() {
+    assertEquals("wrong number of letters", 52,  
letterJudge.allPass().length());
+  }
+
+  public void testLetterOrDigit() {
+    assertEquals("wrong number of letters", 62,
+        letterOrDigitJudge.allPass().length());
+  }
+
+  public void testLowerCase() {
+    assertEquals("wrong number of lowercase letters", 26,
+        lowerCaseJudge.allPass().length());
+    assertEquals("wrong number of lowercase letters after toLowerCase", 52,
+        new LowerCaseJudge(lowerCaseChanger.changed()).allPass().length());
+  }
+
+  public void testSpace() {
+    assertEquals("wrong number of spaces", 5,  
spaceJudge.allPass().length());
+  }
+
+  public void testToFromDigit() {
+    for (int i = 0; i < 16; i++) {
+      assertEquals(i, Character.digit(Character.forDigit(i, 16), 16));
+    }
+    assertEquals(1, Character.digit('1', 10));
+    assertEquals('9', Character.forDigit(9, 10));
+    assertEquals(-1, Character.digit('7', 6));
+    assertEquals(-1, Character.digit('8', 8));
+    assertEquals(-1, Character.digit('A', 10));
+  }
+
+  public void testToString() {
+    assertEquals(" ", new Character((char) 32).toString());
+  }
+
+  public void testUCD() {
+    assertTrue(Character.isTitleCase(0x1C5));
+    assertFalse(Character.isTitleCase(0x1C4));
+    assertEquals(0x1C4, Character.toUpperCase(0x1C5));
+    assertEquals(0x1C4, Character.toUpperCase(0x1C6));
+    assertEquals(0x1C5, Character.toTitleCase(0x1C4));
+    assertEquals(0x1C5, Character.toTitleCase(0x1C5));
+    assertEquals(0x1C6, Character.toLowerCase(0x1C4));
+    assertEquals(0x1C6, Character.toLowerCase(0x1C5));
+    assertEquals(0x1C4, Character.toUpperCase(0x1C5));
+    assertTrue(Character.isLowerCase(0x3BF));
+    assertTrue(Character.isLowerCase(0xFF));
+    assertTrue(Character.isUpperCase(0xCE));
+    assertTrue(Character.isMirrored('('));
+    assertTrue(Character.isMirrored(']'));
+    assertTrue(Character.isMirrored('{'));
+    assertTrue(Character.isMirrored('>'));
+    assertTrue(Character.isMirrored(0xAB));
+    assertTrue(Character.isMirrored(0xBB));
+    assertFalse(Character.isMirrored('A'));
+    assertEquals(Character.DIRECTIONALITY_RIGHT_TO_LEFT,
+        Character.getDirectionality(0x5D8));
+    assertEquals(Character.UPPERCASE_LETTER, Character.getType('A'));
+    assertEquals(Character.UPPERCASE_LETTER, Character.getType(0x14C));
+    assertEquals(Character.UPPERCASE_LETTER, Character.getType(0x1F48));
+    assertEquals(Character.LOWERCASE_LETTER, Character.getType('z'));
+    assertEquals(Character.LOWERCASE_LETTER, Character.getType(0x14D));
+    assertEquals(Character.LOWERCASE_LETTER, Character.getType(0x1F50));
+    assertEquals(Character.TITLECASE_LETTER, Character.getType(0x1C5));
+    assertEquals(50, Character.getNumericValue(0x216C));
+    assertEquals(0, Character.getNumericValue('0'));
+    assertEquals(9, Character.getNumericValue('9'));
+    assertEquals(10, Character.getNumericValue('a'));
+    assertEquals(10, Character.getNumericValue('A'));
+    assertEquals(1, Character.getNumericValue(0x661));
+    assertEquals(9000, Character.getNumericValue(0x1012A));
+    assertEquals(-1, Character.getNumericValue('['));
+  }
+
+  public void testUpperCase() {
+    assertEquals("wrong number of uppercase letters", 26,
+        upperCaseJudge.allPass().length());
+    assertEquals("wrong number of uppercase letters after toUpperCase", 52,
+        new UpperCaseJudge(upperCaseChanger.changed()).allPass().length());
+  }
+
+  public void testValueOf() {
+    assertEquals('A', Character.valueOf('A').charValue());
+  }
+}

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to