On 11/26/2009 04:28 PM, tmortagne (SVN) wrote:
Author: tmortagne Date: 2009-11-26 16:28:25 +0100 (Thu, 26 Nov 2009) New Revision: 25288
Added: enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java Modified: enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java platform/core/trunk/xwiki-xmlrpc/xwiki-xmlrpc-client/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcClient.java platform/core/trunk/xwiki-xmlrpc/xwiki-xmlrpc-model/src/main/java/org/xwiki/xmlrpc/XWikiXmlRpcApi.java Log: XWIKI-4464: Extend the XmlRpc API with new rendering features * Apply patch from Florin Ciubotaru: ** New getRenderedContendMethods added to the api(We still need a few votes on devs for these to get commited). Completed the client with the new additions. ** Added integration tests.
Modified: enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java =================================================================== --- enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java 2009-11-26 11:14:42 UTC (rev 25287) +++ enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/com/xpn/xwiki/it/xmlrpc/AllTests.java 2009-11-26 15:28:25 UTC (rev 25288) @@ -62,6 +62,7 @@ addTestCase(suite, org.xwiki.xmlrpc.XWikiClassesTest.class); addTestCase(suite, org.xwiki.xmlrpc.XWikiObjectsTest.class); addTestCase(suite, org.xwiki.xmlrpc.SearchTest.class); + addTestCase(suite, org.xwiki.xmlrpc.RenderingTest.class);
return new XWikiTestSetup(suite); }
Added: enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java =================================================================== --- enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java (rev 0) +++ enterprise/trunk/distribution-test/xmlrpc-tests/src/test/it/org/xwiki/xmlrpc/RenderingTest.java 2009-11-26 15:28:25 UTC (rev 25288) @@ -0,0 +1,145 @@ +/* + * 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.xmlrpc; + +import java.util.List; + +import junit.framework.Assert; + +import org.apache.xmlrpc.XmlRpcException; +import org.xwiki.xmlrpc.model.XWikiPage; + +public class RenderingTest extends AbstractXWikiXmlRpcTest +{ + public void testGetInputSyntaxes() throws XmlRpcException + { + List<String> syntaxes = rpc.getInputSyntaxes(); + + TestUtils.banner("TEST: getInputSyntaxes()");
I'd swap the banner setting and the retrieval method, since if the method fails, then the banner won't be set. Also, System.out should not be used.
+ System.out.format("%d conversion input syntaxes found:\n", syntaxes.size()); + for (String syntaxId : syntaxes) { + System.out.format("%s\n", syntaxId); + } + Assert.assertTrue(syntaxes.size() != 0); + } + + public void testGetOutputSyntaxes() throws XmlRpcException + { + List<String> syntaxes = rpc.getOutputSyntaxes(); + + TestUtils.banner("TEST: getOutputSyntaxes()"); + System.out.format("%d conversion output syntaxes found:\n", syntaxes.size()); + for (String syntaxId : syntaxes) { + System.out.format("%s\n", syntaxId); + } + Assert.assertTrue(syntaxes.size() != 0); + } + + public void testConvert() throws XmlRpcException + { + String inputXWiki = + "**BoldText**//ItalicText//" + String.format("%n") + "==h2Text==" + String.format("%n") + "normalText";
Why String.format("%n")? Doesn't a simple \n suffice? Or, if the reak system endline must be used, for a reason I can't see now, how about org.apache.commons.lang.SystemUtils.LINE_SEPARATOR or the raw System.getProperty("line.separator")?
+ String inputXhtml = + "<div><p><strong>boldText</strong><br/><em>ItalicText</em></p>" + String.format("%n") + + "<h2 id=\"h2Text\"><span>h2Text</span></h2><p>normalText</p></div>"; + + TestUtils.banner("TEST: convert()"); + System.out.format("\nTesting xwiki/2.0 -> xhtml/1.0 conversion\n"); + System.out.format("Input text:\n%s", inputXWiki); + + String outputXhtml = rpc.convert(inputXhtml, "xwiki/2.0", "xhtml/1.0"); + + System.out.format("\nOutput text:\n%s", outputXhtml); + + Assert.assertNotNull(outputXhtml); + Assert.assertFalse(outputXhtml.equals(""));
You could also test some generated markup here.
+ Assert.assertTrue(outputXhtml.contains("strong")); + Assert.assertTrue(outputXhtml.contains("normalText")); + Assert.assertTrue(outputXhtml.contains("ItalicText")); + + System.out.format("\nTesting xhtml/1.0 -> xwiki/2.0 conversion\n"); + System.out.format("Input text:\n%s", inputXhtml); + + String outputXWiki = rpc.convert(inputXhtml, "xhtml/1.0", "xwiki/2.0"); + + System.out.format("\nOutput text:\n%s\n", outputXWiki); + + Assert.assertNotNull(outputXWiki); + Assert.assertFalse(outputXhtml.equals("")); + Assert.assertTrue(outputXhtml.contains("normalText")); + Assert.assertTrue(outputXhtml.contains("ItalicText")); + } + + public void testGetRenderedContent() throws XmlRpcException + { + String pageContent = "**Text in Bold**{{velocity}}VelocityCode{{/velocity}}"; + + XWikiPage page = new XWikiPage(); + page.setId(TestConstants.TEST_PAGE); + page.setContent(pageContent); + page.setSyntaxId("xwiki/2.0"); + + TestUtils.banner("TEST: getRenderedContent()"); + System.out.format("\nCalling getRenderedContent for page %s\n", page.getId()); + System.out.format("\nWiki content is:\n%s\n", pageContent); + + rpc.storePage(page); + + try { + String renderedContent = rpc.getRenderedContent(page.getId(), "annotatedxhtml/1.0"); + + System.out.format("\nObtained rendered content:\n%s\n\n", renderedContent); + + Assert.assertTrue(renderedContent.contains("Text in Bold")); + Assert.assertTrue(renderedContent.contains("startmacro")); + } finally { + rpc.removePage(page.getId()); + } + } + + public void testRenderPageContent() throws XmlRpcException + { + String pageContent = "**Text in Bold**{{velocity}}VelocityCode{{/velocity}}"; + + XWikiPage page = new XWikiPage(); + page.setId(TestConstants.TEST_PAGE); + page.setContent(pageContent); + page.setSyntaxId("xwiki/2.0"); + + TestUtils.banner("TEST: renderPageContent"); + System.out.format("\nCalling renderPageContent with context as page %s\n", TestConstants.TEST_PAGE); + System.out.format("\nWiki content is:\n%s\n", pageContent); + + rpc.storePage(page); + + try { + String renderedContent = + rpc.renderPageContent(page.getId(), page.getContent(), page.getSyntaxId(), "annotatedxhtml/1.0"); + + System.out.format("\nObtained rendered content:\n%s\n\n", renderedContent); + + Assert.assertTrue(renderedContent.contains("Text in Bold")); + Assert.assertTrue(renderedContent.contains("startmacro")); + } finally { + rpc.removePage(page.getId()); + } + } +}
Modified: platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java =================================================================== --- platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java 2009-11-26 11:14:42 UTC (rev 25287) +++ platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/xmlrpc/XWikiXmlRpcApiImpl.java 2009-11-26 15:28:25 UTC (rev 25288) @@ -1455,4 +1455,47 @@ } return syntaxes; } + + /** + * Renders a text in the context of a wiki page. + * + * @param token The authentication token. + * @param pageId The id of the page. + * @param content The context to be rendered. + * @param sourceSyntaxId The syntax of the content. + * @param targetSyntaxId The target syntax of the rendered content + * @return The rendered content. + * @throws Exception If a invalid token is provided, an unsupported syntax id is given or the rendering fails. + */
Make sure a user can't use the programming rights of a page to interpret his own text.
+ public String renderPageContent(String token, String pageId, String content, String sourceSyntaxId, + String targetSyntaxId) throws Exception + { + XWikiXmlRpcUser user = XWikiUtils.checkToken(token, this.xwikiContext); + LOG.debug(String.format("User %s has called renderPageContent()", user.getName())); + + Document doc = XWikiUtils.getDocument(this.xwikiApi, pageId, true); + + return doc.getRenderedContent(content, sourceSyntaxId, targetSyntaxId); + } + + /** + * Gets the rendered content of an existing document. + * + * @param token The authentication token. + * @param pageId The id of the page. + * @param syntaxId The target syntax of the rendered content + * @return The rendered content + * @throws Exception If a invalid token is provided, an unsupported syntax id is given or the rendering fails. + */ + public String getRenderedContent(String token, String pageId, String syntaxId) throws Exception + { + XWikiXmlRpcUser user = XWikiUtils.checkToken(token, this.xwikiContext); + LOG.debug(String.format("User %s has called getRenderedContent()", user.getName())); + + Document doc = XWikiUtils.getDocument(this.xwikiApi, pageId, true); + SyntaxFactory syntaxFactory = Utils.getComponent(SyntaxFactory.class); + Syntax syntax = syntaxFactory.createSyntaxFromIdString(syntaxId); + + return doc.getRenderedContent(syntax); + } }
-- Sergiu Dumitriu http://purl.org/net/sergiu/