package org.wikipedia.edit.richtext; import android.support.annotation.NonNull; import android.view.ContextThemeWrapper; import android.widget.EditText; import org.junit.Test; import org.wikipedia.R; import org.wikipedia.testlib.TestLatch; import java.util.List; import static android.support.test.InstrumentationRegistry.getTargetContext; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; public class SyntaxHighlighterTest { @Test public void testSyntaxHighlight() { final String testStr = "foo {{template1}} bar {{template2}} baz"; final int span1Start = 4; final int span1End = 17; final int span2Start = 22; final int span2End = 35; Callback callback = new Callback(); EditText editText = new EditText(getContext()); new SyntaxHighlighter(getContext(), editText, callback); editText.setText(testStr); List<SpanExtents> result = callback.await(); assertThat(result.size(), is(2)); assertThat(result.get(0), instanceOf(ColorSpanEx.class)); assertThat(result.get(0).getStart(), is(span1Start)); assertThat(result.get(0).getEnd(), is(span1End)); assertThat(result.get(1), instanceOf(ColorSpanEx.class)); assertThat(result.get(1).getStart(), is(span2Start)); assertThat(result.get(1).getEnd(), is(span2End)); } @NonNull private ContextThemeWrapper getContext() { return new ContextThemeWrapper(getTargetContext(), R.style.Theme_Light); } private static class Callback implements SyntaxHighlighter.OnSyntaxHighlightListener { private final TestLatch latch = new TestLatch(); private List<SpanExtents> result; @Override public void syntaxHighlightResults(List<SpanExtents> spanExtents) { result = spanExtents; latch.countDown(); } public List<SpanExtents> await() { latch.await(); return result; } } }