Adding more tests
This commit is contained in:
parent
9958f34574
commit
81c1c16a86
@ -36,20 +36,22 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
class MarkwonVisitorImpl implements MarkwonVisitor {
|
class MarkwonVisitorImpl implements MarkwonVisitor {
|
||||||
|
|
||||||
private final Map<Class<? extends Node>, NodeVisitor<? extends Node>> nodes;
|
|
||||||
|
|
||||||
private final MarkwonConfiguration configuration;
|
private final MarkwonConfiguration configuration;
|
||||||
|
|
||||||
private final RenderProps renderProps;
|
private final RenderProps renderProps;
|
||||||
|
|
||||||
private final SpannableBuilder builder = new SpannableBuilder();
|
private final SpannableBuilder builder;
|
||||||
|
|
||||||
|
private final Map<Class<? extends Node>, NodeVisitor<? extends Node>> nodes;
|
||||||
|
|
||||||
MarkwonVisitorImpl(
|
MarkwonVisitorImpl(
|
||||||
@NonNull MarkwonConfiguration configuration,
|
@NonNull MarkwonConfiguration configuration,
|
||||||
@NonNull RenderProps renderProps,
|
@NonNull RenderProps renderProps,
|
||||||
|
@NonNull SpannableBuilder builder,
|
||||||
@NonNull Map<Class<? extends Node>, NodeVisitor<? extends Node>> nodes) {
|
@NonNull Map<Class<? extends Node>, NodeVisitor<? extends Node>> nodes) {
|
||||||
this.configuration = configuration;
|
this.configuration = configuration;
|
||||||
this.renderProps = renderProps;
|
this.renderProps = renderProps;
|
||||||
|
this.builder = builder;
|
||||||
this.nodes = nodes;
|
this.nodes = nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -286,6 +288,7 @@ class MarkwonVisitorImpl implements MarkwonVisitor {
|
|||||||
return new MarkwonVisitorImpl(
|
return new MarkwonVisitorImpl(
|
||||||
configuration,
|
configuration,
|
||||||
renderProps,
|
renderProps,
|
||||||
|
new SpannableBuilder(),
|
||||||
Collections.unmodifiableMap(nodes));
|
Collections.unmodifiableMap(nodes));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package ru.noties.markwon;
|
package ru.noties.markwon.movement;
|
||||||
|
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
@ -6,6 +6,8 @@ import android.text.method.LinkMovementMethod;
|
|||||||
import android.text.method.MovementMethod;
|
import android.text.method.MovementMethod;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import ru.noties.markwon.AbstractMarkwonPlugin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 3.0.0
|
* @since 3.0.0
|
||||||
*/
|
*/
|
@ -0,0 +1,27 @@
|
|||||||
|
package ru.noties.markwon;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@Config(manifest = Config.NONE)
|
||||||
|
public class AbstractMarkwonPluginTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void priority() {
|
||||||
|
// returns CorePlugin dependency
|
||||||
|
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void process_markdown() {
|
||||||
|
// returns supplied argument (no-op)
|
||||||
|
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
}
|
@ -11,7 +11,8 @@ public class AbstractMarkwonVisitorImpl extends MarkwonVisitorImpl {
|
|||||||
public AbstractMarkwonVisitorImpl(
|
public AbstractMarkwonVisitorImpl(
|
||||||
@NonNull MarkwonConfiguration configuration,
|
@NonNull MarkwonConfiguration configuration,
|
||||||
@NonNull RenderProps renderProps,
|
@NonNull RenderProps renderProps,
|
||||||
|
@NonNull SpannableBuilder spannableBuilder,
|
||||||
@NonNull Map<Class<? extends Node>, NodeVisitor<? extends Node>> nodes) {
|
@NonNull Map<Class<? extends Node>, NodeVisitor<? extends Node>> nodes) {
|
||||||
super(configuration, renderProps, nodes);
|
super(configuration, renderProps, spannableBuilder, nodes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
package ru.noties.markwon;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@Config(manifest = Config.NONE)
|
||||||
|
public class MarkwonSpansFactoryImplTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,195 @@
|
|||||||
|
package ru.noties.markwon;
|
||||||
|
|
||||||
|
import org.commonmark.node.Node;
|
||||||
|
import org.commonmark.node.Visitor;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import ix.Ix;
|
||||||
|
import ix.IxPredicate;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
import static org.mockito.Mockito.RETURNS_MOCKS;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@Config(manifest = Config.NONE)
|
||||||
|
public class MarkwonVisitorImplTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void clear() {
|
||||||
|
// clear method will clear renderProps and spannableBuilder
|
||||||
|
|
||||||
|
final RenderProps renderProps = mock(RenderProps.class);
|
||||||
|
final SpannableBuilder spannableBuilder = mock(SpannableBuilder.class);
|
||||||
|
|
||||||
|
final MarkwonVisitorImpl impl = new MarkwonVisitorImpl(
|
||||||
|
mock(MarkwonConfiguration.class),
|
||||||
|
renderProps,
|
||||||
|
spannableBuilder,
|
||||||
|
Collections.<Class<? extends Node>, MarkwonVisitor.NodeVisitor<? extends Node>>emptyMap());
|
||||||
|
|
||||||
|
impl.clear();
|
||||||
|
|
||||||
|
verify(renderProps, times(1)).clearAll();
|
||||||
|
verify(spannableBuilder, times(1)).clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void ensure_new_line() {
|
||||||
|
// new line will be inserted if length > 0 && last character is not a new line
|
||||||
|
|
||||||
|
final SpannableBuilder builder = new SpannableBuilder();
|
||||||
|
|
||||||
|
final MarkwonVisitorImpl impl = new MarkwonVisitorImpl(
|
||||||
|
mock(MarkwonConfiguration.class),
|
||||||
|
mock(RenderProps.class),
|
||||||
|
builder,
|
||||||
|
Collections.<Class<? extends Node>, MarkwonVisitor.NodeVisitor<? extends Node>>emptyMap());
|
||||||
|
|
||||||
|
// at the start - won't add anything
|
||||||
|
impl.ensureNewLine();
|
||||||
|
assertEquals(0, builder.length());
|
||||||
|
|
||||||
|
// last char is new line -> won't add anything
|
||||||
|
builder.append('\n');
|
||||||
|
assertEquals(1, builder.length());
|
||||||
|
impl.ensureNewLine();
|
||||||
|
assertEquals(1, builder.length());
|
||||||
|
|
||||||
|
// not-empty and last char is not new-line -> add new line
|
||||||
|
builder.clear();
|
||||||
|
assertEquals(0, builder.length());
|
||||||
|
builder.append('a');
|
||||||
|
assertEquals(1, builder.length());
|
||||||
|
impl.ensureNewLine();
|
||||||
|
assertEquals(2, builder.length());
|
||||||
|
assertEquals('\n', builder.lastChar());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void force_new_line() {
|
||||||
|
// force new line always add new-line
|
||||||
|
|
||||||
|
final SpannableBuilder builder = new SpannableBuilder();
|
||||||
|
final MarkwonVisitorImpl impl = new MarkwonVisitorImpl(
|
||||||
|
mock(MarkwonConfiguration.class),
|
||||||
|
mock(RenderProps.class),
|
||||||
|
builder,
|
||||||
|
Collections.<Class<? extends Node>, MarkwonVisitor.NodeVisitor<? extends Node>>emptyMap());
|
||||||
|
|
||||||
|
assertEquals(0, builder.length());
|
||||||
|
|
||||||
|
for (int i = 0; i < 9; i++) {
|
||||||
|
impl.forceNewLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals(9, builder.length());
|
||||||
|
|
||||||
|
// all characters are new lines
|
||||||
|
for (int i = 0; i < builder.length(); i++) {
|
||||||
|
assertEquals('\n', builder.charAt(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void all_known_nodes_visit_methods_are_overridden() {
|
||||||
|
// checks that all methods from Visitor (commonmark-java) interface are implemented
|
||||||
|
|
||||||
|
final List<Method> methods = Ix.fromArray(Visitor.class.getDeclaredMethods())
|
||||||
|
.filter(new IxPredicate<Method>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean test(Method method) {
|
||||||
|
|
||||||
|
// if it's present in our impl -> remove
|
||||||
|
// else keep (to report)
|
||||||
|
|
||||||
|
try {
|
||||||
|
MarkwonVisitorImpl.class
|
||||||
|
.getDeclaredMethod(method.getName(), method.getParameterTypes());
|
||||||
|
return false;
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
assertEquals(methods.toString(), 0, methods.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void non_registered_nodes_children_visited() {
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void has_next() {
|
||||||
|
|
||||||
|
final MarkwonVisitorImpl impl = new MarkwonVisitorImpl(
|
||||||
|
mock(MarkwonConfiguration.class),
|
||||||
|
mock(RenderProps.class),
|
||||||
|
mock(SpannableBuilder.class),
|
||||||
|
Collections.<Class<? extends Node>, MarkwonVisitor.NodeVisitor<? extends Node>>emptyMap());
|
||||||
|
|
||||||
|
final Node noNext = mock(Node.class);
|
||||||
|
assertFalse(impl.hasNext(noNext));
|
||||||
|
|
||||||
|
final Node hasNext = mock(Node.class, RETURNS_MOCKS);
|
||||||
|
assertTrue(impl.hasNext(hasNext));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void length() {
|
||||||
|
// redirects call to SpannableBuilder (no internal caching)
|
||||||
|
|
||||||
|
final class BuilderImpl extends SpannableBuilder {
|
||||||
|
|
||||||
|
private int length;
|
||||||
|
|
||||||
|
private void setLength(int length) {
|
||||||
|
this.length = length;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int length() {
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final BuilderImpl builder = new BuilderImpl();
|
||||||
|
|
||||||
|
final MarkwonVisitorImpl impl = new MarkwonVisitorImpl(
|
||||||
|
mock(MarkwonConfiguration.class),
|
||||||
|
mock(RenderProps.class),
|
||||||
|
builder,
|
||||||
|
Collections.<Class<? extends Node>, MarkwonVisitor.NodeVisitor<? extends Node>>emptyMap());
|
||||||
|
|
||||||
|
for (int i = 0; i < 13; i++) {
|
||||||
|
builder.setLength(i);
|
||||||
|
assertEquals(i, builder.length());
|
||||||
|
assertEquals(builder.length(), impl.length());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void set_spans_for_node() {
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void set_spans_for_node_optional() {
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
}
|
18
markwon/src/test/java/ru/noties/markwon/PropTest.java
Normal file
18
markwon/src/test/java/ru/noties/markwon/PropTest.java
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package ru.noties.markwon;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@Config(manifest = Config.NONE)
|
||||||
|
public class PropTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void require() {
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package ru.noties.markwon;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@Config(manifest = Config.NONE)
|
||||||
|
public class RenderPropsImplTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
}
|
@ -90,6 +90,7 @@ public class SyntaxHighlightTest {
|
|||||||
final MarkwonVisitor visitor = new AbstractMarkwonVisitorImpl(
|
final MarkwonVisitor visitor = new AbstractMarkwonVisitorImpl(
|
||||||
configuration,
|
configuration,
|
||||||
mock(RenderProps.class),
|
mock(RenderProps.class),
|
||||||
|
new SpannableBuilder(),
|
||||||
visitorMap);
|
visitorMap);
|
||||||
|
|
||||||
final SpannableBuilder builder = visitor.builder();
|
final SpannableBuilder builder = visitor.builder();
|
||||||
|
@ -19,7 +19,7 @@ import ru.noties.markwon.MarkwonConfiguration;
|
|||||||
import ru.noties.markwon.MarkwonPlugin;
|
import ru.noties.markwon.MarkwonPlugin;
|
||||||
import ru.noties.markwon.MarkwonSpansFactory;
|
import ru.noties.markwon.MarkwonSpansFactory;
|
||||||
import ru.noties.markwon.MarkwonVisitor;
|
import ru.noties.markwon.MarkwonVisitor;
|
||||||
import ru.noties.markwon.MovementMethodPlugin;
|
import ru.noties.markwon.movement.MovementMethodPlugin;
|
||||||
import ru.noties.markwon.core.MarkwonTheme;
|
import ru.noties.markwon.core.MarkwonTheme;
|
||||||
import ru.noties.markwon.image.AsyncDrawableLoader;
|
import ru.noties.markwon.image.AsyncDrawableLoader;
|
||||||
import ru.noties.markwon.image.ImageItem;
|
import ru.noties.markwon.image.ImageItem;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user