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 18package org.apache.harmony.tests.java.text; 19 20import java.text.CollationElementIterator; 21import java.text.Collator; 22import java.text.RuleBasedCollator; 23import java.text.StringCharacterIterator; 24import java.util.Locale; 25 26import junit.framework.TestCase; 27 28/** 29 * Test CollationElementIterator 30 * 31 * Only test normal condition. 32 * 33 */ 34public class CollationElementIteratorTest extends TestCase { 35 36 private RuleBasedCollator coll; 37 private RuleBasedCollator traditionalSpanishColl; 38 39 protected void setUp() { 40 coll = (RuleBasedCollator) Collator.getInstance(Locale.US); 41 traditionalSpanishColl = (RuleBasedCollator) 42 Collator.getInstance(Locale.forLanguageTag("es-u-co-trad")); 43 } 44 45 public void testGetOffset() { 46 String text = "abc"; 47 CollationElementIterator iterator = coll.getCollationElementIterator(text); 48 int[] offsets = { 0, 1, 2, 3 }; 49 int offset = iterator.getOffset(); 50 int i = 0; 51 assertEquals(offsets[i++], offset); 52 while (offset != text.length()) { 53 iterator.next(); 54 offset = iterator.getOffset(); 55 assertEquals(offsets[i++], offset); 56 } 57 } 58 59 public void testNext() { 60 String text = "abc"; 61 CollationElementIterator iterator = coll.getCollationElementIterator(text); 62 int[] orders = new int[text.length()]; 63 int order = iterator.next(); 64 int i = 0; 65 while (order != CollationElementIterator.NULLORDER) { 66 orders[i++] = order; 67 order = iterator.next(); 68 } 69 70 int offset = iterator.getOffset(); 71 assertEquals(text.length(), offset); 72 73 iterator.reset(); 74 order = iterator.previous(); 75 76 while (order != CollationElementIterator.NULLORDER) { 77 assertEquals(orders[--i], order); 78 order = iterator.previous(); 79 } 80 81 assertEquals(0, iterator.getOffset()); 82 } 83 84 public void testPrevious() { 85 RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(Locale.US); 86 String text = "abc"; 87 CollationElementIterator iterator = coll 88 .getCollationElementIterator(text); 89 int[] orders = new int[text.length()]; 90 int order = iterator.next(); 91 int i = 0; 92 while (order != CollationElementIterator.NULLORDER) { 93 orders[i++] = order; 94 order = iterator.next(); 95 } 96 97 int offset = iterator.getOffset(); 98 assertEquals(text.length(), offset); 99 100 iterator.reset(); 101 order = iterator.previous(); 102 103 while (order != CollationElementIterator.NULLORDER) { 104 assertEquals(orders[--i], order); 105 order = iterator.previous(); 106 } 107 108 assertEquals(0, iterator.getOffset()); 109 } 110 111 public void testReset() { 112 String text = "abc"; 113 CollationElementIterator iterator = coll.getCollationElementIterator(text); 114 int[] orders = new int[text.length()]; 115 int order = iterator.next(); 116 int i = 0; 117 while (order != CollationElementIterator.NULLORDER) { 118 orders[i++] = order; 119 order = iterator.next(); 120 } 121 122 int offset = iterator.getOffset(); 123 assertEquals(text.length(), offset); 124 125 iterator.reset(); 126 assertEquals(0, iterator.getOffset()); 127 } 128 129 public void testGetMaxExpansion() { 130 String text = "cha"; 131 RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance( 132 Locale.forLanguageTag("es-u-co-trad")); 133 CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 134 int order = iterator.next(); 135 while (order != CollationElementIterator.NULLORDER) { 136 assertEquals(1, iterator.getMaxExpansion(order)); 137 order = iterator.next(); 138 } 139 } 140 141 public void testPrimaryOrder() { 142 RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("de", "DE")); 143 String text = "\u00e6"; 144 CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 145 int order = iterator.next(); 146 int pOrder = CollationElementIterator.primaryOrder(order); 147 CollationElementIterator iterator2 = rbColl.getCollationElementIterator("ae"); 148 int order2 = iterator2.next(); 149 int pOrder2 = CollationElementIterator.primaryOrder(order2); 150 assertEquals(pOrder, pOrder2); 151 } 152 153 public void testSecondaryOrder() { 154 RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("fr", "FR")); 155 String text = "a\u00e0"; 156 CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 157 int order = iterator.next(); 158 int sOrder1 = CollationElementIterator.secondaryOrder(order); 159 160 order = iterator.next(); 161 int sOrder2 = CollationElementIterator.secondaryOrder(order); 162 163 assertEquals(sOrder1, sOrder2); 164 } 165 166 public void testTertiaryOrder() { 167 RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("fr", "FR")); 168 String text = "abAB"; 169 CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 170 int order = iterator.next(); 171 int tOrder1 = CollationElementIterator.tertiaryOrder(order); 172 order = iterator.next(); 173 int tOrder2 = CollationElementIterator.tertiaryOrder(order); 174 assertEquals(tOrder1, tOrder2); 175 176 order = iterator.next(); 177 tOrder1 = CollationElementIterator.tertiaryOrder(order); 178 order = iterator.next(); 179 tOrder2 = CollationElementIterator.tertiaryOrder(order); 180 assertEquals(tOrder1, tOrder2); 181 } 182 183 public void testSetOffset() { 184 RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance( 185 Locale.forLanguageTag("es-u-co-trad")); 186 String text = "cha"; 187 CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 188 iterator.setOffset(0); 189 assertEquals(0, iterator.getOffset()); 190 iterator.setOffset(1); 191 assertEquals(0, iterator.getOffset()); 192 iterator.setOffset(2); 193 assertEquals(2, iterator.getOffset()); 194 } 195 196 public void testSetTextString() { 197 String text = "caa"; 198 CollationElementIterator iterator = traditionalSpanishColl.getCollationElementIterator(text); 199 iterator.setOffset(0); 200 assertEquals(0, iterator.getOffset()); 201 iterator.setOffset(1); 202 assertEquals(1, iterator.getOffset()); 203 iterator.setOffset(2); 204 assertEquals(2, iterator.getOffset()); 205 iterator.setText("cha"); 206 iterator.setOffset(0); 207 assertEquals(0, iterator.getOffset()); 208 iterator.setOffset(1); 209 assertEquals(0, iterator.getOffset()); 210 iterator.setOffset(2); 211 assertEquals(2, iterator.getOffset()); 212 } 213 214 public void testSetTextCharacterIterator() { 215 String text = "caa"; 216 CollationElementIterator iterator = traditionalSpanishColl.getCollationElementIterator(text); 217 iterator.setOffset(1); 218 assertEquals(1, iterator.getOffset()); 219 // In traditional spanish the "ch" acts as a single character so the iterator cannot stop 220 // between the 'c' and the 'h', it goes back if that is attempted. 221 iterator.setText(new StringCharacterIterator("cha")); 222 iterator.setOffset(1); 223 assertEquals(0, iterator.getOffset()); 224 } 225} 226