174473971cc9d960376295fbcc430320c9ed62991Elliott 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, 13994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * See the License for the specific language governing permissions and 15994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * limitations under the License. 16994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes */ 17994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes 18994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughespackage org.apache.harmony.tests.java.text; 19994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes 20994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.CollationElementIterator; 21994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.Collator; 22994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.RuleBasedCollator; 23994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.text.StringCharacterIterator; 24994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport java.util.Locale; 25994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes 26994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughesimport junit.framework.TestCase; 27994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes 28994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes/** 29994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Test CollationElementIterator 3074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes * 31994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes * Only test normal condition. 3274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes * 33994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes */ 34994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughespublic class CollationElementIteratorTest extends TestCase { 35994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes 3674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes private RuleBasedCollator coll; 3774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 3874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes protected void setUp() { 3974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes coll = (RuleBasedCollator) Collator.getInstance(Locale.US); 4074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 4174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 4274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testGetOffset() { 4374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "abc"; 4474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = coll.getCollationElementIterator(text); 4574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int[] offsets = { 0, 1, 2, 3 }; 4674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int offset = iterator.getOffset(); 4774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int i = 0; 4874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(offsets[i++], offset); 4974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (offset != text.length()) { 5074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.next(); 5174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes offset = iterator.getOffset(); 5274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(offsets[i++], offset); 5374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 5474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 5574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 5674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testNext() { 5774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "abc"; 5874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = coll.getCollationElementIterator(text); 5974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int[] orders = new int[text.length()]; 6074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 6174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int i = 0; 6274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (order != CollationElementIterator.NULLORDER) { 6374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes orders[i++] = order; 6474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 6574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 6674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 6774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int offset = iterator.getOffset(); 6874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(text.length(), offset); 6955dfcd8b9609f112b0542af6a705080d98e00d2accornelius 7055dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.reset(); 7174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.previous(); 7274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 7374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (order != CollationElementIterator.NULLORDER) { 7474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(orders[--i], order); 7574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.previous(); 7674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 7774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 7874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(0, iterator.getOffset()); 7974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 8074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 8174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testPrevious() { 8274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes RuleBasedCollator coll = (RuleBasedCollator) Collator.getInstance(Locale.US); 8374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "abc"; 8474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = coll 8574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes .getCollationElementIterator(text); 8674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int[] orders = new int[text.length()]; 8774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 8874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int i = 0; 8974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (order != CollationElementIterator.NULLORDER) { 9074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes orders[i++] = order; 9174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 9274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 9374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 9474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int offset = iterator.getOffset(); 9574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(text.length(), offset); 9655dfcd8b9609f112b0542af6a705080d98e00d2accornelius 9755dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.reset(); 9874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.previous(); 9974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 10074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (order != CollationElementIterator.NULLORDER) { 10174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(orders[--i], order); 10274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.previous(); 10374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 10474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 10574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(0, iterator.getOffset()); 10674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 10774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 10874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testReset() { 10974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "abc"; 11074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = coll.getCollationElementIterator(text); 11174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int[] orders = new int[text.length()]; 11274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 11374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int i = 0; 11474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (order != CollationElementIterator.NULLORDER) { 11574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes orders[i++] = order; 11674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 11774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 11874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 11974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int offset = iterator.getOffset(); 12074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(text.length(), offset); 12174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 12274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.reset(); 12374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(0, iterator.getOffset()); 12474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 12574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 12674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testGetMaxExpansion() { 12774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "cha"; 128ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance( 129ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath Locale.forLanguageTag("es-u-co-trad")); 13074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 13174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 13274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes while (order != CollationElementIterator.NULLORDER) { 13374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(1, iterator.getMaxExpansion(order)); 13474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 13574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 13674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 13774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 13874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testPrimaryOrder() { 13974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("de", "DE")); 14074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "\u00e6"; 14174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 14274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 14374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int pOrder = CollationElementIterator.primaryOrder(order); 14474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator2 = rbColl.getCollationElementIterator("ae"); 14574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order2 = iterator2.next(); 14674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int pOrder2 = CollationElementIterator.primaryOrder(order2); 14774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(pOrder, pOrder2); 14874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 14974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 15074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testSecondaryOrder() { 15174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("fr", "FR")); 15274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "a\u00e0"; 15374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 15474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 15574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int sOrder1 = CollationElementIterator.secondaryOrder(order); 15674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 15774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 15874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int sOrder2 = CollationElementIterator.secondaryOrder(order); 15974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 16074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(sOrder1, sOrder2); 16174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 16274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 16374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testTertiaryOrder() { 16474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance(new Locale("fr", "FR")); 16574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "abAB"; 16674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 16774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int order = iterator.next(); 16874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int tOrder1 = CollationElementIterator.tertiaryOrder(order); 16974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 17074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes int tOrder2 = CollationElementIterator.tertiaryOrder(order); 17174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(tOrder1, tOrder2); 17274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 17374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 17474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes tOrder1 = CollationElementIterator.tertiaryOrder(order); 17574473971cc9d960376295fbcc430320c9ed62991Elliott Hughes order = iterator.next(); 17674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes tOrder2 = CollationElementIterator.tertiaryOrder(order); 17774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(tOrder1, tOrder2); 17874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 17974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 18074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testSetOffset() { 181ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance( 182ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath Locale.forLanguageTag("es-u-co-trad")); 18374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "cha"; 18474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 18555dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.setOffset(0); 18655dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(0, iterator.getOffset()); 18774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setOffset(1); 18855dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(0, iterator.getOffset()); 18955dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.setOffset(2); 19055dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(2, iterator.getOffset()); 19174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 19274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 19374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testSetTextString() { 194ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance( 195ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath Locale.forLanguageTag("es-u-co-trad")); 19674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "caa"; 19774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 19855dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.setOffset(0); 19955dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(0, iterator.getOffset()); 20074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setOffset(1); 20174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(1, iterator.getOffset()); 20255dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.setOffset(2); 20355dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(2, iterator.getOffset()); 20474473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setText("cha"); 20555dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.setOffset(0); 20655dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(0, iterator.getOffset()); 20774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setOffset(1); 20855dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(0, iterator.getOffset()); 20955dfcd8b9609f112b0542af6a705080d98e00d2accornelius iterator.setOffset(2); 21055dfcd8b9609f112b0542af6a705080d98e00d2accornelius assertEquals(2, iterator.getOffset()); 21174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 21274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes 21374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes public void testSetTextCharacterIterator() { 214ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath RuleBasedCollator rbColl = (RuleBasedCollator) Collator.getInstance( 215ee7d0c5bfcc6891034eaea0fa4a9571ffde5d2aeNarayan Kamath Locale.forLanguageTag("es-u-co-trad")); 21674473971cc9d960376295fbcc430320c9ed62991Elliott Hughes String text = "caa"; 21774473971cc9d960376295fbcc430320c9ed62991Elliott Hughes CollationElementIterator iterator = rbColl.getCollationElementIterator(text); 21874473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setOffset(1); 21974473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(1, iterator.getOffset()); 22074473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setText(new StringCharacterIterator("cha")); 22174473971cc9d960376295fbcc430320c9ed62991Elliott Hughes iterator.setOffset(1); 22274473971cc9d960376295fbcc430320c9ed62991Elliott Hughes assertEquals(1, iterator.getOffset()); 22374473971cc9d960376295fbcc430320c9ed62991Elliott Hughes } 224994e4e5ded616a100ca42b16cffa36aa9f595f64Elliott Hughes} 225