Author: sdumitriu
Date: 2008-02-11 00:24:49 +0100 (Mon, 11 Feb 2008)
New Revision: 7480

Added:
   
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/
   
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/StrikethroughTest.java
   
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/SyntaxTestsParent.java
   
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/UnderlineTest.java
Log:
XWIKI-2080: Server hangs while rendering certain pages
Addet unit tests (the build will take forever if it happens again).

XWIKI-1207: Strikethrough XWiki syntax
XWIKI-1243: Underline XWiki syntax
Added unit tests


Added: 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/StrikethroughTest.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/StrikethroughTest.java
                               (rev 0)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/StrikethroughTest.java
       2008-02-10 23:24:49 UTC (rev 7480)
@@ -0,0 +1,146 @@
+package com.xpn.xwiki.render.markup;
+
+import java.util.ArrayList;
+
+public class StrikethroughTest extends SyntaxTestsParent
+{
+    protected void setUp()
+    {
+        super.setUp();
+    }
+
+    public void testNotTriggeredWithWhitespace()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("This is not -- stroked --");
+        expects.add("This is not -- stroked --");
+        tests.add("This is not --stroked --");
+        expects.add("This is not --stroked --");
+        tests.add("This is not -- stroked--");
+        expects.add("This is not -- stroked--");
+        test(tests, expects);
+    }
+
+    public void testSimple()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("This is --stroked--");
+        expects.add("This is <del>stroked</del>");
+        tests.add("This is --a-- stroke");
+        expects.add("This is <del>a</del> stroke");
+        tests.add("--a--");
+        expects.add("<del>a</del>");
+        test(tests, expects);
+    }
+
+    public void testThree()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("This is --a-- short stroke--");
+        expects.add("This is <del>a</del> short stroke--");
+        tests.add("This is --all -- stroked--");
+        expects.add("This is <del>all -- stroked</del>");
+        tests.add("This is --all --stroked--");
+        expects.add("This is <del>all --stroked</del>");
+        tests.add("This is --one--stroked--");
+        expects.add("This is <del>one</del>stroked--");
+        test(tests, expects);
+    }
+
+    public void testMultiple()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("More --strokes-- on a --line--");
+        expects.add("More <del>strokes</del> on a <del>line</del>");
+        test(tests, expects);
+    }
+
+    public void testExtraDashesAreInside()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("The extra dashes are ---inside---");
+        expects.add("The extra dashes are <del>-inside-</del>");
+        tests.add("The extra dashes are --- inside ---");
+        expects.add("The extra dashes are <del>- inside -</del>");
+        test(tests, expects);
+    }
+
+    public void testWithoutWhitespace()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("This--is--stroked");
+        expects.add("This<del>is</del>stroked");
+        test(tests, expects);
+    }
+
+    public void testSequence()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("--Eeny--meeny--miny--moe--");
+        expects.add("<del>Eeny</del>meeny<del>miny</del>moe--");
+        tests.add("-- Eeny--meeny--miny--moe--");
+        expects.add("...<li>Eeny<del>meeny</del>miny<del>moe</del></li>...");
+        test(tests, expects);
+    }
+
+    public void testHR()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("this is a ------ line");
+        expects.add("this is a <hr class=\"line\"/> line");
+        test(tests, expects);
+    }
+
+    public void testWithLists()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("-- this is a list item--");
+        expects.add("...<li>this is a list item--</li>...");
+        test(tests, expects);
+    }
+
+    public void testHtmlComments()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("HTML <!-- comments are ignored -->");
+        expects.add("HTML <!-- comments are ignored -->");
+        tests.add("Multiple HTML <!-- comments --> are <!-- ignored -->");
+        expects.add("Multiple HTML <!-- comments --> are <!-- ignored -->");
+        test(tests, expects);
+    }
+
+    public void testMultiline()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("This is not --not\nstroked--");
+        expects.add("This is not --not\nstroked--");
+        test(tests, expects);
+    }
+
+    public void testTimeComplexity()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        // Something like this should be (negatively) matched in linear time, 
thus it should take no
+        // time. If the build takes a lot, then the regular expression is not 
in linear time, thus
+        // wrong.
+        String text = "--";
+        for (int i = 0; i < 1000; ++i) {
+            text += "abc-";
+        }
+        tests.add(text);
+        expects.add(text);
+        test(tests, expects);
+    }
+}


Property changes on: 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/StrikethroughTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/SyntaxTestsParent.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/SyntaxTestsParent.java
                               (rev 0)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/SyntaxTestsParent.java
       2008-02-10 23:24:49 UTC (rev 7480)
@@ -0,0 +1,54 @@
+package com.xpn.xwiki.render.markup;
+
+import java.util.ArrayList;
+
+import org.jmock.Mock;
+import org.jmock.cglib.MockObjectTestCase;
+
+import com.xpn.xwiki.XWiki;
+import com.xpn.xwiki.XWikiConfig;
+import com.xpn.xwiki.XWikiContext;
+import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.render.XWikiRadeoxRenderer;
+
+public class SyntaxTestsParent extends MockObjectTestCase
+{
+    private XWikiContext context;
+
+    private XWikiRadeoxRenderer renderer;
+
+    private Mock mockXWiki;
+
+    private Mock mockDocument;
+
+    private XWikiDocument document;
+
+    protected void setUp()
+    {
+        this.renderer = new XWikiRadeoxRenderer();
+        this.context = new XWikiContext();
+
+        this.mockXWiki =
+            mock(XWiki.class, new Class[] {XWikiConfig.class, 
XWikiContext.class}, new Object[] {
+            new XWikiConfig(), context});
+        this.context.setWiki((XWiki) this.mockXWiki.proxy());
+
+        this.mockDocument = mock(XWikiDocument.class);
+        this.document = (XWikiDocument) this.mockDocument.proxy();
+
+        this.context.setDoc(document);
+    }
+
+    protected void test(ArrayList tests, ArrayList expects)
+    {
+        for (int i = 0; i < tests.size(); ++i) {
+            String result = renderer.render(tests.get(i).toString(), document, 
document, context);
+            String expected = expects.get(i).toString();
+            if (expected.startsWith("...")) {
+                assertTrue(result.indexOf(expected.substring(3, 
expected.length() - 3)) > 0);
+            } else {
+                assertEquals(expects.get(i).toString(), result);
+            }
+        }
+    }
+}


Property changes on: 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/SyntaxTestsParent.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/UnderlineTest.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/UnderlineTest.java
                           (rev 0)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/UnderlineTest.java
   2008-02-10 23:24:49 UTC (rev 7480)
@@ -0,0 +1,130 @@
+package com.xpn.xwiki.render.markup;
+
+import java.util.ArrayList;
+
+public class UnderlineTest extends SyntaxTestsParent
+{
+    protected void setUp()
+    {
+        super.setUp();
+    }
+
+    public void testNotTriggeredWithWhitespace()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("This is not __ underlined __");
+        expects.add("This is not __ underlined __");
+        tests.add("This is not __underlined __");
+        expects.add("This is not __underlined __");
+        tests.add("This is not __ underlined__");
+        expects.add("This is not __ underlined__");
+        test(tests, expects);
+    }
+
+    public void testSimple()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("This is __underlined__");
+        expects.add("This is <em class=\"underline\">underlined</em>");
+        tests.add("This is __a__ letter underlined");
+        expects.add("This is <em class=\"underline\">a</em> letter 
underlined");
+        tests.add("__a__");
+        expects.add("<em class=\"underline\">a</em>");
+        test(tests, expects);
+    }
+
+    public void testThree()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("This is __a__ short underline__");
+        expects.add("This is <em class=\"underline\">a</em> short 
underline__");
+        tests.add("This is __all __ underlined__");
+        expects.add("This is <em class=\"underline\">all __ underlined</em>");
+        tests.add("This is __all __underlined__");
+        expects.add("This is <em class=\"underline\">all __underlined</em>");
+        tests.add("This is __one__underlined__");
+        expects.add("This is <em class=\"underline\">one</em>underlined__");
+        test(tests, expects);
+    }
+
+    public void testMultiple()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("More __underlines__ on a __line__");
+        expects.add("More <em class=\"underline\">underlines</em> on a <em 
class=\"underline\">line</em>");
+        test(tests, expects);
+    }
+
+    public void testExtraUnderscoresAreInside()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("The extra underscores are ___inside___");
+        expects.add("The extra underscores are <em 
class=\"underline\">_inside_</em>");
+        tests.add("The extra underscores are ___ inside ___");
+        expects.add("The extra underscores are <em class=\"underline\">_ 
inside _</em>");
+        test(tests, expects);
+    }
+
+    public void testWithoutWhitespace()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("This__is__underlined");
+        expects.add("This<em class=\"underline\">is</em>underlined");
+        test(tests, expects);
+    }
+
+    public void testSequence()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("__Eeny__meeny__miny__moe__");
+        expects.add("<em class=\"underline\">Eeny</em>meeny<em 
class=\"underline\">miny</em>moe__");
+        tests.add("__ Eeny__meeny__miny__moe__");
+        expects.add("__ Eeny<em class=\"underline\">meeny</em>miny<em 
class=\"underline\">moe</em>");
+        test(tests, expects);
+    }
+
+    public void testSeveralInARow()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("this is not an underline: ____ ");
+        expects.add("this is not an underline: ____ ");
+        tests.add("this is an underscore underlined: _____ ");
+        expects.add("this is an underscore underlined: <em 
class=\"underline\">_</em> ");
+        tests.add("this is two underscores underlined: ______ ");
+        expects.add("this is two underscores underlined: <em 
class=\"underline\">__</em> ");
+        test(tests, expects);
+    }
+
+    public void testMultiline()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        tests.add("This is not __not\nunderlined__");
+        expects.add("This is not __not\nunderlined__");
+        test(tests, expects);
+    }
+
+    public void testTimeComplexity()
+    {
+        ArrayList tests = new ArrayList();
+        ArrayList expects = new ArrayList();
+        // Something like this should be (negatively) matched in linear time, 
thus it should take no
+        // time. If the build takes a lot, then the regular expression is not 
in linear time, thus
+        // wrong.
+        String text = "__";
+        for (int i = 0; i < 1000; ++i) {
+            text += "abc_";
+        }
+        tests.add(text);
+        expects.add(text);
+        test(tests, expects);
+    }
+}


Property changes on: 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/render/markup/UnderlineTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications

Reply via email to