1994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes/*
2994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
3994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * contributor license agreements.  See the NOTICE file distributed with
4994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * this work for additional information regarding copyright ownership.
5994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
6994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * (the "License"); you may not use this file except in compliance with
7994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * the License.  You may obtain a copy of the License at
874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes *
9994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0
1074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes *
11994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Unless required by applicable law or agreed to in writing, software
12994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * License for the specific language governing permissions and limitations under
15994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * the License.
16994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes */
17994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
18994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughespackage org.apache.harmony.tests.java.text;
19994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
20994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.CharacterIterator;
21994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.CollationElementIterator;
22994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.CollationKey;
23994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.Collator;
24994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.ParseException;
25994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.RuleBasedCollator;
26994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.StringCharacterIterator;
27994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.util.Locale;
28994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
29994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport junit.framework.TestCase;
30994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
31994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughespublic class RuleBasedCollatorTest extends TestCase {
32994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
3374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void test_getCollationKeyLjava_lang_String() throws Exception {
3474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    // Regression test for HARMONY-28
3574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String source = null;
3655dfcd8b9609f112b0542af6a705080d98e00d2accornelius    String Simple = "&9 < a< b< c< d";
3774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator rbc = new RuleBasedCollator(Simple);
3874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationKey ck = rbc.getCollationKey(source);
3974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertNull("Assert 1: getCollationKey (null) does not return null", ck);
4074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
4174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
4274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testHashCode() throws ParseException {
4374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    {
4455dfcd8b9609f112b0542af6a705080d98e00d2accornelius      String rule = "&9 < a < b < c < d";
4574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      RuleBasedCollator coll = new RuleBasedCollator(rule);
4674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(rule.hashCode(), coll.hashCode());
47994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
48994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
4974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    {
5055dfcd8b9609f112b0542af6a705080d98e00d2accornelius      String rule = "&9 < a < b < c < d < e";
5174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      RuleBasedCollator coll = new RuleBasedCollator(rule);
5274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(rule.hashCode(), coll.hashCode());
53994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
5474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
5574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
5674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testClone() throws ParseException {
5774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(Locale.US);
5874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator clone = (RuleBasedCollator) coll.clone();
5974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertNotSame(coll, clone);
6074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(coll.getRules(), clone.getRules());
6174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(coll.getDecomposition(), clone.getDecomposition());
6274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(coll.getStrength(), clone.getStrength());
6374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
6474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
6574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testEqualsObject() throws ParseException {
6655dfcd8b9609f112b0542af6a705080d98e00d2accornelius    String rule = "&9 < a < b < c < d < e";
6774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator coll = new RuleBasedCollator(rule);
6874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
6974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(Collator.TERTIARY, coll.getStrength());
7074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(Collator.NO_DECOMPOSITION, coll.getDecomposition());
7174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator other = new RuleBasedCollator(rule);
7274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertTrue(coll.equals(other));
7374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
7474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    coll.setStrength(Collator.PRIMARY);
7574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertFalse(coll.equals(other));
7674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
7774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    coll.setStrength(Collator.TERTIARY);
7874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    coll.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
7974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertFalse(coll.equals(other));
8074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
8174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
8274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testCompareStringString() throws ParseException {
8355dfcd8b9609f112b0542af6a705080d98e00d2accornelius    String rule = "&9 < c < b < a";
8474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator coll = new RuleBasedCollator(rule);
8574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(-1, coll.compare("c", "a"));
8674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
8774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
8874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testGetCollationKey() {
8974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(Locale.GERMAN);
9074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String source = "abc";
9174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationKey key1 = coll.getCollationKey(source);
9274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(source, key1.getSourceString());
9374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String source2 = "abb";
9474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationKey key2 = coll.getCollationKey(source2);
9574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(source2, key2.getSourceString());
9674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertTrue(key1.compareTo(key2) > 0);
9774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertTrue(coll.compare(source, source2) > 0);
9874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
9974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
10074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testGetRules() throws ParseException {
10155dfcd8b9609f112b0542af6a705080d98e00d2accornelius    String rule = "&9 < a = b < c";
10274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator coll = new RuleBasedCollator(rule);
10374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(rule, coll.getRules());
10474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
10574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
10674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testGetCollationElementIteratorString() throws Exception {
10774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    {
108ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath      Locale locale = Locale.forLanguageTag("es-u-co-trad");
10974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(locale);
11074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      String source = "cha";
11174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      CollationElementIterator iterator = coll.getCollationElementIterator(source);
11274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      int[] e_offset = { 0, 2, 3 };
11374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      int offset = iterator.getOffset();
11474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      int i = 0;
11574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(e_offset[i++], offset);
11674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      while (offset != source.length()) {
11774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        iterator.next();
11874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        offset = iterator.getOffset();
11974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        assertEquals(e_offset[i++], offset);
12074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      }
12174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(CollationElementIterator.NULLORDER, iterator.next());
122994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
123994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
12474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    {
12574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      Locale locale = new Locale("de", "DE");
12674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(locale);
12774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      String source = "\u00fcb";
12874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      CollationElementIterator iterator = coll.getCollationElementIterator(source);
12974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      int[] e_offset = { 0, 1, 1, 2 };
13074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      int offset = iterator.getOffset();
13174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      int i = 0;
13274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(e_offset[i++], offset);
13374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      while (offset != source.length()) {
13474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        iterator.next();
13574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        offset = iterator.getOffset();
13674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        assertEquals(e_offset[i++], offset);
13774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      }
13874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(CollationElementIterator.NULLORDER, iterator.next());
139994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
14074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    //Regression for HARMONY-1352
14174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    try {
14255dfcd8b9609f112b0542af6a705080d98e00d2accornelius      new RuleBasedCollator("&9 < a< b< c< d").getCollationElementIterator((String)null);
14374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      fail();
14474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    } catch (NullPointerException expected) {
145994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
14674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
14774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
14874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testGetCollationElementIteratorCharacterIterator() throws Exception {
14974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    {
150ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath      Locale locale = Locale.forLanguageTag("es-u-co-trad");
15174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(locale);
15274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      String text = "cha";
15374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      StringCharacterIterator source = new StringCharacterIterator(text);
15474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      CollationElementIterator iterator = coll.getCollationElementIterator(source);
15574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      int[] e_offset = { 0, 2, 3 };
15674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      int offset = iterator.getOffset();
15774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      int i = 0;
15874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(e_offset[i++], offset);
15974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      while (offset != text.length()) {
16074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        iterator.next();
16174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        offset = iterator.getOffset();
16274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        // System.out.println(offset);
16374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        assertEquals(e_offset[i++], offset);
16474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      }
16574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(CollationElementIterator.NULLORDER, iterator.next());
166994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
167994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
16874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    {
16974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      Locale locale = new Locale("de", "DE");
17074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(locale);
17174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      String text = "\u00fcb";
17274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      StringCharacterIterator source = new StringCharacterIterator(text);
17374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      CollationElementIterator iterator = coll.getCollationElementIterator(source);
17474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      int[] e_offset = { 0, 1, 1, 2 };
17574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      int offset = iterator.getOffset();
17674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      int i = 0;
17774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(e_offset[i++], offset);
17874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      while (offset != text.length()) {
17974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        iterator.next();
18074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        offset = iterator.getOffset();
18174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes        assertEquals(e_offset[i++], offset);
18274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      }
18374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(CollationElementIterator.NULLORDER, iterator.next());
184994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
18574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    //Regression for HARMONY-1352
18674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    try {
18755dfcd8b9609f112b0542af6a705080d98e00d2accornelius      new RuleBasedCollator("&9 < a< b< c< d").getCollationElementIterator((CharacterIterator)null);
18874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      fail();
18974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    } catch (NullPointerException expected) {
190994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
19174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
192994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
19374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testStrength() {
19474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(Locale.US);
19574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    for (int i = 0; i < 4; i++) {
19674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      coll.setStrength(i);
19774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(i, coll.getStrength());
198994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
19974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
200994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes
20174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testDecomposition() {
20274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(Locale.US);
20374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    for (int i = 0; i < 2; i++) {
20474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      coll.setDecomposition(i);
20574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      assertEquals(i, coll.getDecomposition());
206994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
20774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
20874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
20974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testCollator_GetInstance() {
21074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    Collator coll = Collator.getInstance();
21174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    Object obj1 = "a";
21274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    Object obj2 = "b";
21374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(-1, coll.compare(obj1, obj2));
21474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
21574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    Collator.getInstance();
21674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertFalse(coll.equals("A", "\uFF21"));
21774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
21874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
21974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testGetAvailableLocales() {
22074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertTrue(Collator.getAvailableLocales().length > 0);
22174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
22274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
22374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  // Test CollationKey
22474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testCollationKey() {
22574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    Collator coll = Collator.getInstance(Locale.US);
22674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    String text = "abc";
22774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationKey key = coll.getCollationKey(text);
22874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    key.hashCode();
22974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
23074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    CollationKey key2 = coll.getCollationKey("abc");
23174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
23274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    assertEquals(0, key.compareTo(key2));
23374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
23474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
23574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testNullPointerException() throws Exception {
23674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    //Regression for HARMONY-241
23774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    try {
23874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      new RuleBasedCollator(null);
23974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      fail();
24074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    } catch (NullPointerException expected) {
241994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
24274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
24374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
24474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  public void testCompareNull() throws Exception {
24574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    //Regression for HARMONY-836
24674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    try {
24755dfcd8b9609f112b0542af6a705080d98e00d2accornelius      new RuleBasedCollator("&9 < a").compare(null, null);
24874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes      fail();
24974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes    } catch (NullPointerException expected) {
250994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes    }
25174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
25274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes
2533e3ea7374ec174050c91066bf2e3b154bffd4e96Elliott Hughes  public void testEmptyRules() throws Exception {
2543e3ea7374ec174050c91066bf2e3b154bffd4e96Elliott Hughes    new RuleBasedCollator("");
2553e3ea7374ec174050c91066bf2e3b154bffd4e96Elliott Hughes    new RuleBasedCollator(" ");
2563e3ea7374ec174050c91066bf2e3b154bffd4e96Elliott Hughes    new RuleBasedCollator("# This is a comment.");
25774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes  }
258994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes}
259