Home | History | Annotate | Download | only in text
      1 /*
      2  * Licensed to the Apache Software Foundation (ASF) under one or more
      3  * contributor license agreements.  See the NOTICE file distributed with
      4  * this work for additional information regarding copyright ownership.
      5  * The ASF licenses this file to You under the Apache License, Version 2.0
      6  * (the "License"); you may not use this file except in compliance with
      7  * the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  */
     17 
     18 package org.apache.harmony.tests.java.text;
     19 
     20 import java.text.CollationElementIterator;
     21 import java.text.Collator;
     22 import java.text.RuleBasedCollator;
     23 import java.text.StringCharacterIterator;
     24 import java.util.Locale;
     25 
     26 import junit.framework.TestCase;
     27 
     28 /**
     29  * Test CollationElementIterator
     30  *
     31  * Only test normal condition.
     32  *
     33  */
     34 public class CollationElementIteratorTest extends TestCase {
     35 
     36   private RuleBasedCollator coll;
     37 
     38   protected void setUp() {
     39     coll = (RuleBasedCollator) Collator.getInstance(Locale.US);
     40   }
     41 
     42   public void testGetOffset() {
     43     String text = "abc";
     44     CollationElementIterator iterator = coll.getCollationElementIterator(text);
     45     int[] offsets = { 0, 1, 2, 3 };
     46     int offset = iterator.getOffset();
     47     int i = 0;
     48     assertEquals(offsets[i++], offset);
     49     while (offset != text.length()) {
     50       iterator.next();
     51       offset = iterator.getOffset();
     52       assertEquals(offsets[i++], offset);
     53     }
     54   }
     55 
     56   public void testNext() {
     57     String text = "abc";
     58     CollationElementIterator iterator = coll.getCollationElementIterator(text);
     59     int[] orders = new int[text.length()];
     60     int order = iterator.next();
     61     int i = 0;
     62     while (order != CollationElementIterator.NULLORDER) {
     63       orders[i++] = order;
     64       order = iterator.next();
     65     }
     66 
     67     int offset = iterator.getOffset();
     68     assertEquals(text.length(), offset);
     69 
     70     iterator.reset();
     71     order = iterator.previous();
     72 
     73     while (order != CollationElementIterator.NULLORDER) {
     74       assertEquals(orders[--i], order);
     75       order = iterator.previous();
     76     }
     77 
     78     assertEquals(0, iterator.getOffset());
     79   }
     80 
     81   public void testPrevious() {
     82     RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(Locale.US);
     83     String text = "abc";
     84     CollationElementIterator iterator = coll
     85         .getCollationElementIterator(text);
     86     int[] orders = new int[text.length()];
     87     int order = iterator.next();
     88     int i = 0;
     89     while (order != CollationElementIterator.NULLORDER) {
     90       orders[i++] = order;
     91       order = iterator.next();
     92     }
     93 
     94     int offset = iterator.getOffset();
     95     assertEquals(text.length(), offset);
     96 
     97     iterator.reset();
     98     order = iterator.previous();
     99 
    100     while (order != CollationElementIterator.NULLORDER) {
    101       assertEquals(orders[--i], order);
    102       order = iterator.previous();
    103     }
    104 
    105     assertEquals(0, iterator.getOffset());
    106   }
    107 
    108   public void testReset() {
    109     String text = "abc";
    110     CollationElementIterator iterator = coll.getCollationElementIterator(text);
    111     int[] orders = new int[text.length()];
    112     int order = iterator.next();
    113     int i = 0;
    114     while (order != CollationElementIterator.NULLORDER) {
    115       orders[i++] = order;
    116       order = iterator.next();
    117     }
    118 
    119     int offset = iterator.getOffset();
    120     assertEquals(text.length(), offset);
    121 
    122     iterator.reset();
    123     assertEquals(0, iterator.getOffset());
    124   }
    125 
    126   public void testGetMaxExpansion() {
    127     String text = "cha";
    128     RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(
    129             Locale.forLanguageTag("es-u-co-trad"));
    130     CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
    131     int order = iterator.next();
    132     while (order != CollationElementIterator.NULLORDER) {
    133       assertEquals(1, iterator.getMaxExpansion(order));
    134       order = iterator.next();
    135     }
    136   }
    137 
    138   public void testPrimaryOrder() {
    139     RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("de", "DE"));
    140     String text = "\u00e6";
    141     CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
    142     int order = iterator.next();
    143     int pOrder = CollationElementIterator.primaryOrder(order);
    144     CollationElementIterator iterator2 = rbColl.getCollationElementIterator("ae");
    145     int order2 = iterator2.next();
    146     int pOrder2 = CollationElementIterator.primaryOrder(order2);
    147     assertEquals(pOrder, pOrder2);
    148   }
    149 
    150   public void testSecondaryOrder() {
    151     RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("fr", "FR"));
    152     String text = "a\u00e0";
    153     CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
    154     int order = iterator.next();
    155     int sOrder1 = CollationElementIterator.secondaryOrder(order);
    156 
    157     order = iterator.next();
    158     int sOrder2 = CollationElementIterator.secondaryOrder(order);
    159 
    160     assertEquals(sOrder1, sOrder2);
    161   }
    162 
    163   public void testTertiaryOrder() {
    164     RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("fr", "FR"));
    165     String text = "abAB";
    166     CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
    167     int order = iterator.next();
    168     int tOrder1 = CollationElementIterator.tertiaryOrder(order);
    169     order = iterator.next();
    170     int tOrder2 = CollationElementIterator.tertiaryOrder(order);
    171     assertEquals(tOrder1, tOrder2);
    172 
    173     order = iterator.next();
    174     tOrder1 = CollationElementIterator.tertiaryOrder(order);
    175     order = iterator.next();
    176     tOrder2 = CollationElementIterator.tertiaryOrder(order);
    177     assertEquals(tOrder1, tOrder2);
    178   }
    179 
    180   public void testSetOffset() {
    181     RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(
    182             Locale.forLanguageTag("es-u-co-trad"));
    183     String text = "cha";
    184     CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
    185     iterator.setOffset(0);
    186     assertEquals(0, iterator.getOffset());
    187     iterator.setOffset(1);
    188     assertEquals(0, iterator.getOffset());
    189     iterator.setOffset(2);
    190     assertEquals(2, iterator.getOffset());
    191   }
    192 
    193   public void testSetTextString() {
    194     RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(
    195             Locale.forLanguageTag("es-u-co-trad"));
    196     String text = "caa";
    197     CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
    198     iterator.setOffset(0);
    199     assertEquals(0, iterator.getOffset());
    200     iterator.setOffset(1);
    201     assertEquals(1, iterator.getOffset());
    202     iterator.setOffset(2);
    203     assertEquals(2, iterator.getOffset());
    204     iterator.setText("cha");
    205     iterator.setOffset(0);
    206     assertEquals(0, iterator.getOffset());
    207     iterator.setOffset(1);
    208     assertEquals(0, iterator.getOffset());
    209     iterator.setOffset(2);
    210     assertEquals(2, iterator.getOffset());
    211   }
    212 
    213   public void testSetTextCharacterIterator() {
    214     RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(
    215             Locale.forLanguageTag("es-u-co-trad"));
    216     String text = "caa";
    217     CollationElementIterator iterator = rbColl.getCollationElementIterator(text);
    218     iterator.setOffset(1);
    219     assertEquals(1, iterator.getOffset());
    220     iterator.setText(new StringCharacterIterator("cha"));
    221     iterator.setOffset(1);
    222     assertEquals(1, iterator.getOffset());
    223   }
    224 }
    225