From b9c1107f56d234bb653c8055159505aa6940717c Mon Sep 17 00:00:00 2001
From: Dimitry Ivanov <mail@dimitryivanov.ru>
Date: Sun, 4 Nov 2018 13:08:55 +0300
Subject: [PATCH] Add syntaxHighlight small test

---
 .../markwon/renderer/SyntaxHighlightTest.java | 72 +++++++++++++++++++
 1 file changed, 72 insertions(+)
 create mode 100644 markwon/src/test/java/ru/noties/markwon/renderer/SyntaxHighlightTest.java

diff --git a/markwon/src/test/java/ru/noties/markwon/renderer/SyntaxHighlightTest.java b/markwon/src/test/java/ru/noties/markwon/renderer/SyntaxHighlightTest.java
new file mode 100644
index 00000000..6eefe748
--- /dev/null
+++ b/markwon/src/test/java/ru/noties/markwon/renderer/SyntaxHighlightTest.java
@@ -0,0 +1,72 @@
+package ru.noties.markwon.renderer;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.SpannableStringBuilder;
+import android.text.Spanned;
+
+import org.commonmark.node.FencedCodeBlock;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+import ru.noties.markwon.SpannableBuilder;
+import ru.noties.markwon.SpannableConfiguration;
+import ru.noties.markwon.SpannableFactory;
+import ru.noties.markwon.SyntaxHighlight;
+import ru.noties.markwon.spans.SpannableTheme;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
+public class SyntaxHighlightTest {
+
+    // codeSpan must be before actual highlight spans (true reverse of builder)
+
+    @Test
+    public void test() {
+
+        final Object highlightSpan = new Object();
+        final Object codeSpan = new Object();
+
+        final SyntaxHighlight highlight = new SyntaxHighlight() {
+            @NonNull
+            @Override
+            public CharSequence highlight(@Nullable String info, @NonNull String code) {
+                final SpannableStringBuilder builder = new SpannableStringBuilder(code);
+                builder.setSpan(highlightSpan, 0, builder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+                return builder;
+            }
+        };
+
+        final SpannableFactory factory = mock(SpannableFactory.class);
+        when(factory.code(any(SpannableTheme.class), anyBoolean())).thenReturn(codeSpan);
+
+        final SpannableConfiguration configuration = SpannableConfiguration.builder(mock(Context.class))
+                .syntaxHighlight(highlight)
+                .factory(factory)
+                .theme(mock(SpannableTheme.class))
+                .build();
+
+        final SpannableBuilder builder = new SpannableBuilder();
+
+        final SpannableMarkdownVisitor visitor = new SpannableMarkdownVisitor(configuration, builder);
+        final FencedCodeBlock fencedCodeBlock = new FencedCodeBlock();
+        fencedCodeBlock.setLiteral("{code}");
+
+        visitor.visit(fencedCodeBlock);
+
+        final Object[] spans = builder.spannableStringBuilder().getSpans(0, builder.length(), Object.class);
+
+        assertEquals(2, spans.length);
+        assertEquals(codeSpan, spans[0]);
+        assertEquals(highlightSpan, spans[1]);
+    }
+}