Re: [xwiki-devs] [xwiki-notifications] r19431 - in 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 src/test/java/org/xwiki/rendering
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> </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
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
participants (1)
-
Thomas Mortagne