package cgeo.geocaching.utils;
import static org.assertj.core.api.Java6Assertions.assertThat;
import cgeo.geocaching.connector.gc.GCConstants;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.commons.io.IOUtils;
import android.text.SpannableString;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.regex.Pattern;
public class TextUtilsTest extends TestCase {
private static String readCachePage(final String geocode) {
InputStream is = null;
BufferedReader br = null;
try {
is = TextUtilsTest.class.getResourceAsStream("/cgeo/geocaching/test/mock/" + geocode + ".html");
br = new BufferedReader(new InputStreamReader(is), 150000);
final StringBuilder buffer = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
buffer.append(line).append('\n');
}
return TextUtils.replaceWhitespace(buffer.toString());
} catch (final IOException e) {
Assert.fail(e.getMessage());
} finally {
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(br);
}
return null;
}
public static void testRegEx() {
final String page = readCachePage("GC2CJPF");
assertThat(TextUtils.getMatch(page, GCConstants.PATTERN_LOGIN_NAME, true, "???")).isEqualTo("storc");
}
public static void testReplaceWhitespaces() {
assertThat(TextUtils.replaceWhitespace(" foo\n\tbar \r baz ")).isEqualTo("foo bar baz ");
}
public static void testControlCharactersCleanup() {
final Pattern patternAll = Pattern.compile("(.*)", Pattern.DOTALL);
assertThat(TextUtils.getMatch("some" + '\u001C' + "control" + (char) 0x1D + "characters removed", patternAll, "")).isEqualTo("some control characters removed");
assertThat(TextUtils.getMatch("newline\nalso\nremoved", patternAll, "")).isEqualTo("newline also removed");
}
public static void testGetMatch() {
final Pattern patternAll = Pattern.compile("foo(...)");
final String text = "abc-foobar-def-fooxyz-ghi-foobaz-jkl";
assertThat(TextUtils.getMatch(text, patternAll, false, 1, null, false)).isEqualTo("bar");
assertThat(TextUtils.getMatch(text, patternAll, false, 1, null, true)).isEqualTo("baz");
}
public static void testTrimSpanned() {
assertTrimSpanned(" ", "");
assertTrimSpanned("\n", "");
assertTrimSpanned("a ", "a");
assertTrimSpanned("a\n", "a");
}
private static void assertTrimSpanned(final String input, final String expected) {
assertThat(TextUtils.trimSpanned(new SpannableString(input)).toString()).isEqualTo(new SpannableString(expected).toString());
}
public static void testStripHtml() {
assertThat(TextUtils.stripHtml("foo bar")).isEqualTo("foo bar");
assertThat(TextUtils.stripHtml("<div><span>foo</span> bar</div>")).isEqualTo("foo bar");
}
}