/*=============================================================================# # 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 org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import org.junit.Test; import de.walware.docmlet.wikitext.internal.commonmark.core.Line; import de.walware.docmlet.wikitext.internal.commonmark.core.LineSequence; import de.walware.docmlet.wikitext.internal.commonmark.core.SourceBlockItem; import de.walware.docmlet.wikitext.internal.commonmark.core.SourceBlocks; public class HtmlBlockTest { private final HtmlBlock block = new HtmlBlock(); public HtmlBlockTest() { } @Test public void canStart_Type1() { for (String tagName : new String[] { "script", "pre", "style" }) { assertCanStart(true, 1, "<" + tagName); assertCanStart(true, 1, " <" + tagName); assertCanStart(true, 1, " <" + tagName); assertCanStart(false, 1, " <" + tagName); assertCanStart(true, 1, "<" + tagName + ">"); assertCanStart(true, 1, "<" + tagName + "> "); assertCanStart(true, 7, "<" + tagName + "/>"); assertCanStart(true, 1, "<" + tagName + ">with some text"); assertCanStart(true, 1, "<" + tagName + "></" + tagName + ">"); assertCanStart(true, 1, "<" + tagName + "></" + tagName + " >"); assertCanStart(true, 1, "<" + tagName + "> sdf</" + tagName + " >"); } } @Test public void canStart_Comment() { assertCanStart(true, 2, "<!-- a comment -->"); assertCanStart(true, 2, "<!-- <"); assertCanStart(true, 2, "<!--"); assertCanStart(true, 2, "<!-- <-"); assertCanStart(true, 2, "<!--<-"); // CommonMark spec != HTML spec // assertCanStart(false, "<!-->"); // assertCanStart(false, "<!--->"); assertCanStart(true, 2, "<!-- ->"); // assertCanStart(false, "<!-- -- -->"); } @Test public void canStart() { assertFalse(block.canStart(LineSequence.create(""), null)); assertTrue(block.canStart(LineSequence.create("<div>"), null)); assertTrue(block.canStart(LineSequence.create("<table>"), null)); assertTrue(block.canStart(LineSequence.create("<p>"), null)); assertTrue(block.canStart(LineSequence.create("<one>"), null)); assertFalse(block.canStart(LineSequence.create("<one invalid=>"), null)); assertFalse(block.canStart(LineSequence.create("<one> with text"), null)); assertTrue(block.canStart(LineSequence.create(" <p>"), null)); assertFalse(block.canStart(LineSequence.create(" <p>"), null)); assertFalse(block.canStart(LineSequence.create("\t<p>"), null)); assertTrue(block.canStart(LineSequence.create("<p"), null)); assertTrue(block.canStart(LineSequence.create("<p >"), null)); assertTrue(block.canStart(LineSequence.create("<p />"), null)); assertTrue(block.canStart(LineSequence.create("<p/>"), null)); assertTrue(block.canStart(LineSequence.create("<p\n a=\"b\"\n>"), null)); } @Test public void canStartDoesNotAdvanceLineSequencePosition() { LineSequence lineSequence = LineSequence.create("<p\n a=\"b\"\n>"); Line firstLine = lineSequence.getCurrentLine(); assertTrue(block.canStart(lineSequence, null)); assertSame(firstLine, lineSequence.getCurrentLine()); } private void assertCanStart(boolean expected, int type, String string) { assertEquals(expected, block.canStart(LineSequence.create(string), null)); if (expected && type > 0) { final SourceBlockItem<?> paragraph= new SourceBlocks(new ParagraphBlock()).createItems(LineSequence.create("abc")).get(0); assertEquals(type != 7, block.canStart(LineSequence.create(string), paragraph)); } } }