/*=============================================================================#
# Copyright (c) 2015-2016 David Green and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# David Green - initial API and implementation in Mylyn
# Stephan Wahlbrink (WalWare.de)
#=============================================================================*/
package de.walware.docmlet.wikitext.internal.commonmark.core.blocks;
import static de.walware.docmlet.wikitext.internal.commonmark.core.CommonmarkAsserts.assertContent;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.junit.Test;
import de.walware.jcommons.collections.ImCollections;
import com.google.common.base.Joiner;
import de.walware.docmlet.wikitext.internal.commonmark.core.LineSequence;
public class ListBlockTest {
public ListBlockTest() {
}
@Test
public void canStartBulleted() {
assertCanStart(true, "-");
assertCanStart(true, "- ");
assertCanStart(true, "- test");
assertCanStart(true, " - test");
assertCanStart(true, " - test");
assertCanStart(true, " - test");
assertCanStart(false, " - test");
assertCanStart(false, "\t- test");
assertCanStart(true, "* test");
assertCanStart(true, "+ test");
assertCanStart(false, "x test");
}
@Test
public void canStartOrdered() {
assertCanStart(true, "1.");
assertCanStart(true, "1. ");
assertCanStart(true, "1. test");
assertCanStart(true, " 1. test");
assertCanStart(true, " 1. test");
assertCanStart(true, " 1. test");
assertCanStart(false, " 1. test");
assertCanStart(false, "\t1. test");
assertCanStart(true, "2. test");
assertCanStart(true, "3. test");
assertCanStart(true, "1) test");
assertCanStart(true, "2) test");
assertCanStart(true, "23) test");
assertCanStart(true, "23. test");
assertCanStart(true, "0. test");
assertCanStart(true, "001. test");
assertCanStart(true, "123456789. test");
assertCanStart(false, "1234567890. test");
assertCanStart(false, "a. test");
}
@Test
public void simpleList() {
assertSimpleBulletedList("*");
assertSimpleBulletedList("-");
assertSimpleBulletedList("+");
}
@Test
public void listWithNestedBlocks() {
assertBulletedListWithNestedBlocks("*");
assertBulletedListWithNestedBlocks("-");
assertBulletedListWithNestedBlocks("+");
}
@Test
public void tightListWithSublist() {
List<String> lines = ImCollections.newList("* one", "* two", " * three", "* four");
assertContent("<ul><li>one</li><li>two<ul><li>three</li></ul></li><li>four</li></ul>",
Joiner.on("\n").join(lines));
}
@Test
public void simpleOrderedList() {
assertSimpleOrderedList(".");
assertSimpleOrderedList(")");
}
@Test
public void simpleOrderedListWithNestedBlocks() {
assertOrderedListWithNestedBlocks(".");
assertOrderedListWithNestedBlocks(")");
}
@Test
public void listWithFencedCodeBlock() {
assertContent("<ul><li><pre><code>a\n\n\nb\n</code></pre></li></ul>", "* ```\n a\n\n\n b\n ```");
}
// @Test
// public void terminatesWithDoubleBlankLine() {
// List<String> lines = ImCollections.newList("* one", "* two", "", "", "* three");
// assertContent("<ul><li>one</li><li>two</li></ul><ul><li>three</li></ul>", Joiner.on("\n").join(lines));
// }
@Test
public void orderedListWithStart() {
List<String> lines = ImCollections.newList("3. one", "4. two");
assertContent("<ol start=\"3\"><li>one</li><li>two</li></ol>", Joiner.on("\n").join(lines));
}
@Test
public void doubleBlankLineStartingOnListItem() {
List<String> lines = ImCollections.newList("* one", "*", "", "* three");
assertContent("<ul><li><p>one</p></li><li></li><li><p>three</p></li></ul>", Joiner.on("\n").join(lines));
}
@Test
public void startingWithBlank() {
List<String> lines = ImCollections.newList("* ", " one", " two");
assertContent("<ul><li>one two</li></ul>", Joiner.on("\n").join(lines));
}
private void assertSimpleOrderedList(String delimiter) {
List<String> lines = ImCollections.newList("1" + delimiter + " one", "2" + delimiter + " two",
"3" + delimiter + " three four");
assertContent("<ol><li>one</li><li>two</li><li>three four</li></ol>", Joiner.on("\n").join(lines));
}
private void assertBulletedListWithNestedBlocks(String delimiter) {
List<String> lines = ImCollections.newList(delimiter + " one", delimiter + " two\n two.2\n\n two.3",
delimiter + " three four");
assertContent("<ul><li><p>one</p></li><li><p>two two.2</p><p>two.3</p></li><li><p>three four</p></li></ul>",
Joiner.on("\n").join(lines));
}
private void assertOrderedListWithNestedBlocks(String delimiter) {
List<String> lines = ImCollections.newList("1" + delimiter + " one", "2" + delimiter + " two\n two.2\n\n two.3",
"3" + delimiter + " three four");
assertContent("<ol><li><p>one</p></li><li><p>two two.2</p><p>two.3</p></li><li><p>three four</p></li></ol>",
Joiner.on("\n").join(lines));
}
private void assertSimpleBulletedList(String delimiter) {
List<String> lines = ImCollections.newList(delimiter + " one", delimiter + " two", delimiter + " three four");
assertContent("<ul><li>one</li><li>two</li><li>three four</li></ul>", Joiner.on("\n").join(lines));
}
private void assertCanStart(boolean expected, String string) {
assertEquals(expected, new ListBlock().canStart(LineSequence.create(string), null));
}
}