package org.jabref.model.strings;
import java.util.Optional;
import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class StringUtilTest {
@Test
public void testBooleanToBinaryString() {
assertEquals("0", StringUtil.booleanToBinaryString(false));
assertEquals("1", StringUtil.booleanToBinaryString(true));
}
@Test
public void testQuoteSimple() {
assertEquals("a::", StringUtil.quote("a:", "", ':'));
}
@Test
public void testQuoteNullQuotation() {
assertEquals("a::", StringUtil.quote("a:", null, ':'));
}
@Test
public void testQuoteNullString() {
assertEquals("", StringUtil.quote(null, ";", ':'));
}
@Test
public void testQuoteQuotationCharacter() {
assertEquals("a:::;", StringUtil.quote("a:;", ";", ':'));
}
@Test
public void testQuoteMoreComplicated() {
assertEquals("a::b:%c:;", StringUtil.quote("a:b%c;", "%;", ':'));
}
@Test
public void testUnifyLineBreaks() {
// Mac < v9
String result = StringUtil.unifyLineBreaks("\r", "newline");
assertEquals("newline", result);
// Windows
result = StringUtil.unifyLineBreaks("\r\n", "newline");
assertEquals("newline", result);
// Unix
result = StringUtil.unifyLineBreaks("\n", "newline");
assertEquals("newline", result);
}
@Test
public void testGetCorrectFileName() {
assertEquals("aa.bib", StringUtil.getCorrectFileName("aa", "bib"));
assertEquals(".login.bib", StringUtil.getCorrectFileName(".login", "bib"));
assertEquals("a.bib", StringUtil.getCorrectFileName("a.bib", "bib"));
assertEquals("a.bib", StringUtil.getCorrectFileName("a.bib", "BIB"));
assertEquals("a.bib", StringUtil.getCorrectFileName("a", "bib"));
assertEquals("a.bb", StringUtil.getCorrectFileName("a.bb", "bib"));
assertEquals("", StringUtil.getCorrectFileName(null, "bib"));
}
@Test
public void testQuoteForHTML() {
assertEquals("!", StringUtil.quoteForHTML("!"));
assertEquals("!!!", StringUtil.quoteForHTML("!!!"));
}
@Test
public void testRemoveBracesAroundCapitals() {
assertEquals("ABC", StringUtil.removeBracesAroundCapitals("{ABC}"));
assertEquals("ABC", StringUtil.removeBracesAroundCapitals("{{ABC}}"));
assertEquals("{abc}", StringUtil.removeBracesAroundCapitals("{abc}"));
assertEquals("ABCDEF", StringUtil.removeBracesAroundCapitals("{ABC}{DEF}"));
}
@Test
public void testPutBracesAroundCapitals() {
assertEquals("{ABC}", StringUtil.putBracesAroundCapitals("ABC"));
assertEquals("{ABC}", StringUtil.putBracesAroundCapitals("{ABC}"));
assertEquals("abc", StringUtil.putBracesAroundCapitals("abc"));
assertEquals("#ABC#", StringUtil.putBracesAroundCapitals("#ABC#"));
assertEquals("{ABC} def {EFG}", StringUtil.putBracesAroundCapitals("ABC def EFG"));
}
@Test
public void testShaveString() {
assertEquals("", StringUtil.shaveString(null));
assertEquals("", StringUtil.shaveString(""));
assertEquals("aaa", StringUtil.shaveString(" aaa\t\t\n\r"));
assertEquals("a", StringUtil.shaveString(" {a} "));
assertEquals("a", StringUtil.shaveString(" \"a\" "));
assertEquals("{a}", StringUtil.shaveString(" {{a}} "));
assertEquals("{a}", StringUtil.shaveString(" \"{a}\" "));
assertEquals("\"{a\"}", StringUtil.shaveString(" \"{a\"} "));
}
@Test
public void testJoin() {
String[] s = "ab/cd/ed".split("/");
assertEquals("ab\\cd\\ed", StringUtil.join(s, "\\", 0, s.length));
assertEquals("cd\\ed", StringUtil.join(s, "\\", 1, s.length));
assertEquals("ed", StringUtil.join(s, "\\", 2, s.length));
assertEquals("", StringUtil.join(s, "\\", 3, s.length));
assertEquals("", StringUtil.join(new String[] {}, "\\", 0, 0));
}
@Test
public void testStripBrackets() {
assertEquals("foo", StringUtil.stripBrackets("[foo]"));
assertEquals("[foo]", StringUtil.stripBrackets("[[foo]]"));
assertEquals("", StringUtil.stripBrackets(""));
assertEquals("[foo", StringUtil.stripBrackets("[foo"));
assertEquals("]", StringUtil.stripBrackets("]"));
assertEquals("", StringUtil.stripBrackets("[]"));
assertEquals("f[]f", StringUtil.stripBrackets("f[]f"));
assertEquals(null, StringUtil.stripBrackets(null));
}
@Test
public void testGetPart() {
// Should be added
}
@Test
public void testFindEncodingsForString() {
// Unused in JabRef, but should be added in case it finds some use
}
@Test
public void testWrap() {
String newline = "newline";
assertEquals("aaaaa" + newline + "\tbbbbb" + newline + "\tccccc",
StringUtil.wrap("aaaaa bbbbb ccccc", 5, newline));
assertEquals("aaaaa bbbbb" + newline + "\tccccc", StringUtil.wrap("aaaaa bbbbb ccccc", 8, newline));
assertEquals("aaaaa bbbbb" + newline + "\tccccc", StringUtil.wrap("aaaaa bbbbb ccccc", 11, newline));
assertEquals("aaaaa bbbbb ccccc", StringUtil.wrap("aaaaa bbbbb ccccc", 12, newline));
assertEquals("aaaaa" + newline + "\t" + newline + "\tbbbbb" + newline + "\t" + newline + "\tccccc",
StringUtil.wrap("aaaaa\nbbbbb\nccccc", 12, newline));
assertEquals(
"aaaaa" + newline + "\t" + newline + "\t" + newline + "\tbbbbb" + newline + "\t" + newline + "\tccccc",
StringUtil.wrap("aaaaa\n\nbbbbb\nccccc", 12, newline));
assertEquals("aaaaa" + newline + "\t" + newline + "\tbbbbb" + newline + "\t" + newline + "\tccccc",
StringUtil.wrap("aaaaa\r\nbbbbb\r\nccccc", 12, newline));
}
@Test
public void testDecodeStringDoubleArray() {
assertArrayEquals(new String[][]{{"a", "b"}, {"c", "d"}}, StringUtil.decodeStringDoubleArray("a:b;c:d"));
assertArrayEquals(new String[][]{{"a", ""}, {"c", "d"}}, StringUtil.decodeStringDoubleArray("a:;c:d"));
// arrays first differed at element [0][1]; expected: null<null> but was: java.lang.String<null>
// assertArrayEquals(stringArray2res, StringUtil.decodeStringDoubleArray(encStringArray2));
assertArrayEquals(new String[][]{{"a", ":b"}, {"c;", "d"}}, StringUtil.decodeStringDoubleArray("a:\\:b;c\\;:d"));
}
@Test
public void testIsInCurlyBrackets() {
assertFalse(StringUtil.isInCurlyBrackets(""));
assertFalse(StringUtil.isInCurlyBrackets(null));
assertTrue(StringUtil.isInCurlyBrackets("{}"));
assertTrue(StringUtil.isInCurlyBrackets("{a}"));
assertTrue(StringUtil.isInCurlyBrackets("{a{a}}"));
assertTrue(StringUtil.isInCurlyBrackets("{{\\AA}sa {\\AA}Stor{\\aa}}"));
assertFalse(StringUtil.isInCurlyBrackets("{"));
assertFalse(StringUtil.isInCurlyBrackets("}"));
assertFalse(StringUtil.isInCurlyBrackets("a{}a"));
assertFalse(StringUtil.isInCurlyBrackets("{\\AA}sa {\\AA}Stor{\\aa}"));
}
@Test
public void testIsInSquareBrackets() {
assertFalse(StringUtil.isInSquareBrackets(""));
assertFalse(StringUtil.isInSquareBrackets(null));
assertTrue(StringUtil.isInSquareBrackets("[]"));
assertTrue(StringUtil.isInSquareBrackets("[a]"));
assertFalse(StringUtil.isInSquareBrackets("["));
assertFalse(StringUtil.isInSquareBrackets("]"));
assertFalse(StringUtil.isInSquareBrackets("a[]a"));
}
@Test
public void testIsInCitationMarks() {
assertFalse(StringUtil.isInCitationMarks(""));
assertFalse(StringUtil.isInCitationMarks(null));
assertTrue(StringUtil.isInCitationMarks("\"\""));
assertTrue(StringUtil.isInCitationMarks("\"a\""));
assertFalse(StringUtil.isInCitationMarks("\""));
assertFalse(StringUtil.isInCitationMarks("a\"\"a"));
}
@Test
public void testIntValueOfSingleDigit() {
assertEquals(1, StringUtil.intValueOf("1"));
assertEquals(2, StringUtil.intValueOf("2"));
assertEquals(8, StringUtil.intValueOf("8"));
}
@Test
public void testIntValueOfLongString() {
assertEquals(1234567890, StringUtil.intValueOf("1234567890"));
}
@Test
public void testIntValueOfStartWithZeros() {
assertEquals(1234, StringUtil.intValueOf("001234"));
}
@Test(expected = NumberFormatException.class)
public void testIntValueOfExceptionIfStringContainsLetter() {
StringUtil.intValueOf("12A2");
}
@Test(expected = NumberFormatException.class)
public void testIntValueOfExceptionIfStringNull() {
StringUtil.intValueOf(null);
}
@Test(expected = NumberFormatException.class)
public void testIntValueOfExceptionfIfStringEmpty() {
StringUtil.intValueOf("");
}
@Test
public void testIntValueOfWithNullSingleDigit() {
assertEquals(Optional.of(Integer.valueOf(1)), StringUtil.intValueOfOptional("1"));
assertEquals(Optional.of(Integer.valueOf(2)), StringUtil.intValueOfOptional("2"));
assertEquals(Optional.of(Integer.valueOf(8)), StringUtil.intValueOfOptional("8"));
}
@Test
public void testIntValueOfWithNullLongString() {
assertEquals(Optional.of(Integer.valueOf(1234567890)), StringUtil.intValueOfOptional("1234567890"));
}
@Test
public void testIntValueOfWithNullStartWithZeros() {
assertEquals(Optional.of(Integer.valueOf(1234)), StringUtil.intValueOfOptional("001234"));
}
@Test
public void testIntValueOfWithNullExceptionIfStringContainsLetter() {
assertEquals(Optional.empty(), StringUtil.intValueOfOptional("12A2"));
}
@Test
public void testIntValueOfWithNullExceptionIfStringNull() {
assertEquals(Optional.empty(), StringUtil.intValueOfOptional(null));
}
@Test
public void testIntValueOfWithNullExceptionfIfStringEmpty() {
assertEquals(Optional.empty(), StringUtil.intValueOfOptional(""));
}
@Test
public void testLimitStringLengthShort() {
assertEquals("Test", StringUtil.limitStringLength("Test", 20));
}
@Test
public void testLimitStringLengthLimiting() {
assertEquals("TestTes...", StringUtil.limitStringLength("TestTestTestTestTest", 10));
assertEquals(10, StringUtil.limitStringLength("TestTestTestTestTest", 10).length());
}
@Test
public void testLimitStringLengthNullInput() {
assertEquals("", StringUtil.limitStringLength(null, 10));
}
@Test
public void testReplaceSpecialCharacters() {
assertEquals("Hallo Arger", StringUtil.replaceSpecialCharacters("Hallo Arger"));
assertEquals("aaAeoeeee", StringUtil.replaceSpecialCharacters("åÄöéèë"));
}
@Test
public void testRepeatSpaces() {
assertEquals("", StringUtil.repeatSpaces(0));
assertEquals(" ", StringUtil.repeatSpaces(1));
assertEquals(" ", StringUtil.repeatSpaces(7));
}
@Test
public void testRepeat() {
assertEquals("", StringUtil.repeat(0, 'a'));
assertEquals("a", StringUtil.repeat(1, 'a'));
assertEquals("aaaaaaa", StringUtil.repeat(7, 'a'));
}
@Test
public void testBoldHTML() {
assertEquals("<b>AA</b>", StringUtil.boldHTML("AA"));
}
@Test
public void testBoldHTMLReturnsOriginalTextIfNonNull() {
assertEquals("<b>AA</b>", StringUtil.boldHTML("AA", "BB"));
}
@Test
public void testBoldHTMLReturnsAlternativeTextIfNull() {
assertEquals("<b>BB</b>", StringUtil.boldHTML(null, "BB"));
}
@Test
public void testUnquote() {
assertEquals("a:", StringUtil.unquote("a::", ':'));
assertEquals("a:;", StringUtil.unquote("a:::;", ':'));
assertEquals("a:b%c;", StringUtil.unquote("a::b:%c:;", ':'));
}
@Test
public void testCapitalizeFirst() {
assertEquals("", StringUtil.capitalizeFirst(""));
assertEquals("Hello world", StringUtil.capitalizeFirst("Hello World"));
assertEquals("A", StringUtil.capitalizeFirst("a"));
assertEquals("Aa", StringUtil.capitalizeFirst("AA"));
}
}