package org.jsoup.helper;
import org.jsoup.Jsoup;
import org.junit.Test;
import java.util.Arrays;
import static org.jsoup.helper.StringUtil.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class StringUtilTest {
@Test public void join() {
assertEquals("", StringUtil.join(Arrays.asList(""), " "));
assertEquals("one", StringUtil.join(Arrays.asList("one"), " "));
assertEquals("one two three", StringUtil.join(Arrays.asList("one", "two", "three"), " "));
}
@Test public void padding() {
assertEquals("", StringUtil.padding(0));
assertEquals(" ", StringUtil.padding(1));
assertEquals(" ", StringUtil.padding(2));
assertEquals(" ", StringUtil.padding(15));
}
@Test public void isBlank() {
assertTrue(StringUtil.isBlank(null));
assertTrue(StringUtil.isBlank(""));
assertTrue(StringUtil.isBlank(" "));
assertTrue(StringUtil.isBlank(" \r\n "));
assertFalse(StringUtil.isBlank("hello"));
assertFalse(StringUtil.isBlank(" hello "));
}
@Test public void isNumeric() {
assertFalse(StringUtil.isNumeric(null));
assertFalse(StringUtil.isNumeric(" "));
assertFalse(StringUtil.isNumeric("123 546"));
assertFalse(StringUtil.isNumeric("hello"));
assertFalse(StringUtil.isNumeric("123.334"));
assertTrue(StringUtil.isNumeric("1"));
assertTrue(StringUtil.isNumeric("1234"));
}
@Test public void isWhitespace() {
assertTrue(StringUtil.isWhitespace('\t'));
assertTrue(StringUtil.isWhitespace('\n'));
assertTrue(StringUtil.isWhitespace('\r'));
assertTrue(StringUtil.isWhitespace('\f'));
assertTrue(StringUtil.isWhitespace(' '));
assertFalse(StringUtil.isWhitespace('\u00a0'));
assertFalse(StringUtil.isWhitespace('\u2000'));
assertFalse(StringUtil.isWhitespace('\u3000'));
}
@Test public void normaliseWhiteSpace() {
assertEquals(" ", normaliseWhitespace(" \r \n \r\n"));
assertEquals(" hello there ", normaliseWhitespace(" hello \r \n there \n"));
assertEquals("hello", normaliseWhitespace("hello"));
assertEquals("hello there", normaliseWhitespace("hello\nthere"));
}
@Test public void normaliseWhiteSpaceHandlesHighSurrogates() {
String test71540chars = "\ud869\udeb2\u304b\u309a 1";
String test71540charsExpectedSingleWhitespace = "\ud869\udeb2\u304b\u309a 1";
assertEquals(test71540charsExpectedSingleWhitespace, normaliseWhitespace(test71540chars));
String extractedText = Jsoup.parse(test71540chars).text();
assertEquals(test71540charsExpectedSingleWhitespace, extractedText);
}
@Test public void resolvesRelativeUrls() {
assertEquals("http://example.com/one/two?three", resolve("http://example.com", "./one/two?three"));
assertEquals("http://example.com/one/two?three", resolve("http://example.com?one", "./one/two?three"));
assertEquals("http://example.com/one/two?three#four", resolve("http://example.com", "./one/two?three#four"));
assertEquals("https://example.com/one", resolve("http://example.com/", "https://example.com/one"));
assertEquals("http://example.com/one/two.html", resolve("http://example.com/two/", "../one/two.html"));
assertEquals("https://example2.com/one", resolve("https://example.com/", "//example2.com/one"));
assertEquals("https://example.com:8080/one", resolve("https://example.com:8080", "./one"));
assertEquals("https://example2.com/one", resolve("http://example.com/", "https://example2.com/one"));
assertEquals("https://example.com/one", resolve("wrong", "https://example.com/one"));
assertEquals("https://example.com/one", resolve("https://example.com/one", ""));
assertEquals("", resolve("wrong", "also wrong"));
assertEquals("ftp://example.com/one", resolve("ftp://example.com/two/", "../one"));
assertEquals("ftp://example.com/one/two.c", resolve("ftp://example.com/one/", "./two.c"));
assertEquals("ftp://example.com/one/two.c", resolve("ftp://example.com/one/", "two.c"));
}
}