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.text.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 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 45 .getCollationElementIterator(text); 46 int[] offsets = { 0, 1, 2, 3 }; 47 int offset = iterator.getOffset(); 48 int i = 0; 49 assertEquals(offsets[i++], offset); 50 while (offset != text.length()) { 51 iterator.next(); 52 offset = iterator.getOffset(); 53 assertEquals(offsets[i++], offset); 54 } 55 } 56 57 public void testNext() { 58 String text = "abc"; 59 CollationElementIterator iterator = coll 60 .getCollationElementIterator(text); 61 int[] orders = new int[text.length()]; 62 int order = iterator.next(); 63 int i = 0; 64 while (order != CollationElementIterator.NULLORDER) { 65 orders[i++] = order; 66 order = iterator.next(); 67 } 68 69 int offset = iterator.getOffset(); 70 assertEquals(text.length(), offset); 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 testReset() { 82 String text = "abc"; 83 CollationElementIterator iterator = coll 84 .getCollationElementIterator(text); 85 int[] orders = new int[text.length()]; 86 int order = iterator.next(); 87 int i = 0; 88 while (order != CollationElementIterator.NULLORDER) { 89 orders[i++] = order; 90 order = iterator.next(); 91 } 92 93 int offset = iterator.getOffset(); 94 assertEquals(text.length(), offset); 95 96 iterator.reset(); 97 assertEquals(0, iterator.getOffset()); 98 } 99 100 public void testGetMaxExpansion() { 101 String text = "cha"; 102 RuleBasedCollator rbColl = (RuleBasedCollator) Collator 103 .getInstance(new Locale("es", "", "TRADITIONAL")); 104 CollationElementIterator iterator = rbColl 105 .getCollationElementIterator(text); 106 int order = iterator.next(); 107 while (order != CollationElementIterator.NULLORDER) { 108 assertEquals(1, iterator.getMaxExpansion(order)); 109 order = iterator.next(); 110 } 111 112 } 113 114 public void testPrimaryOrder() { 115 RuleBasedCollator rbColl = (RuleBasedCollator) Collator 116 .getInstance(new Locale("de", "DE")); 117 String text = "\u00e6"; 118 CollationElementIterator iterator = rbColl 119 .getCollationElementIterator(text); 120 int order = iterator.next(); 121 int pOrder = CollationElementIterator.primaryOrder(order); 122 CollationElementIterator iterator2 = rbColl 123 .getCollationElementIterator("ae"); 124 int order2 = iterator2.next(); 125 int pOrder2 = CollationElementIterator.primaryOrder(order2); 126 assertEquals(pOrder, pOrder2); 127 } 128 129 public void testSecondaryOrder() { 130 RuleBasedCollator rbColl = (RuleBasedCollator) Collator 131 .getInstance(new Locale("fr", "FR")); 132 String text = "a\u00e0"; 133 CollationElementIterator iterator = rbColl 134 .getCollationElementIterator(text); 135 int order = iterator.next(); 136 int sOrder1 = CollationElementIterator.secondaryOrder(order); 137 138 order = iterator.next(); 139 int sOrder2 = CollationElementIterator.secondaryOrder(order); 140 141 assertEquals(sOrder1, sOrder2); 142 } 143 144 public void testTertiaryOrder() { 145 RuleBasedCollator rbColl = (RuleBasedCollator) Collator 146 .getInstance(new Locale("fr", "FR")); 147 String text = "abAB"; 148 CollationElementIterator iterator = rbColl 149 .getCollationElementIterator(text); 150 int order = iterator.next(); 151 int tOrder1 = CollationElementIterator.tertiaryOrder(order); 152 order = iterator.next(); 153 int tOrder2 = CollationElementIterator.tertiaryOrder(order); 154 assertEquals(tOrder1, tOrder2); 155 156 order = iterator.next(); 157 tOrder1 = CollationElementIterator.tertiaryOrder(order); 158 order = iterator.next(); 159 tOrder2 = CollationElementIterator.tertiaryOrder(order); 160 assertEquals(tOrder1, tOrder2); 161 } 162 163 public void testSetOffset() { 164 RuleBasedCollator rbColl = (RuleBasedCollator) Collator 165 .getInstance(new Locale("es", "", "TRADITIONAL")); 166 String text = "cha"; 167 CollationElementIterator iterator = rbColl 168 .getCollationElementIterator(text); 169 iterator.setOffset(1); 170 assertEquals(0, iterator.getOffset()); 171 } 172 173 /* 174 * Class under test for void setText(java.lang.String) 175 */ 176 public void testSetTextString() { 177 RuleBasedCollator rbColl = (RuleBasedCollator) Collator 178 .getInstance(new Locale("es", "", "TRADITIONAL")); 179 String text = "caa"; 180 CollationElementIterator iterator = rbColl 181 .getCollationElementIterator(text); 182 iterator.setOffset(1); 183 assertEquals(1, iterator.getOffset()); 184 iterator.setText("cha"); 185 iterator.setOffset(1); 186 assertEquals(0, iterator.getOffset()); 187 } 188 189 /* 190 * Class under test for void setText(java.text.CharacterIterator) 191 */ 192 public void testSetTextCharacterIterator() { 193 RuleBasedCollator rbColl = (RuleBasedCollator) Collator 194 .getInstance(new Locale("es", "", "TRADITIONAL")); 195 String text = "caa"; 196 CollationElementIterator iterator = rbColl 197 .getCollationElementIterator(text); 198 iterator.setOffset(1); 199 assertEquals(1, iterator.getOffset()); 200 iterator.setText(new StringCharacterIterator("cha")); 201 iterator.setOffset(1); 202 assertEquals(0, iterator.getOffset()); 203 } 204} 205