package org.nutz.lang; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import org.junit.Test; public class StringsTest { /** * for issue #606 (report by <a href="https://github.com/Rekoe">Rekoe</a>) */ @Test public void test_isQuoteBy_null() { assertTrue(Strings.isQuoteBy("{abc}", "{", "}")); assertFalse(Strings.isQuoteBy(null, "{", "}")); assertFalse(Strings.isQuoteBy("{abc}", "{", null)); assertFalse(Strings.isQuoteBy("{abc}", null, "}")); assertFalse(Strings.isQuoteBy("{abc}", null, null)); } @Test public void test_is_full_width_character() { assertFalse(Strings.isFullWidthCharacter('a')); assertTrue(Strings.isFullWidthCharacter('a')); assertFalse(Strings.isFullWidthCharacter('a')); assertTrue(Strings.isFullWidthCharacter('a')); assertTrue(Strings.isFullWidthCharacter('。')); } @Test public void test_is_full_width_string() { assertTrue(Strings.isFullWidthString("おはようございます")); assertTrue(Strings.isFullWidthString("アイシダイク")); assertTrue(Strings.isFullWidthString("蒼井そら")); assertTrue(Strings.isFullWidthString("我是全角字我是办饺子")); assertTrue(Strings.isFullWidthString("wo我爱你中国,哈哈哈")); assertFalse(Strings.isFullWidthString("wo我爱你中国,哈哈哈")); assertFalse(Strings.isFullWidthString("23gdgrt34t98))*&%$#{}:~!@")); } @Test public void test_is_half_width_string() { assertFalse(Strings.isHalfWidthString("おはようございます")); assertFalse(Strings.isHalfWidthString("アイシダイク")); assertFalse(Strings.isHalfWidthString("蒼井そら")); assertFalse(Strings.isHalfWidthString("我是全角字我是办饺子")); assertFalse(Strings.isHalfWidthString("wo我爱你中国,哈哈哈")); assertFalse(Strings.isHalfWidthString("wo我爱你中国,哈哈哈")); assertTrue(Strings.isHalfWidthString("23gdgrt34t98))*&%$#{}:~!@")); } @Test public void test_is_chinese_character() { assertTrue(Strings.isChineseCharacter('你')); assertTrue(Strings.isChineseCharacter('.')); assertTrue(Strings.isChineseCharacter('。')); assertFalse(Strings.isChineseCharacter('A')); assertFalse(Strings.isChineseCharacter('3')); assertFalse(Strings.isChineseCharacter('.')); assertFalse(Strings.isChineseCharacter('#')); assertFalse(Strings.isChineseCharacter('~')); assertFalse(Strings.isChineseCharacter('`')); } @Test public void test_char_length() { assertEquals(5, Strings.charLength("12345")); assertEquals(10, Strings.charLength("12345")); assertEquals(15, Strings.charLength("1234512345")); } @Test public void test_dup_char_sequence() { assertEquals("", Strings.dup(null, 4)); assertEquals("", Strings.dup("", 4)); assertEquals("ssssssss", Strings.dup("ss", 4)); } @Test public void test_dup_char() { assertEquals("", Strings.dup(' ', 0)); assertEquals("aaaa", Strings.dup('a', 4)); assertEquals(" ", Strings.dup(' ', 4)); } @Test public void test_upperFirst() { assertNull(Strings.upperFirst(null)); assertEquals("", Strings.upperFirst("")); assertEquals("A", Strings.upperFirst("a")); assertEquals("Aa", Strings.upperFirst("aa")); assertEquals("Aa", Strings.upperFirst("Aa")); } @Test public void test_lower_first() { assertNull(Strings.lowerFirst(null)); assertEquals("", Strings.lowerFirst("")); assertEquals("aCV", Strings.lowerFirst("aCV")); assertEquals("eee", Strings.lowerFirst("eee")); assertEquals("vCD", Strings.lowerFirst("VCD")); assertEquals("vff", Strings.lowerFirst("Vff")); } @Test public void test_equals_string_ignore_case() { assertTrue(Strings.equalsIgnoreCase(null, null)); assertFalse(Strings.equalsIgnoreCase(null, "a")); assertTrue(Strings.equalsIgnoreCase("aBc", "aBc")); assertTrue(Strings.equalsIgnoreCase("aBc", "abc")); assertTrue(Strings.equalsIgnoreCase("aBc", "abC")); assertFalse(Strings.equalsIgnoreCase("aB", "abC")); } @Test public void test_equals_string() { assertTrue(Strings.equals(null, null)); assertFalse(Strings.equals(null, "a")); assertTrue(Strings.equalsIgnoreCase("aBc", "aBc")); assertFalse(Strings.equals("aBc", "abc")); assertFalse(Strings.equals("aBc", "abC")); assertFalse(Strings.equals("aB", "abC")); } @Test public void test_is_empty() { assertTrue(Strings.isEmpty(null)); assertTrue(Strings.isEmpty("")); assertFalse(Strings.isEmpty(" ")); assertFalse(Strings.isEmpty(" at ")); assertFalse(Strings.isEmpty(new StringBuffer(" "))); } @Test public void test_is_blank() { assertTrue(Strings.isBlank(null)); assertTrue(Strings.isBlank("")); assertTrue(Strings.isBlank(" ")); assertFalse(Strings.isBlank(" at ")); assertTrue(Strings.isBlank(new StringBuffer(" "))); } @Test public void test_trim() { assertEquals(null, Strings.trim(null)); assertEquals("", Strings.trim("")); assertEquals("", Strings.trim(new StringBuffer(""))); assertEquals("", Strings.trim(new StringBuffer(" "))); assertEquals("left", Strings.trim("left ")); assertEquals("right", Strings.trim(" right")); assertEquals("middle", Strings.trim(" middle ")); assertEquals("multi world", Strings.trim(" multi world ")); assertEquals("nutz加油", Strings.trim(" nutz加油 ")); assertEquals("", Strings.trim(new StringBuffer(" "))); assertEquals("multi world", Strings.trim(new StringBuffer("multi world"))); assertEquals("multi world", Strings.trim(new StringBuffer(" multi world "))); assertEquals("nutz加油", Strings.trim(new StringBuilder(" nutz加油 "))); } @Test public void test_split_ignore_blank() { assertArrayEquals(null, Strings.splitIgnoreBlank(null)); assertArrayEquals(new String[]{}, Strings.splitIgnoreBlank(" ")); assertArrayEquals(new String[]{"2", "3", "5"}, Strings.splitIgnoreBlank("2,3,, 5")); assertArrayEquals(new String[]{"2", "3", "5", "6"}, Strings.splitIgnoreBlank("2,3,, 5,6,")); assertArrayEquals(new String[]{"2,3,5,6,"}, Strings.splitIgnoreBlank("2,3,5,6,", ",,")); assertArrayEquals(new String[]{"2,3", "5", "6,"}, Strings.splitIgnoreBlank("2,3 ,,5,,6,", ",,")); assertArrayEquals(new String[]{"2,3", "5", "6,"}, Strings.splitIgnoreBlank("2,3,,5 ,,,,6,", ",,")); } @Test public void test_fill_digit() { assertEquals("-1", Strings.fillDigit(-1, 2)); assertEquals("0-1", Strings.fillDigit(-1, 3)); assertEquals("1", Strings.fillDigit(1, -1)); assertEquals("333", Strings.fillDigit(333, 2)); assertEquals("0033", Strings.fillDigit(33, 4)); } @Test public void test_fill_hex() { assertEquals("ffffffff", Strings.fillHex(-1, 2)); assertEquals("1", Strings.fillHex(1, -1)); assertEquals("14d", Strings.fillHex(333, 2)); assertEquals("0021", Strings.fillHex(33, 4)); } @Test public void test_fill_binary() { assertEquals("1", Strings.fillBinary(1, -1)); assertEquals("100001", Strings.fillBinary(33, 2)); assertEquals("00100001", Strings.fillBinary(33, 8)); } @Test(expected = StringIndexOutOfBoundsException.class) public void test_to_digit() { assertEquals("1", Strings.toDigit(11, 1)); assertEquals("011", Strings.toDigit(11, 3)); assertEquals("", Strings.toDigit(1, 0)); Strings.toDigit(1, -1); } @Test(expected = StringIndexOutOfBoundsException.class) public void test_to_hex() { assertEquals("b", Strings.toHex(11, 1)); assertEquals("00b", Strings.toHex(11, 3)); assertEquals("", Strings.toHex(11, 0)); Strings.toHex(1, -1); } @Test(expected = StringIndexOutOfBoundsException.class) public void test_to_binary() { assertEquals("1", Strings.toBinary(11, 1)); assertEquals("011", Strings.toBinary(11, 3)); assertEquals("", Strings.toBinary(11, 0)); Strings.toBinary(1, -1); } @Test(expected = StringIndexOutOfBoundsException.class) public void test_cut_right() { assertNull(Strings.cutRight(null, 2, 'c')); assertEquals("ca", Strings.cutRight("a", 2, 'c')); assertEquals("ab", Strings.cutRight("ab", 2, 'c')); assertEquals("bc", Strings.cutRight("abc", 2, 'c')); assertEquals("", Strings.cutRight("abc", 0, 'c')); Strings.cutRight("abc", -1, 'c'); } @Test(expected = StringIndexOutOfBoundsException.class) public void test_cut_left() { assertNull(Strings.cutLeft(null, 2, 'c')); assertEquals("ac", Strings.cutLeft("a", 2, 'c')); assertEquals("ab", Strings.cutLeft("ab", 2, 'c')); assertEquals("ab", Strings.cutLeft("abc", 2, 'c')); assertEquals("", Strings.cutLeft("abc", 0, 'c')); Strings.cutLeft("abc", -1, 'c'); } @Test public void test_align_left() { assertNull(Strings.alignLeft(null, 2, 'c')); assertEquals("cc", Strings.alignLeft("", 2, 'c')); assertEquals("acc", Strings.alignLeft("a", 3, 'c')); assertEquals("aaaa", Strings.alignLeft("aaaa", 3, 'c')); } @Test public void test_align_right() { assertNull(Strings.alignRight(null, 2, 'c')); assertEquals("cc", Strings.alignRight("", 2, 'c')); assertEquals("cca", Strings.alignRight("a", 3, 'c')); assertEquals("aaaa", Strings.alignRight("aaaa", 3, 'c')); } @Test public void test_is_quote_by_ignore_blank() { assertTrue(Strings.isQuoteByIgnoreBlank("[AB]", '[', ']')); assertTrue(Strings.isQuoteByIgnoreBlank("[]", '[', ']')); assertTrue(Strings.isQuoteByIgnoreBlank(" []", '[', ']')); assertTrue(Strings.isQuoteByIgnoreBlank("[] ", '[', ']')); assertTrue(Strings.isQuoteByIgnoreBlank(" [ AB ] ", '[', ']')); assertTrue(Strings.isQuoteByIgnoreBlank(" [ AB ]", '[', ']')); assertTrue(Strings.isQuoteByIgnoreBlank("[ AB ] ", '[', ']')); assertFalse(Strings.isQuoteByIgnoreBlank(null, '[', ']')); assertFalse(Strings.isQuoteByIgnoreBlank("", '[', ']')); assertFalse(Strings.isQuoteByIgnoreBlank("[AB", '[', ']')); assertFalse(Strings.isQuoteByIgnoreBlank(" [AB", '[', ']')); assertFalse(Strings.isQuoteByIgnoreBlank("AB]", '[', ']')); assertFalse(Strings.isQuoteByIgnoreBlank("AB] ", '[', ']')); } @Test public void test_is_quote_by() { assertTrue(Strings.isQuoteBy("[AB]", '[', ']')); assertFalse(Strings.isQuoteBy(null, '[', ']')); assertFalse(Strings.isQuoteBy(" ", '[', ']')); assertFalse(Strings.isQuoteBy("", '[', ']')); assertFalse(Strings.isQuoteBy("[", '[', ']')); assertFalse(Strings.isQuoteBy("[AB", '[', ']')); assertFalse(Strings.isQuoteBy("AB]", '[', ']')); assertFalse(Strings.isQuoteBy(" [AB] ", '[', ']')); } @Test public void test_max_length_4_collection() { assertEquals(0, Strings.maxLength((Collection<String>) null)); assertEquals(0, Strings.maxLength(new HashSet<CharSequence>())); assertEquals(3, Strings.maxLength(Arrays.asList("a", "bb", "ccc"))); } @Test public void test_max_length_4_array() { assertEquals(0, Strings.maxLength((String[]) null)); assertEquals(0, Strings.maxLength(new String[4])); assertEquals(3, Strings.maxLength(new String[]{"a", "bb", "ccc"})); } @Test public void test_default_string_when_null() { assertEquals("", Strings.sNull(null)); assertEquals("", Strings.sNull(null, "")); assertEquals(" ", Strings.sNull(" ", "b")); assertEquals("a", Strings.sNull("a", "b")); } @Test public void test_default_string_when_blank() { assertEquals("", Strings.sBlank(null)); assertEquals("", Strings.sBlank(null, "")); assertEquals("b", Strings.sBlank(" ", "b")); assertEquals("a", Strings.sBlank("a", "b")); } @Test public void test_remove_first() { assertNull(Strings.removeFirst(null)); assertEquals("2345", Strings.removeFirst("12345")); assertEquals("", Strings.removeFirst("")); assertEquals("", Strings.removeFirst("A")); } @Test public void test_remove_first_special_char() { assertNull(Strings.removeFirst(null, 'A')); assertEquals("BCD", Strings.removeFirst("ABCD", 'A')); assertEquals("", Strings.removeFirst("", 'A')); assertEquals("", Strings.removeFirst("A", 'A')); assertEquals("ABCD", Strings.removeFirst("ABCD", 'B')); } @Test public void test_string_is_in_array() { String[] arr = {"a", "bb", null, "ccc"}; assertFalse(Strings.isin(arr, null)); assertTrue(Strings.isin(arr, "a")); assertFalse(Strings.isin(arr, "ccC")); } @Test public void test_is_email() { assertFalse(Strings.isEmail("")); assertFalse(Strings.isEmail("mc02cxj")); assertFalse(Strings.isEmail("mc02cxj@gmail")); assertTrue(Strings.isEmail("mc02cxj@gmail.com")); assertTrue(Strings.isEmail("mc02cxj@sina.com.cn")); assertTrue(Strings.isEmail("mc02cxj.test@sina.com.cn")); Strings.isEmail(null); } @Test public void test_upper_word() { assertEquals("", Strings.upperWord("-", '-')); assertEquals("", Strings.upperWord("---", '-')); assertEquals("aBCD", Strings.upperWord("a-b-c-d", '-')); assertEquals("helloWorld", Strings.upperWord("hello-world", '-')); } @Test public void test_escape_html() { assertEquals("</article>Oops <script>alert("hello world");</script>", Strings.escapeHtml("</article>Oops <script>alert(\"hello world\");</script>")); assertEquals("alert('hello world');", Strings.escapeHtml("alert('hello world');")); } @Test public void test_issue461() { char here_is_zenkaku_space_char = ' '; String here_is_zenkaku_space_str = String.valueOf(here_is_zenkaku_space_char); StringBuffer here_is_zenkaku_space_sb = new StringBuffer(here_is_zenkaku_space_str); StringBuilder here_is_zenkaku_space_sber = new StringBuilder(here_is_zenkaku_space_str); assertEquals("aaa", Strings.trim(here_is_zenkaku_space_str + "aaa" + here_is_zenkaku_space_str)); assertEquals("aaa", Strings.trim(here_is_zenkaku_space_sb.append("aaa") .append(here_is_zenkaku_space_char))); assertEquals("aaa", Strings.trim(here_is_zenkaku_space_sber.append("aaa") .append(here_is_zenkaku_space_char))); } }