package com.orgzly.android.util; import android.text.SpannableStringBuilder; import android.text.style.URLSpan; import org.junit.Test; import static junit.framework.Assert.assertEquals; public class NoteContentParserTest { @Test public void testLinksMultiLine() throws Exception { OrgSpannable spannable = new OrgSpannable( "[[http://www.orgzly.com]]\n" + "[[http://www.orgzly.com]]"); assertEquals("http://www.orgzly.com\n" + "http://www.orgzly.com", spannable.string); assertEquals(2, spannable.spans.length); assertEquals(0, spannable.spans[0].start); assertEquals(21, spannable.spans[0].end); assertEquals("URLSpan", spannable.spans[0].className); assertEquals("http://www.orgzly.com", spannable.spans[0].url); assertEquals(22, spannable.spans[1].start); assertEquals(43, spannable.spans[1].end); assertEquals("URLSpan", spannable.spans[1].className); assertEquals("http://www.orgzly.com", spannable.spans[1].url); } @Test public void testLinksNamed() throws Exception { OrgSpannable spannable = new OrgSpannable( "[[http://www.orgzly.com][Orgzly]]"); assertEquals("Orgzly", spannable.string); assertEquals(1, spannable.spans.length); assertEquals(0, spannable.spans[0].start); assertEquals(6, spannable.spans[0].end); assertEquals("URLSpan", spannable.spans[0].className); assertEquals("http://www.orgzly.com", spannable.spans[0].url); } @Test public void testAllLinkTypes() throws Exception { OrgSpannable spannable = new OrgSpannable( "AAA http://www.x.com BBB [[http://www.y.com]]CCC [[http://www.z.com][Z]]DDD"); assertEquals("AAA http://www.x.com BBB http://www.y.comCCC ZDDD", spannable.string); assertEquals(3, spannable.spans.length); assertEquals(4, spannable.spans[2].start); assertEquals(20, spannable.spans[2].end); assertEquals("URLSpan", spannable.spans[2].className); assertEquals("http://www.x.com", spannable.spans[2].url); assertEquals(25, spannable.spans[1].start); assertEquals(41, spannable.spans[1].end); assertEquals("URLSpan", spannable.spans[1].className); assertEquals("http://www.y.com", spannable.spans[1].url); assertEquals(45, spannable.spans[0].start); assertEquals(46, spannable.spans[0].end); assertEquals("URLSpan", spannable.spans[0].className); assertEquals("http://www.z.com", spannable.spans[0].url); } @Test public void testMailto() throws Exception { OrgSpannable spannable = new OrgSpannable( "AAA mailto:x@x.com BBB [[mailto:y@y.com]]CCC [[mailto:z@z.com][Z]]DDD"); assertEquals("AAA mailto:x@x.com BBB mailto:y@y.comCCC ZDDD", spannable.string); assertEquals(3, spannable.spans.length); assertEquals(4, spannable.spans[2].start); assertEquals(18, spannable.spans[2].end); assertEquals("URLSpan", spannable.spans[2].className); assertEquals("mailto:x@x.com", spannable.spans[2].url); assertEquals(23, spannable.spans[1].start); assertEquals(37, spannable.spans[1].end); assertEquals("URLSpan", spannable.spans[1].className); assertEquals("mailto:y@y.com", spannable.spans[1].url); assertEquals(41, spannable.spans[0].start); assertEquals(42, spannable.spans[0].end); assertEquals("URLSpan", spannable.spans[0].className); assertEquals("mailto:z@z.com", spannable.spans[0].url); } private class OrgSpan { int start; int end; String className; String url; } private class OrgSpannable { String string; OrgSpan[] spans; public OrgSpannable(String str) { SpannableStringBuilder ssb = NoteContentParser.fromOrg(str); string = ssb.toString(); Object[] allSpans = ssb.getSpans(0, ssb.length() - 1, Object.class); spans = new OrgSpan[allSpans.length]; for (int i = 0; i < allSpans.length; i++) { spans[i] = new OrgSpan(); spans[i].start = ssb.getSpanStart(allSpans[i]); spans[i].end = ssb.getSpanEnd(allSpans[i]); spans[i].className = allSpans[i].getClass().getSimpleName(); if (allSpans[i] instanceof URLSpan) { spans[i].url = ((URLSpan)allSpans[i]).getURL(); } } } } }