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
9
* http://www.apache.org/licenses/LICENSE-2.0
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.
18
package org.apache.lucene.analysis.reverse;
20
import java.io.StringReader;
22
import org.apache.lucene.analysis.MockTokenizer;
23
import org.apache.lucene.analysis.TokenStream;
24
import org.apache.lucene.analysis.BaseTokenStreamTestCase;
26
public class TestReverseStringFilter extends BaseTokenStreamTestCase {
27
public void testFilter() throws Exception {
28
TokenStream stream = new MockTokenizer(new StringReader("Do have a nice day"),
29
MockTokenizer.WHITESPACE, false); // 1-4 length string
30
ReverseStringFilter filter = new ReverseStringFilter(TEST_VERSION_CURRENT, stream);
31
assertTokenStreamContents(filter, new String[] { "oD", "evah", "a", "ecin", "yad" });
34
public void testFilterWithMark() throws Exception {
35
TokenStream stream = new MockTokenizer(new StringReader("Do have a nice day"),
36
MockTokenizer.WHITESPACE, false); // 1-4 length string
37
ReverseStringFilter filter = new ReverseStringFilter(TEST_VERSION_CURRENT, stream, '\u0001');
38
assertTokenStreamContents(filter,
39
new String[] { "\u0001oD", "\u0001evah", "\u0001a", "\u0001ecin", "\u0001yad" });
42
public void testReverseString() throws Exception {
43
assertEquals( "A", ReverseStringFilter.reverse(TEST_VERSION_CURRENT, "A" ) );
44
assertEquals( "BA", ReverseStringFilter.reverse(TEST_VERSION_CURRENT, "AB" ) );
45
assertEquals( "CBA", ReverseStringFilter.reverse(TEST_VERSION_CURRENT, "ABC" ) );
48
public void testReverseChar() throws Exception {
49
char[] buffer = { 'A', 'B', 'C', 'D', 'E', 'F' };
50
ReverseStringFilter.reverse(TEST_VERSION_CURRENT, buffer, 2, 3 );
51
assertEquals( "ABEDCF", new String( buffer ) );
55
* Test the broken 3.0 behavior, for back compat
57
public void testBackCompat() throws Exception {
58
assertEquals("\uDF05\uD866\uDF05\uD866", ReverseStringFilter.reverse("𩬅𩬅"));
61
public void testReverseSupplementary() throws Exception {
62
// supplementary at end
63
assertEquals("𩬅艱鍟䇹愯瀛", ReverseStringFilter.reverse(TEST_VERSION_CURRENT, "瀛愯䇹鍟艱𩬅"));
64
// supplementary at end - 1
65
assertEquals("a𩬅艱鍟䇹愯瀛", ReverseStringFilter.reverse(TEST_VERSION_CURRENT, "瀛愯䇹鍟艱𩬅a"));
66
// supplementary at start
67
assertEquals("fedcba𩬅", ReverseStringFilter.reverse(TEST_VERSION_CURRENT, "𩬅abcdef"));
68
// supplementary at start + 1
69
assertEquals("fedcba𩬅z", ReverseStringFilter.reverse(TEST_VERSION_CURRENT, "z𩬅abcdef"));
70
// supplementary medial
71
assertEquals("gfe𩬅dcba", ReverseStringFilter.reverse(TEST_VERSION_CURRENT, "abcd𩬅efg"));
74
public void testReverseSupplementaryChar() throws Exception {
75
// supplementary at end
76
char[] buffer = "abc瀛愯䇹鍟艱𩬅".toCharArray();
77
ReverseStringFilter.reverse(TEST_VERSION_CURRENT, buffer, 3, 7);
78
assertEquals("abc𩬅艱鍟䇹愯瀛", new String(buffer));
79
// supplementary at end - 1
80
buffer = "abc瀛愯䇹鍟艱𩬅d".toCharArray();
81
ReverseStringFilter.reverse(TEST_VERSION_CURRENT, buffer, 3, 8);
82
assertEquals("abcd𩬅艱鍟䇹愯瀛", new String(buffer));
83
// supplementary at start
84
buffer = "abc𩬅瀛愯䇹鍟艱".toCharArray();
85
ReverseStringFilter.reverse(TEST_VERSION_CURRENT, buffer, 3, 7);
86
assertEquals("abc艱鍟䇹愯瀛𩬅", new String(buffer));
87
// supplementary at start + 1
88
buffer = "abcd𩬅瀛愯䇹鍟艱".toCharArray();
89
ReverseStringFilter.reverse(TEST_VERSION_CURRENT, buffer, 3, 8);
90
assertEquals("abc艱鍟䇹愯瀛𩬅d", new String(buffer));
91
// supplementary medial
92
buffer = "abc瀛愯𩬅def".toCharArray();
93
ReverseStringFilter.reverse(TEST_VERSION_CURRENT, buffer, 3, 7);
94
assertEquals("abcfed𩬅愯瀛", new String(buffer));