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