aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/test/java/org/apache/poi/util/TestStringUtil.java
diff options
context:
space:
mode:
authorAndreas Beeker <kiwiwings@apache.org>2021-03-27 14:03:16 +0000
committerAndreas Beeker <kiwiwings@apache.org>2021-03-27 14:03:16 +0000
commit37791e4bdfc706aa5684745594260f243b4be7ee (patch)
treea8dd8d0976fc478074d52cd3de79e0e6b5e6a33a /main/src/test/java/org/apache/poi/util/TestStringUtil.java
parent2bb3839bfe3e3bacff79f8157465633e311239ce (diff)
downloadpoi-37791e4bdfc706aa5684745594260f243b4be7ee.tar.gz
poi-37791e4bdfc706aa5684745594260f243b4be7ee.zip
65206 - Migrate ant / maven to gradle build
update gradle files and project structure along https://github.com/centic9/poi/tree/gradle_build remove eclipse IDE project files remove obsolete record generator files git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1888111 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'main/src/test/java/org/apache/poi/util/TestStringUtil.java')
-rw-r--r--main/src/test/java/org/apache/poi/util/TestStringUtil.java157
1 files changed, 157 insertions, 0 deletions
diff --git a/main/src/test/java/org/apache/poi/util/TestStringUtil.java b/main/src/test/java/org/apache/poi/util/TestStringUtil.java
new file mode 100644
index 0000000000..c0545cd762
--- /dev/null
+++ b/main/src/test/java/org/apache/poi/util/TestStringUtil.java
@@ -0,0 +1,157 @@
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package org.apache.poi.util;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.nio.charset.Charset;
+
+import org.junit.jupiter.api.Test;
+
+/**
+ * Unit test for StringUtil
+ */
+class TestStringUtil {
+
+ /**
+ * test getFromUnicodeHigh for symbols with code below and more 127
+ */
+ @Test
+ void testGetFromUnicodeHighSymbolsWithCodesMoreThan127() {
+ byte[] test_data = new byte[]{0x22, 0x04,
+ 0x35, 0x04,
+ 0x41, 0x04,
+ 0x42, 0x04,
+ 0x20, 0x00,
+ 0x74, 0x00,
+ 0x65, 0x00,
+ 0x73, 0x00,
+ 0x74, 0x00,
+ };
+
+
+ assertEquals( "\u0422\u0435\u0441\u0442 test",
+ StringUtil.getFromUnicodeLE( test_data ) );
+ }
+
+ @Test
+ void testPutCompressedUnicode() {
+ byte[] output = new byte[100];
+ byte[] expected_output =
+ {
+ (byte) 'H', (byte) 'e', (byte) 'l', (byte) 'l',
+ (byte) 'o', (byte) ' ', (byte) 'W', (byte) 'o',
+ (byte) 'r', (byte) 'l', (byte) 'd', (byte) 0xAE
+ };
+ String input = new String( expected_output, Charset.forName(StringUtil.getPreferredEncoding()) );
+
+ StringUtil.putCompressedUnicode( input, output, 0 );
+ for ( int j = 0; j < expected_output.length; j++ )
+ {
+ assertEquals( expected_output[j], output[j], "testing offset " + j );
+ }
+ StringUtil.putCompressedUnicode( input, output,
+ 100 - expected_output.length );
+ for ( int j = 0; j < expected_output.length; j++ )
+ {
+ assertEquals( expected_output[j], output[100 + j - expected_output.length], "testing offset " + j );
+ }
+
+ assertThrows(ArrayIndexOutOfBoundsException.class,
+ () -> StringUtil.putCompressedUnicode( input, output, 101 - expected_output.length ));
+ }
+
+ @Test
+ void testPutUncompressedUnicode() {
+ byte[] output = new byte[100];
+ String input = "Hello World";
+ byte[] expected_output = {
+ (byte) 'H', (byte) 0, (byte) 'e', (byte) 0, (byte) 'l',
+ (byte) 0, (byte) 'l', (byte) 0, (byte) 'o', (byte) 0,
+ (byte) ' ', (byte) 0, (byte) 'W', (byte) 0, (byte) 'o',
+ (byte) 0, (byte) 'r', (byte) 0, (byte) 'l', (byte) 0,
+ (byte) 'd', (byte) 0
+ };
+
+ StringUtil.putUnicodeLE( input, output, 0 );
+ for ( int j = 0; j < expected_output.length; j++ ) {
+ assertEquals( expected_output[j], output[j], "testing offset " + j );
+ }
+ StringUtil.putUnicodeLE( input, output, 100 - expected_output.length );
+ for ( int j = 0; j < expected_output.length; j++ ) {
+ assertEquals( expected_output[j], output[100 + j - expected_output.length], "testing offset " + j );
+ }
+
+ assertThrows(ArrayIndexOutOfBoundsException.class, () ->
+ StringUtil.putUnicodeLE( input, output, 101 - expected_output.length ));
+ }
+
+ @Test
+ void startsWithIgnoreCase() {
+ assertTrue(StringUtil.startsWithIgnoreCase("Apache POI", "Apache POI"), "same string");
+ assertTrue(StringUtil.startsWithIgnoreCase("Apache POI project", "Apache POI"), "longer string");
+ assertTrue(StringUtil.startsWithIgnoreCase("APACHE POI", "Apache POI"), "different case");
+ assertFalse(StringUtil.startsWithIgnoreCase(" Apache POI project", "Apache POI"), "leading whitespace should not be ignored");
+ assertFalse(StringUtil.startsWithIgnoreCase("Apache", "Apache POI"), "shorter string");
+ }
+
+ @Test
+ void endsWithIgnoreCase() {
+ assertTrue(StringUtil.endsWithIgnoreCase("Apache POI", "Apache POI"), "same string");
+ assertTrue(StringUtil.endsWithIgnoreCase("Project Apache POI", "Apache POI"), "longer string");
+ assertTrue(StringUtil.endsWithIgnoreCase("APACHE POI", "Apache POI"), "different case");
+ assertFalse(StringUtil.endsWithIgnoreCase("Apache POI project ", "Apache POI"), "trailing whitespace should not be ignored");
+ assertFalse(StringUtil.endsWithIgnoreCase("Apache", "Apache POI"), "shorter string");
+ }
+
+ @Test
+ void join() {
+ assertEquals("", StringUtil.join(",")); // degenerate case: nothing to join
+ assertEquals("abc", StringUtil.join(",", "abc")); // degenerate case: one thing to join, no trailing comma
+ assertEquals("abc|def|ghi", StringUtil.join("|", "abc", "def", "ghi"));
+ assertEquals("5|8.5|true|string", StringUtil.join("|", 5, 8.5, true, "string")); //assumes Locale prints number decimal point as a period rather than a comma
+
+ String[] arr = new String[] { "Apache", "POI", "project" };
+ assertEquals("ApachePOIproject", StringUtil.join(arr), "no separator");
+ assertEquals("Apache POI project", StringUtil.join(arr, " "), "separator");
+ }
+
+ @Test
+ void count() {
+ String test = "Apache POI project\n\u00a9 Copyright 2016";
+ // supports search in null or empty string
+ assertEquals(0, StringUtil.countMatches(null, 'A'), "null");
+ assertEquals(0, StringUtil.countMatches("", 'A'), "empty string");
+
+ assertEquals(2, StringUtil.countMatches(test, 'e'), "normal");
+ assertEquals(1, StringUtil.countMatches(test, 'a'), "normal, should not find a in escaped copyright");
+
+ // search for non-printable characters
+ assertEquals(0, StringUtil.countMatches(test, '\0'), "null character");
+ assertEquals(0, StringUtil.countMatches(test, '\r'), "CR");
+ assertEquals(1, StringUtil.countMatches(test, '\n'), "LF");
+
+ // search for unicode characters
+ assertEquals(1, StringUtil.countMatches(test, '\u00a9'), "Unicode");
+ }
+}
+