/projects/lucene-4.2.0/analysis/common/src/test/org/apache/lucene/analysis/util/TestCharacterUtils.java

https://gitlab.com/essere.lab.public/qualitas.class-corpus · Java · 194 lines · 154 code · 21 blank · 19 comment · 1 complexity · 2874b3478fec7b2df7699ec936164fa9 MD5 · raw file

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