add --shared
[pylucene.git] / lucene-java-3.4.0 / lucene / src / test / org / apache / lucene / util / TestCharacterUtils.java
1 package org.apache.lucene.util;
2
3 /**
4  * Licensed to the Apache Software Foundation (ASF) under one or more
5  * contributor license agreements.  See the NOTICE file distributed with
6  * this work for additional information regarding copyright ownership.
7  * The ASF licenses this file to You under the Apache License, Version 2.0
8  * (the "License"); you may not use this file except in compliance with
9  * the License.  You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 import java.io.IOException;
21 import java.io.Reader;
22 import java.io.StringReader;
23
24 import org.apache.lucene.util.CharacterUtils.CharacterBuffer;
25 import org.junit.Test;
26
27 /**
28  * TestCase for the {@link CharacterUtils} class.
29  */
30 public class TestCharacterUtils extends LuceneTestCase {
31
32   @Test
33   public void testCodePointAtCharArrayInt() {
34     CharacterUtils java4 = CharacterUtils.getInstance(Version.LUCENE_30);
35     char[] cpAt3 = "Abc\ud801\udc1c".toCharArray();
36     char[] highSurrogateAt3 = "Abc\ud801".toCharArray();
37     assertEquals((int) 'A', java4.codePointAt(cpAt3, 0));
38     assertEquals((int) '\ud801', java4.codePointAt(cpAt3, 3));
39     assertEquals((int) '\ud801', java4.codePointAt(highSurrogateAt3, 3));
40     try {
41       java4.codePointAt(highSurrogateAt3, 4);
42       fail("array index out of bounds");
43     } catch (IndexOutOfBoundsException e) {
44     }
45
46     CharacterUtils java5 = CharacterUtils.getInstance(TEST_VERSION_CURRENT);
47     assertEquals((int) 'A', java5.codePointAt(cpAt3, 0));
48     assertEquals(Character.toCodePoint('\ud801', '\udc1c'), java5.codePointAt(
49         cpAt3, 3));
50     assertEquals((int) '\ud801', java5.codePointAt(highSurrogateAt3, 3));
51     try {
52       java5.codePointAt(highSurrogateAt3, 4);
53       fail("array index out of bounds");
54     } catch (IndexOutOfBoundsException e) {
55     }
56   }
57
58   @Test
59   public void testCodePointAtCharSequenceInt() {
60     CharacterUtils java4 = CharacterUtils.getInstance(Version.LUCENE_30);
61     String cpAt3 = "Abc\ud801\udc1c";
62     String highSurrogateAt3 = "Abc\ud801";
63     assertEquals((int) 'A', java4.codePointAt(cpAt3, 0));
64     assertEquals((int) '\ud801', java4.codePointAt(cpAt3, 3));
65     assertEquals((int) '\ud801', java4.codePointAt(highSurrogateAt3, 3));
66     try {
67       java4.codePointAt(highSurrogateAt3, 4);
68       fail("string index out of bounds");
69     } catch (IndexOutOfBoundsException e) {
70     }
71
72     CharacterUtils java5 = CharacterUtils.getInstance(TEST_VERSION_CURRENT);
73     assertEquals((int) 'A', java5.codePointAt(cpAt3, 0));
74     assertEquals(Character.toCodePoint('\ud801', '\udc1c'), java5.codePointAt(
75         cpAt3, 3));
76     assertEquals((int) '\ud801', java5.codePointAt(highSurrogateAt3, 3));
77     try {
78       java5.codePointAt(highSurrogateAt3, 4);
79       fail("string index out of bounds");
80     } catch (IndexOutOfBoundsException e) {
81     }
82
83   }
84
85   @Test
86   public void testCodePointAtCharArrayIntInt() {
87     CharacterUtils java4 = CharacterUtils.getInstance(Version.LUCENE_30);
88     char[] cpAt3 = "Abc\ud801\udc1c".toCharArray();
89     char[] highSurrogateAt3 = "Abc\ud801".toCharArray();
90     assertEquals((int) 'A', java4.codePointAt(cpAt3, 0, 2));
91     assertEquals((int) '\ud801', java4.codePointAt(cpAt3, 3, 5));
92     assertEquals((int) '\ud801', java4.codePointAt(highSurrogateAt3, 3, 4));
93
94     CharacterUtils java5 = CharacterUtils.getInstance(TEST_VERSION_CURRENT);
95     assertEquals((int) 'A', java5.codePointAt(cpAt3, 0, 2));
96     assertEquals(Character.toCodePoint('\ud801', '\udc1c'), java5.codePointAt(
97         cpAt3, 3, 5));
98     assertEquals((int) '\ud801', java5.codePointAt(highSurrogateAt3, 3, 4));
99
100   }
101
102   @Test
103   public void testNewCharacterBuffer() {
104     CharacterBuffer newCharacterBuffer = CharacterUtils.newCharacterBuffer(1024);
105     assertEquals(1024, newCharacterBuffer.getBuffer().length);
106     assertEquals(0, newCharacterBuffer.getOffset());
107     assertEquals(0, newCharacterBuffer.getLength());
108
109     newCharacterBuffer = CharacterUtils.newCharacterBuffer(2);
110     assertEquals(2, newCharacterBuffer.getBuffer().length);
111     assertEquals(0, newCharacterBuffer.getOffset());
112     assertEquals(0, newCharacterBuffer.getLength());
113
114     try {
115       newCharacterBuffer = CharacterUtils.newCharacterBuffer(1);
116       fail("length must be >= 2");
117     } catch (IllegalArgumentException e) {
118     }
119   }
120
121   @Test
122   public void testFillNoHighSurrogate() throws IOException {
123     Version[] versions = new Version[] { Version.LUCENE_30, TEST_VERSION_CURRENT };
124     for (Version version : versions) {
125       CharacterUtils instance = CharacterUtils.getInstance(version);
126       Reader reader = new StringReader("helloworld");
127       CharacterBuffer buffer = CharacterUtils.newCharacterBuffer(6);
128       assertTrue(instance.fill(buffer,reader));
129       assertEquals(0, buffer.getOffset());
130       assertEquals(6, buffer.getLength());
131       assertEquals("hellow", new String(buffer.getBuffer()));
132       assertTrue(instance.fill(buffer,reader));
133       assertEquals(4, buffer.getLength());
134       assertEquals(0, buffer.getOffset());
135
136       assertEquals("orld", new String(buffer.getBuffer(), buffer.getOffset(),
137           buffer.getLength()));
138       assertFalse(instance.fill(buffer,reader));
139     }
140   }
141
142   @Test
143   public void testFillJava15() throws IOException {
144     String input = "1234\ud801\udc1c789123\ud801\ud801\udc1c\ud801";
145     CharacterUtils instance = CharacterUtils.getInstance(TEST_VERSION_CURRENT);
146     Reader reader = new StringReader(input);
147     CharacterBuffer buffer = CharacterUtils.newCharacterBuffer(5);
148     assertTrue(instance.fill(buffer, reader));
149     assertEquals(4, buffer.getLength());
150     assertEquals("1234", new String(buffer.getBuffer(), buffer.getOffset(),
151         buffer.getLength()));
152     assertTrue(instance.fill(buffer, reader));
153     assertEquals(5, buffer.getLength());
154     assertEquals("\ud801\udc1c789", new String(buffer.getBuffer()));
155     assertTrue(instance.fill(buffer, reader));
156     assertEquals(4, buffer.getLength());
157     assertEquals("123\ud801", new String(buffer.getBuffer(),
158         buffer.getOffset(), buffer.getLength()));
159     assertTrue(instance.fill(buffer, reader));
160     assertEquals(2, buffer.getLength());
161     assertEquals("\ud801\udc1c", new String(buffer.getBuffer(), buffer
162         .getOffset(), buffer.getLength()));
163     assertTrue(instance.fill(buffer, reader));
164     assertEquals(1, buffer.getLength());
165     assertEquals("\ud801", new String(buffer.getBuffer(), buffer
166         .getOffset(), buffer.getLength()));
167     assertFalse(instance.fill(buffer, reader));
168   }
169
170   @Test
171   public void testFillJava14() throws IOException {
172     String input = "1234\ud801\udc1c789123\ud801\ud801\udc1c\ud801";
173     CharacterUtils instance = CharacterUtils.getInstance(Version.LUCENE_30);
174     Reader reader = new StringReader(input);
175     CharacterBuffer buffer = CharacterUtils.newCharacterBuffer(5);
176     assertTrue(instance.fill(buffer, reader));
177     assertEquals(5, buffer.getLength());
178     assertEquals("1234\ud801", new String(buffer.getBuffer(), buffer
179         .getOffset(), buffer.getLength()));
180     assertTrue(instance.fill(buffer, reader));
181     assertEquals(5, buffer.getLength());
182     assertEquals("\udc1c7891", new String(buffer.getBuffer()));
183     buffer = CharacterUtils.newCharacterBuffer(6);
184     assertTrue(instance.fill(buffer, reader));
185     assertEquals(6, buffer.getLength());
186     assertEquals("23\ud801\ud801\udc1c\ud801", new String(buffer.getBuffer(), buffer
187         .getOffset(), buffer.getLength()));
188     assertFalse(instance.fill(buffer, reader));
189
190   }
191
192 }