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