/******************************************************************************* * Copyright (c) 2012, 2013 Stefan Seelmann 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: * Stefan Seelmann - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.internal.wikitext.markdown.tests; /** * Tests for Markdown overview and miscellaneous. Follows specification at * <a>http://daringfireball.net/projects/markdown/syntax#overview</a>. * <a>http://daringfireball.net/projects/markdown/syntax#misc</a>. * * @author Stefan Seelmann */ public class MarkdownLanguageMiscellaneousTest extends MarkdownLanguageTestBase { public void testEmptyLine() { parseAndAssert(" ", ""); } /* * Inline HTML. For any markup that is not covered by Markdown's syntax, you simply use HTML itself. There's no need * to preface it or delimit it to indicate that you’re switching from Markdown to HTML; you just use the tags. The * only restrictions are that block-level HTML elements - e.g. div, table,pre, p, etc. - must be separated from * surrounding content by blank lines, and the start and end tags of the block should not be indented with tabs or * spaces. Markdown is smart enough not to add extra (unwanted) p tags around HTML block-level tags. */ public void testInlineHtml() throws Exception { String markup = "aaa\n\n<table>\n <tr>\n <td>Foo</td>\n </tr>\n</table>\n\nbbb"; String expectedHtml = "<p>aaa</p><table> <tr> <td>Foo</td> </tr></table><p>bbb</p>"; parseAndAssert(markup, expectedHtml); } /* * Note that Markdown formatting syntax is not processed within block-level HTML tags. E.g., you can't use * Markdown-style *emphasis* inside an HTML block. */ public void testNoProcessingWithinInlineHtmlBlockLevelTags() throws Exception { String markup = "<div>*Foo*</div>"; String expectedHtml = "<div>*Foo*</div>"; parseAndAssert(markup, expectedHtml); } /* * Span-level HTML tags - e.g. span, cite, or del - can be used anywhere in a Markdown paragraph, list item, or * header. If you want, you can even use HTML tags instead of Markdown formatting; e.g. if you'd prefer to use HTML * a or img tags instead of Markdown's link or image syntax, go right ahead. */ public void testSpanLevelTags() throws Exception { String markup = "Image: <img src=\"image.jpg\">some nice image</img>."; String expectedHtml = "<p>Image: <img src=\"image.jpg\">some nice image</img>.</p>"; parseAndAssert(markup, expectedHtml); } /* * Unlike block-level HTML tags, Markdown syntax is processed within span-level tags. */ public void testProcessingInSpanLevelTags() throws Exception { String markup = "Image: <img src=\"image.jpg\">some **nice** image</img>."; String expectedHtml = "<p>Image: <img src=\"image.jpg\">some <strong>nice</strong> image</img>.</p>"; parseAndAssert(markup, expectedHtml); } /* * Automatic Escaping for Special Characters. Markdown allows you to use these characters naturally, taking care of * all the necessary escaping for you. If you use an ampersand as part of an HTML entity, it remains unchanged; * otherwise it will be translated into &. So, if you want to include a copyright symbol in your article, you * can write: © and Markdown will leave it alone. */ public void testPreserveHtmlEntities() { parseAndAssert("© &", "<p>© &</p>"); } /* * But if you write: AT&T Markdown will translate it to: AT&T. */ public void testAmpersandIsEscaped() { parseAndAssert("AT&T, a & b", "<p>AT&T, a & b</p>"); } public void testAmpersandIsEscapedWithinUrl() { String markup = "http://images.google.com/images?num=30&q=larry+bird"; String expectedHtml = "<p>http://images.google.com/images?num=30&q=larry+bird</p>"; parseAndAssert(markup, expectedHtml); } /* * Similarly, because Markdown supports inline HTML, if you use angle brackets as delimiters for HTML tags, Markdown * will treat them as such. But if you write: 4 < 5 Markdown will translate it to: 4 < 5 */ public void testLessThanAngleBracketIsEscaped() { parseAndAssert("4 < 5", "<p>4 < 5</p>"); } public void testGreaterThanAngleBracketIsEscaped() { parseAndAssert("6 > 5", "<p>6 > 5</p>"); } /* * Backslash Escapes. Markdown allows you to use backslash escapes to generate literal characters which would otherwise have special * meaning in Markdown's formatting syntax. */ public void testEscapedBackslash() { parseAndAssert("\\\\", "<p>\\</p>"); } public void testEscapedBacktick() { parseAndAssert("\\`", "<p>`</p>"); } public void testEscapedAsterisk() { parseAndAssert("\\*", "<p>*</p>"); } public void testEscapedUnderscore() { parseAndAssert("\\_", "<p>_</p>"); } public void testEscapedOpeningCurlyBrace() { parseAndAssert("\\{", "<p>{</p>"); } public void testEscapedClosingCurlyBrace() { parseAndAssert("\\}", "<p>}</p>"); } public void testEscapedOpeningSquareBracket() { parseAndAssert("\\[", "<p>[</p>"); } public void testEscapedClosingSquareBracket() { parseAndAssert("\\]", "<p>]</p>"); } public void testEscapedOpeningParenthesis() { parseAndAssert("\\(", "<p>(</p>"); } public void testEscapedClosingParenthesis() { parseAndAssert("\\)", "<p>)</p>"); } public void testEscapedHashMark() { parseAndAssert("\\#", "<p>#</p>"); } public void testEscapedPlusSign() { parseAndAssert("\\+", "<p>+</p>"); } public void testEscapedMinusSign() { parseAndAssert("\\-", "<p>-</p>"); } public void testEscapedDot() { parseAndAssert("\\.", "<p>.</p>"); } public void testEscapedExclamationMark() { parseAndAssert("\\!", "<p>!</p>"); } /* * Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround * the URL or email address with angle brackets. What this means is that if you want to show the actual text of a * URL or email address, and also have it be a clickable link, you can do this: */ public void testAutomaticLinksAtBeginOfLine() throws Exception { String markup = "<http://example.com/>"; String expectedHtml = "<p><a href=\"http://example.com/\">http://example.com/</a></p>"; parseAndAssert(markup, expectedHtml); } public void testAutomaticLinksWithinText() throws Exception { String markup = "This <http://example.com/> is an automatic link."; String expectedHtml = "<p>This <a href=\"http://example.com/\">http://example.com/</a> is an automatic link.</p>"; parseAndAssert(markup, expectedHtml); } public void testNoSpanWithinAutomaticLinks() throws Exception { String markup = "This <http://www.google.de/?q=t_es_t> is an automatic link."; String expectedHtml = "<p>This <a href=\"http://www.google.de/?q=t_es_t\">http://www.google.de/?q=t_es_t</a> is an automatic link.</p>"; parseAndAssert(markup, expectedHtml); } public void testHtmlEntity() { parseAndAssert("© more text", "<p>© more text</p>"); parseAndAssert("more text ©", "<p>more text ©</p>"); parseAndAssert("©", "<p>©</p>"); parseAndAssert("start©end", "<p>start©end</p>"); parseAndAssert("    ", "<p>    </p>"); parseAndAssert("£", "<p>£</p>"); } }