On Wed, May 6, 2009 at 17:42, Thomas Mortagne <[email protected]> wrote:
> On Wed, May 6, 2009 at 16:24, vmassol <[email protected]>
> wrote:
>> Author: vmassol
>> Date: 2009-05-06 16:24:58 +0200 (Wed, 06 May 2009)
>> New Revision: 19431
>>
>> Added:
>>
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/HTMLMacroTest.java
>>
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/MockDocumentAccessBridge.java
>>
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/MockDocumentNameSerializer.java
>> Modified:
>>
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/pom.xml
>>
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/main/java/org/xwiki/rendering/internal/macro/html/HTMLMacro.java
>> Log:
>> XWIKI-3764: Modify behavior of HTML macro when it's set to contain wiki
>> syntax
>>
>> * Fixed regression where non inline content in inline context was allowed to
>> go through
>>
>> Merged from trunk (rev 19430)
>>
>>
>> Modified:
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/pom.xml
>> ===================================================================
>> ---
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/pom.xml
>> 2009-05-06 14:23:02 UTC (rev 19430)
>> +++
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/pom.xml
>> 2009-05-06 14:24:58 UTC (rev 19431)
>> @@ -42,6 +42,19 @@
>> <groupId>org.wikimodel</groupId>
>> <artifactId>org.wikimodel.wem</artifactId>
>> </dependency>
>> + <!-- Testing dependencies -->
>> + <dependency>
>> + <groupId>org.xwiki.platform</groupId>
>> + <artifactId>xwiki-core-shared-tests</artifactId>
>> + <version>${pom.version}</version>
>> + <scope>test</scope>
>> + </dependency>
>
> This dependency is already in xwiki-core-rendering-macros-parent
>
>> + <dependency>
>> + <groupId>jmock</groupId>
>> + <artifactId>jmock</artifactId>
>> + <version>1.1.0</version>
>> + <scope>test</scope>
>> + </dependency>
Also this dependency is already given by xwiki-core-shared-tests but 1.2.0
>> </dependencies>
>> <build>
>> <plugins>
>> @@ -49,9 +62,9 @@
>> <groupId>org.apache.maven.plugins</groupId>
>> <artifactId>maven-surefire-plugin</artifactId>
>> <configuration>
>> - <includes>
>> - <include>**/RenderingTests.java</include>
>> - </includes>
>> + <excludes>
>> + <exclude>**/Mock*.java</exclude>
>> + </excludes>
>> </configuration>
>> </plugin>
>> <plugin>
>>
>> Modified:
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/main/java/org/xwiki/rendering/internal/macro/html/HTMLMacro.java
>> ===================================================================
>> ---
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/main/java/org/xwiki/rendering/internal/macro/html/HTMLMacro.java
>> 2009-05-06 14:23:02 UTC (rev 19430)
>> +++
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/main/java/org/xwiki/rendering/internal/macro/html/HTMLMacro.java
>> 2009-05-06 14:24:58 UTC (rev 19431)
>> @@ -26,6 +26,8 @@
>>
>> import org.apache.commons.lang.StringUtils;
>> import org.w3c.dom.Document;
>> +import org.w3c.dom.Element;
>> +import org.w3c.dom.Node;
>> import org.xwiki.bridge.DocumentAccessBridge;
>> import org.xwiki.bridge.DocumentNameSerializer;
>> import org.xwiki.component.annotation.Component;
>> @@ -193,8 +195,9 @@
>> * @param isInline true if the content is inline and thus if we need to
>> remove the top level paragraph
>> * element created by the cleaner
>> * @return the cleaned HTML as a string representing valid XHTML
>> + * @throws MacroExecutionException if the macro is inline and the
>> content is not inline HTML
>> */
>> - private String cleanHTML(String content, boolean isInline)
>> + private String cleanHTML(String content, boolean isInline) throws
>> MacroExecutionException
>> {
>> String cleanedContent = content;
>>
>> @@ -216,9 +219,20 @@
>> // HTML envelope when rendered. We remove it so that the HTML <head>
>> tag isn't output.
>> HTMLUtils.stripHTMLEnvelope(document);
>>
>> - // If in inline mode remove the top level paragraph if there's one.
>> + // If in inline mode verify we have inline HTML content and remove
>> the top level paragraph if there's one
>> if (isInline) {
>> - HTMLUtils.stripFirstElementInside(document,
>> HTMLConstants.TAG_HTML, HTMLConstants.TAG_P);
>> + // TODO: Improve this since when're inside a table cell or a
>> list item we can allow non inline items too
>> + Element root = document.getDocumentElement();
>> + if (root.getChildNodes().getLength() == 1 &&
>> root.getFirstChild().getNodeType() == Node.ELEMENT_NODE
>> + && root.getFirstChild().getNodeName().equalsIgnoreCase("p"))
>> + {
>> + HTMLUtils.stripFirstElementInside(document,
>> HTMLConstants.TAG_HTML, HTMLConstants.TAG_P);
>> + } else {
>> + throw new MacroExecutionException(
>> + "When using the HTML macro inline, you can only use
>> inline HTML content."
>> + + " Block HTML content (such as tables) cannot be
>> displayed."
>> + + " Try leaving an empty line before and after the
>> HTML macro.");
>> + }
>> }
>>
>> // Don't print the XML declaration nor the XHTML DocType.
>>
>> Added:
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/HTMLMacroTest.java
>> ===================================================================
>> ---
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/HTMLMacroTest.java
>> (rev 0)
>> +++
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/HTMLMacroTest.java
>> 2009-05-06 14:24:58 UTC (rev 19431)
>> @@ -0,0 +1,69 @@
>> +/*
>> + * See the NOTICE file distributed with this work for additional
>> + * information regarding copyright ownership.
>> + *
>> + * This is free software; you can redistribute it and/or modify it
>> + * under the terms of the GNU Lesser General Public License as
>> + * published by the Free Software Foundation; either version 2.1 of
>> + * the License, or (at your option) any later version.
>> + *
>> + * This software is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>> + * Lesser General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU Lesser General Public
>> + * License along with this software; if not, write to the Free
>> + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
>> + * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
>> + */
>> +package org.xwiki.rendering;
>> +
>> +import org.xwiki.rendering.internal.macro.html.HTMLMacro;
>> +import org.xwiki.rendering.macro.Macro;
>> +import org.xwiki.rendering.macro.MacroExecutionException;
>> +import org.xwiki.rendering.macro.html.HTMLMacroParameters;
>> +import org.xwiki.rendering.scaffolding.MockDocumentNameSerializer;
>> +import org.xwiki.rendering.transformation.MacroTransformationContext;
>> +import org.xwiki.test.AbstractXWikiComponentTestCase;
>> +
>> +/**
>> + * Unit tests for {...@link HTMLMacro} that cannot be performed using the
>> Rendering Test framework.
>> + *
>> + * @version $Id: $
>> + * @since 1.8.3
>> + */
>> +public class HTMLMacroTest extends AbstractXWikiComponentTestCase
>> +{
>> + /**
>> + * {...@inheritdoc}
>> + *
>> + * @see com.xpn.xwiki.test.AbstractXWikiComponentTestCase#setUp()
>> + */
>> + �...@override
>> + protected void setUp() throws Exception
>> + {
>> + super.setUp();
>> +
>> getComponentManager().registerComponent(MockDocumentAccessBridge.getComponentDescriptor());
>> +
>> getComponentManager().registerComponent(MockDocumentNameSerializer.getComponentDescriptor());
>> + }
>> +
>> + /**
>> + * Verify that inline HTML macros with non inline content generate an
>> exception.
>> + */
>> + public void testHTMLMacroWhenNonInlineContentInInlineContext() throws
>> Exception
>> + {
>> + HTMLMacro macro = (HTMLMacro)
>> getComponentManager().lookup(Macro.class.getName(), "html");
>> + HTMLMacroParameters parameters = new HTMLMacroParameters();
>> + MacroTransformationContext context = new
>> MacroTransformationContext();
>> + context.setInline(true);
>> + try {
>> + macro.execute(parameters, "<ul><li>item</li></ul>", context);
>> + fail("Should have thrown an exception here");
>> + } catch (MacroExecutionException expected) {
>> + assertEquals("When using the HTML macro inline, you can only
>> use inline HTML content. Block HTML "
>> + + "content (such as tables) cannot be displayed. Try
>> leaving an empty line before and after the "
>> + + "HTML macro.", expected.getMessage());
>> + }
>> + }
>> +}
>>
>> Added:
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/MockDocumentAccessBridge.java
>> ===================================================================
>> ---
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/MockDocumentAccessBridge.java
>> (rev 0)
>> +++
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/MockDocumentAccessBridge.java
>> 2009-05-06 14:24:58 UTC (rev 19431)
>> @@ -0,0 +1,271 @@
>> +/*
>> + * See the NOTICE file distributed with this work for additional
>> + * information regarding copyright ownership.
>> + *
>> + * This is free software; you can redistribute it and/or modify it
>> + * under the terms of the GNU Lesser General Public License as
>> + * published by the Free Software Foundation; either version 2.1 of
>> + * the License, or (at your option) any later version.
>> + *
>> + * This software is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>> + * Lesser General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU Lesser General Public
>> + * License along with this software; if not, write to the Free
>> + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
>> + * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
>> + */
>> +package org.xwiki.rendering;
>> +
>> +import java.util.Map;
>> +
>> +import org.xwiki.bridge.DocumentAccessBridge;
>> +import org.xwiki.bridge.DocumentModelBridge;
>> +import org.xwiki.bridge.DocumentName;
>> +import org.xwiki.component.descriptor.ComponentDescriptor;
>> +import org.xwiki.component.descriptor.DefaultComponentDescriptor;
>> +
>> +/**
>> + * Mock {...@link DocumentAccessBridge} implementation used for testing,
>> since we don't want to pull any dependency on the
>> + * Model/Skin/etc for the Rendering module's unit tests.
>> + *
>> + * @version $Id: $
>> + * @since 1.8.3
>> + */
>> +public class MockDocumentAccessBridge implements DocumentAccessBridge
>> +{
>> + /**
>> + * Create and return a descriptor for this component.
>> + *
>> + * @return the descriptor of the component.
>> + */
>> + public static ComponentDescriptor getComponentDescriptor()
>> + {
>> + DefaultComponentDescriptor componentDescriptor = new
>> DefaultComponentDescriptor();
>> +
>> + componentDescriptor.setRole(DocumentAccessBridge.class);
>> +
>> componentDescriptor.setImplementation(MockDocumentAccessBridge.class.getName());
>> +
>> + return componentDescriptor;
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public String getDocumentContent(String documentName) throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public String getDocumentContent(String documentName, String language)
>> throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public boolean exists(String documentName)
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public String getURL(String documentName, String action, String
>> queryString, String anchor)
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public String getAttachmentURL(String documentName, String
>> attachmentName)
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public String getProperty(String documentName, String className, int
>> objectNumber, String propertyName)
>> + throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public String getProperty(String documentName, String className, String
>> propertyName) throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public String getProperty(String documentName, String propertyName)
>> throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public String getPropertyType(String className, String propertyName)
>> throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public boolean isPropertyCustomMapped(String className, String
>> propertyName) throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public void setProperty(String documentName, String className, String
>> propertyName, Object propertyValue)
>> + throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public byte[] getAttachmentContent(String documentName, String
>> attachmentName) throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public boolean hasProgrammingRights()
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public String getDocumentContentForDefaultLanguage(String arg0) throws
>> Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public boolean isDocumentViewable(String arg0)
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public String getCurrentUser()
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public String getDefaultEncoding()
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public String getDocumentSyntaxId(String arg0) throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public boolean isDocumentEditable(String arg0)
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public void setAttachmentContent(String arg0, String arg1, byte[] arg2)
>> throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public void setDocumentContent(String arg0, String arg1, String arg2,
>> boolean arg3) throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public void setDocumentSyntaxId(String arg0, String arg1) throws
>> Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public DocumentModelBridge getDocument(String documentName) throws
>> Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public DocumentName getDocumentName(String documentName)
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public DocumentName getCurrentDocumentName()
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public void popDocumentFromContext(Map<String, Object> backupObjects)
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + */
>> + public void pushDocumentInContext(Map<String, Object> backupObjects,
>> String documentName) throws Exception
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +}
>>
>> Added:
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/MockDocumentNameSerializer.java
>> ===================================================================
>> ---
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/MockDocumentNameSerializer.java
>> (rev 0)
>> +++
>> platform/core/branches/xwiki-core-1.8/xwiki-rendering/xwiki-rendering-macros/xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/MockDocumentNameSerializer.java
>> 2009-05-06 14:24:58 UTC (rev 19431)
>> @@ -0,0 +1,61 @@
>> +/*
>> + * See the NOTICE file distributed with this work for additional
>> + * information regarding copyright ownership.
>> + *
>> + * This is free software; you can redistribute it and/or modify it
>> + * under the terms of the GNU Lesser General Public License as
>> + * published by the Free Software Foundation; either version 2.1 of
>> + * the License, or (at your option) any later version.
>> + *
>> + * This software is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
>> + * Lesser General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU Lesser General Public
>> + * License along with this software; if not, write to the Free
>> + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
>> + * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
>> + */
>> +package org.xwiki.rendering;
>> +
>> +import org.xwiki.bridge.DocumentAccessBridge;
>> +import org.xwiki.bridge.DocumentName;
>> +import org.xwiki.bridge.DocumentNameSerializer;
>> +import org.xwiki.component.descriptor.ComponentDescriptor;
>> +import org.xwiki.component.descriptor.DefaultComponentDescriptor;
>> +
>> +/**
>> + * Mock {...@link DocumentAccessBridge} implementation used for testing,
>> since we don't want to pull any dependency on the
>> + * Model/Skin/etc for the Rendering module's unit tests.
>> + *
>> + * @version $Id: MockDocumentNameSerializer.java 19152 2009-04-27 21:02:41Z
>> tmortagne $
>> + * @since 1.9M2
>> + */
>> +public class MockDocumentNameSerializer implements DocumentNameSerializer
>> +{
>> + /**
>> + * Create and return a descriptor for this component.
>> + *
>> + * @return the descriptor of the component.
>> + */
>> + public static ComponentDescriptor getComponentDescriptor()
>> + {
>> + DefaultComponentDescriptor componentDescriptor = new
>> DefaultComponentDescriptor();
>> +
>> + componentDescriptor.setRole(DocumentNameSerializer.class);
>> +
>> componentDescriptor.setImplementation(MockDocumentNameSerializer.class.getName());
>> +
>> + return componentDescriptor;
>> + }
>> +
>> + /**
>> + * {...@inheritdoc}
>> + *
>> + * @see
>> org.xwiki.bridge.DocumentNameSerializer#serialize(org.xwiki.bridge.DocumentName)
>> + */
>> + public String serialize(DocumentName documentName)
>> + {
>> + throw new RuntimeException("Not implemented");
>> + }
>> +}
>>
>> _______________________________________________
>> notifications mailing list
>> [email protected]
>> http://lists.xwiki.org/mailman/listinfo/notifications
>>
>
>
>
> --
> Thomas Mortagne
>
--
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs