/******************************************************************************* * Copyright (c) 2007, 2014 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 *******************************************************************************/ package org.eclipse.mylyn.wikitext.textile; import java.io.IOException; import org.eclipse.mylyn.internal.wikitext.tasks.ui.util.Util; import org.eclipse.mylyn.wikitext.parser.MarkupParser; import org.eclipse.mylyn.wikitext.parser.markup.MarkupLanguageConfiguration; import org.eclipse.mylyn.wikitext.parser.markup.block.JavaStackTraceBlock; import org.eclipse.mylyn.wikitext.tests.EclipseRuntimeRequired; import org.eclipse.mylyn.wikitext.tests.TestUtil; import junit.framework.TestCase; /** * @author David Green */ @EclipseRuntimeRequired public class BugzillaTextileLanguageTest extends TestCase { private MarkupParser parser; @Override public void setUp() throws Exception { super.setUp(); initParser(); } private void initParser() throws IOException { parser = new MarkupParser(); TextileLanguage markupLanguage = new TextileLanguage(); MarkupLanguageConfiguration configuration = Util.create("bugzilla"); markupLanguage.configure(configuration); parser.setMarkupLanguage(markupLanguage); } public void testQuotedBlock() { String html = parser.parseToHtml("One\n\n> Two\n\nThree"); assertTrue(html.contains("<body><p>One</p><blockquote><p>> Two</p></blockquote><p>Three</p></body>")); } public void testQuotedBlock2() { String html = parser.parseToHtml("One\n\n> Two\nThree"); assertTrue(html.contains("<body><p>One</p><blockquote><p>> Two</p></blockquote><p>Three</p></body>")); } public void testQuotedBlock3() { String html = parser.parseToHtml("One\n> Two\n\nThree"); assertTrue(html.contains("<body><p>One</p><blockquote><p>> Two</p></blockquote><p>Three</p></body>")); } public void testQuotedBlock4() { String html = parser.parseToHtml("One\n(In reply to comment #123)\n> Two\n\nThree"); assertTrue(html.contains( "<body><p>One</p><blockquote><p>(In reply to comment #123)<br/>> Two</p></blockquote><p>Three</p></body>")); } public void testQuotedBlock5() { String html = parser.parseToHtml("One\n > Two\n > Three\nFour"); assertTrue(html.contains( "<body><p>One</p><blockquote><p> > Two<br/> > Three</p></blockquote><p>Four</p></body>")); } public void testThisBugHasBeen() { String baseMarkup = "*** This bug has been marked as a duplicate of bug 123 ***"; String html = parser.parseToHtml(baseMarkup); assertTrue(html .contains("<p style=\"color: Blue;\">*** This bug has been marked as a duplicate of bug 123 ***</p>")); html = parser.parseToHtml(" \t " + baseMarkup); assertTrue(html.contains( "<p style=\"color: Blue;\"> \t *** This bug has been marked as a duplicate of bug 123 ***</p>")); html = parser.parseToHtml(baseMarkup + " "); assertTrue(html.contains( "<p style=\"color: Blue;\">*** This bug has been marked as a duplicate of bug 123 *** </p>")); } public void testThisBugHasBeenNegativeMatch() { String baseMarkup = "*** This bug has been marked as a duplicate of bug 123"; String html = parser.parseToHtml(baseMarkup); assertTrue(html.contains("<body><ul><li><ul><li><ul><li>This bug has been marked as a duplicate of bug 123")); } public void testBugFooHasBeenMatch() { String markup = "*** Bug 209610 has been marked as a duplicate of this bug. ***"; String html = parser.parseToHtml(markup); assertTrue(html.contains( "<body><p style=\"color: Blue;\">*** Bug 209610 has been marked as a duplicate of this bug. ***</p>")); } public void testBugFooHasBeenNegativeMatch() { String markup = "*** Bug 209610 has been marked as a duplicate of this bug."; String html = parser.parseToHtml(markup); assertTrue( html.contains("<body><ul><li><ul><li><ul><li>Bug 209610 has been marked as a duplicate of this bug.")); } public void testXmlEscaping() { String html = parser.parseToHtml("some <start>mark</start> up"); assertTrue(html.contains("<p>some <start>mark</start> up</p>")); } public void testHtmlEscaping() { String html = parser.parseToHtml("some <span class=\"s\">mark</span> up"); assertTrue(html.contains("<p>some <span class=\"s\">mark</span> up</p>")); } public void testJavaStackTraceDetection() { String html = parser.parseToHtml("text\n" + "java.lang.Exception: java.lang.IllegalStateException\n" + " at org.eclipse.mylyn.internal.wikitext.tasks.ui.util.Test.main(Test.java:21)\n" + "Caused by: java.lang.IllegalStateException\n" + " ... 1 more\n" + "text"); assertTrue(html.contains("<p>text</p><pre class=\"javaStackTrace\">java.lang.Exception")); assertTrue(html.contains("</pre><p>text</p>")); } public void testJavaStackTraceDetection_bug280805() { String html = parser.parseToHtml("text\n" + "java.lang.Exception: java.lang.IllegalStateException\n" + " at org.eclipse.mylyn.internal.wikitext.tasks.ui.util.test.main(Test.java:21)\n" + "Caused by: java.lang.IllegalStateException\n" + " ... 1 more\n" + "text"); assertTrue(html.contains("<p>text</p><pre class=\"javaStackTrace\">java.lang.Exception")); assertTrue(html.contains("</pre><p>text</p>")); } public void testJavaStackTraceDetection_bug273629() { boolean canStart = new JavaStackTraceBlock().canStart( "org.eclipse.ui.internal.PerspectiveBarContributionItem.select(PerspectiveBarContributionItem.java:124)", 0); assertTrue(canStart); } public void testJavaStackTraceDetection_bug283629() { boolean canStart = new JavaStackTraceBlock() .canStart(" org.eclipse.ui.texteditor.AbstractDecoratedTextEditor$11.run()V+165", 0); assertFalse(canStart); } public void testJavaStackTraceDetection_bug298781() { // bug 298781 <clinit> not detected correctly String markup = "java.io.EOFException\nat java.io.DataInputStream.readInt(Unknown Source)\nat org.eclipse.jdt.internal.core.JavaModelManager.loadNonChainingJarsCache(JavaModelManager.java:2843)\nat org.eclipse.jdt.internal.core.JavaModelManager.<init>(JavaModelManager.java:1477)\nat org.eclipse.jdt.internal.core.JavaModelManager.<clinit>(JavaModelManager.java:1012)\nat org.eclipse.jdt.core.JavaCore.start(JavaCore.java:4965)\nat org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:783)\nat java.security.AccessController.doPrivileged(Native Method)"; String html = parser.parseToHtml(markup); assertTrue(html.contains( "<pre class=\"javaStackTrace\">java.io.EOFException\nat java.io.DataInputStream.readInt(Unknown Source)\nat org.eclipse.jdt.internal.core.JavaModelManager.loadNonChainingJarsCache(JavaModelManager.java:2843)\nat org.eclipse.jdt.internal.core.JavaModelManager.<init>(JavaModelManager.java:1477)\nat org.eclipse.jdt.internal.core.JavaModelManager.<clinit>(JavaModelManager.java:1012)\nat org.eclipse.jdt.core.JavaCore.start(JavaCore.java:4965)\nat org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:783)\nat java.security.AccessController.doPrivileged(Native Method)\n</pre>")); } public void testJavaStackTraceDetection_bug391723() { String markup = "java.lang.IllegalStateException: message\n" + // " at com.foo.Bar.baz(Bar.java:199)\n" + // " at $Proxy40.findProcessArea(Unknown Source)"; String html = parser.parseToHtml(markup); assertEquals("<body><pre class=\"javaStackTrace\">java.lang.IllegalStateException: message\n" + " at com.foo.Bar.baz(Bar.java:199)\n" + " at $Proxy40.findProcessArea(Unknown Source)\n" + "</pre></body>", TestUtil.tagFragment("body", html)); } public void testJavaStackTraceDetection_bug432153() { String markup = "java.lang.Exception: message\nat com.sun.proxy.$Proxy0.refresh(Unknown Source)"; String html = parser.parseToHtml(markup); assertEquals("<body><pre class=\"javaStackTrace\">java.lang.Exception: message\n" // + "at com.sun.proxy.$Proxy0.refresh(Unknown Source)\n" // + "</pre></body>", TestUtil.tagFragment("body", html)); } public void testEclipseErrorDetailsBlock() { String html = parser.parseToHtml("text\n-- Error Details --\ndetail line 1\n\nno detail"); assertTrue(html.contains("<p>text</p><pre class=\"eclipseErrorDetails\">-- Error Details --")); assertTrue(html.contains("</pre><p>no detail</p>")); } }