From 2e6c43bcddd45b269a4e273692e5e610c64675ce Mon Sep 17 00:00:00 2001 From: polx Date: Mon, 22 Aug 2016 13:41:04 +0200 Subject: [PATCH] XWIKI-13643 XAR source projects should allow source files. Paul --- .../src/main/java/org/xwiki/tool/xar/XARMojo.java | 132 ++++++++++++++++++--- .../org/xwiki/tool/xar/ProcessIncludesTest.java | 95 +++++++++++++++ .../src/test/resources/org/xwiki/tool/.DS_Store | Bin 0 -> 6148 bytes .../org/xwiki/tool/xar/binaryIncludeProof.xml | 14 +++ .../org/xwiki/tool/xar/binaryIncludeTest.xml | 14 +++ .../resources/org/xwiki/tool/xar/spreadsheet.xls | Bin 0 -> 6656 bytes .../org/xwiki/tool/xar/textIncludeProof.xml | 4 + .../org/xwiki/tool/xar/textIncludeTest.xml | 4 + .../org/xwiki/tool/xar/xIncludeTIncludedText.txt | 1 + .../org/xwiki/tool/xar/xIncludeXIncludedXML.xml | 6 + .../org/xwiki/tool/xar/xIncludeXProof.xml | 10 ++ .../resources/org/xwiki/tool/xar/xIncludeXTest.xml | 5 + .../org/xwiki/tool/xar/xincludeTProof.xml | 4 + .../resources/org/xwiki/tool/xar/xincludeTTest.xml | 4 + 14 files changed, 276 insertions(+), 17 deletions(-) create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/java/org/xwiki/tool/xar/ProcessIncludesTest.java create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/.DS_Store create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/binaryIncludeProof.xml create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/binaryIncludeTest.xml create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/spreadsheet.xls create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/textIncludeProof.xml create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/textIncludeTest.xml create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeTIncludedText.txt create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeXIncludedXML.xml create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeXProof.xml create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeXTest.xml create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xincludeTProof.xml create mode 100644 xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xincludeTTest.xml diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/main/java/org/xwiki/tool/xar/XARMojo.java b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/main/java/org/xwiki/tool/xar/XARMojo.java index 0e4ff02..10a167f 100644 --- a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/main/java/org/xwiki/tool/xar/XARMojo.java +++ b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/main/java/org/xwiki/tool/xar/XARMojo.java @@ -19,18 +19,13 @@ */ package org.xwiki.tool.xar; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FilenameFilter; -import java.io.OutputStream; -import java.util.Collection; -import java.util.LinkedList; -import java.util.List; -import java.util.Queue; -import java.util.Set; +import java.io.*; +import java.util.*; +import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.maven.artifact.Artifact; +import org.apache.maven.model.Resource; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; @@ -38,14 +33,17 @@ import org.apache.maven.plugins.annotations.ResolutionScope; import org.codehaus.plexus.archiver.ArchiveEntry; import org.codehaus.plexus.archiver.zip.ZipArchiver; -import org.dom4j.Document; -import org.dom4j.Element; -import org.dom4j.Node; +import org.dom4j.*; import org.dom4j.dom.DOMDocument; import org.dom4j.dom.DOMElement; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; +import org.dom4j.tree.DefaultCDATA; +import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; +import org.xml.sax.XMLReader; import org.xwiki.tool.xar.internal.XWikiDocument; /** @@ -166,6 +164,10 @@ public boolean accept(File dir, String name) private void performTransformations() throws Exception { + + // load the XML using a reader that can do XInclude + SAXReader reader = new SAXReader(); + if (this.transformations == null) { return; } @@ -173,8 +175,6 @@ private void performTransformations() throws Exception // Copy XML pages from dependent XAR if we modify them. unpackTransformedXARs(); - SAXReader reader = new SAXReader(); - // For each defined file, perform the transformation asked for (Transformation transformation : this.transformations) { File file = new File(this.project.getBuild().getOutputDirectory(), transformation.getFile()); @@ -391,7 +391,32 @@ private void addFilesToArchive(ZipArchiver archiver, File sourceDir) throws Exce generatedPackageFile.delete(); } - archiver.addDirectory(sourceDir, getIncludes(), getExcludes()); + // Next, we scan the whole directory and subdirectories for documents. + + Queue fileQueue = new LinkedList(); + addContentsToQueue(fileQueue, sourceDir); + while (!fileQueue.isEmpty() ) { + File currentFile = fileQueue.poll(); + if (currentFile.isDirectory()) { + addContentsToQueue(fileQueue, currentFile); + } else { + String documentReference = XWikiDocument.getReference(currentFile); + File processedFile = processIncludesOnFile(currentFile); + // building the path the current file will have within the archive + // + // Note: DO NOT USE String.split since it requires a regexp. Under Windows XP, the FileSeparator is + // '\' when not escaped is a special character of the regexp + // String archivedFilePath = + // currentFile.getAbsolutePath().split(sourceDir.getAbsolutePath() + File.separator)[1]; + String archivedFilePath = currentFile.getAbsolutePath().substring( + (sourceDir.getAbsolutePath() + File.separator).length()); + archivedFilePath = archivedFilePath.replace(File.separatorChar, '/'); + + archiver.addFile(processedFile, archivedFilePath); + processedFile.deleteOnExit(); + } + } + generatePackageXml(generatedPackageFile, archiver.getFiles().values()); archiver.addFile(generatedPackageFile, PACKAGE_XML); } @@ -416,7 +441,7 @@ private void addFilesToArchive(ZipArchiver archiver, File sourceDir, File packag throw e; } - // Next, we scan the hole directory and subdirectories for documents. + // Next, we scan the whole directory and subdirectories for documents. Queue fileQueue = new LinkedList(); addContentsToQueue(fileQueue, sourceDir); @@ -427,6 +452,7 @@ private void addFilesToArchive(ZipArchiver archiver, File sourceDir, File packag } else { String documentReference = XWikiDocument.getReference(currentFile); if (documentNames.contains(documentReference)) { + File processedFile = processIncludesOnFile(currentFile); // building the path the current file will have within the archive // // Note: DO NOT USE String.split since it requires a regexp. Under Windows XP, the FileSeparator is @@ -437,8 +463,9 @@ private void addFilesToArchive(ZipArchiver archiver, File sourceDir, File packag (sourceDir.getAbsolutePath() + File.separator).length()); archivedFilePath = archivedFilePath.replace(File.separatorChar, '/'); - archiver.addFile(currentFile, archivedFilePath); + archiver.addFile(processedFile, archivedFilePath); documentNames.remove(documentReference); + processedFile.deleteOnExit(); } } } @@ -455,6 +482,77 @@ private void addFilesToArchive(ZipArchiver archiver, File sourceDir, File packag archiver.addFile(packageXml, PACKAGE_XML); } + File processIncludesOnFile(File sourceFile) throws IOException, DocumentException { + File tmp = File.createTempFile("includeProcessed_", ".xml"); + + // load the XML using a reader that can do XInclude + SAXReader reader = new SAXReader() { + @Override + protected XMLReader createXMLReader() throws SAXException { + XMLReader xmlReader = super.createXMLReader(); + try { + xmlReader.setFeature("http://apache.org/xml/features/xinclude", true); + } catch (SAXNotRecognizedException e) { + e.printStackTrace(); + } catch (SAXNotSupportedException e) { + e.printStackTrace(); + } + return xmlReader; + } + }; + + + // parse (with XInclude), process textInclude and binaryInclude + Document document = reader.read(sourceFile); + String charset = document.getXMLEncoding(); + + // get rid of xml:base if it start with file... it will not be portable + List nodes = document.selectNodes(".//*[@xml:base!='']"); + if(nodes!=null) { + for(Object n: nodes) { + Element elt = (Element) n; + Attribute att = elt.attribute(new QName("base", Namespace.XML_NAMESPACE)); + if(att.getValue().startsWith("file:")) elt.remove(att); + } + } + + // perform textInclude and binaryInclude + nodes = document.selectNodes(".//*[local-name()='binaryInclude' or local-name()='textInclude']"); + for(Object n: nodes) { + Element includeElt = (Element) n; + File referencedFile = null, projectBase = project.getBasedir(); + if(includeElt.attribute("href") ==null) + throw new IllegalArgumentException("includeElement without href!"); + referencedFile = + new File(sourceFile.getParentFile(), includeElt.attributeValue("href").replaceAll("/", File.separator)); + // check it's within the project + boolean isWithinProject = false; + if(projectBase!=null) for(File f = referencedFile; f.toString().length()>4; f = f.getParentFile()) { + if(projectBase.equals(f)) { + isWithinProject = true; break; + } + } + if(projectBase!=null && !isWithinProject) + throw new IllegalArgumentException("Referenced file " + includeElt.attribute("href") + " not in project."); + + // replace by included content + Element parent = includeElt.getParent(); + List children = parent.content(); + int i = children.indexOf(includeElt); + if("textInclude".equals(includeElt.getName())) { + children.set(i, new DefaultCDATA(parent, + FileUtils.readFileToString(referencedFile, charset))); + } else if ("binaryInclude".equals(includeElt.getName())) { + children.set(i, new DefaultCDATA(parent, + Base64.getEncoder().encodeToString(FileUtils.readFileToByteArray(referencedFile)))); + } + } + XMLWriter writer = new XMLWriter(new FileOutputStream(tmp)); + writer.write(document); + writer.flush(); writer.close(); + return tmp; + } + /** * Adds the contents of a specific directory to a queue of files. * diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/java/org/xwiki/tool/xar/ProcessIncludesTest.java b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/java/org/xwiki/tool/xar/ProcessIncludesTest.java new file mode 100644 index 0000000..4c41f1d --- /dev/null +++ b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/java/org/xwiki/tool/xar/ProcessIncludesTest.java @@ -0,0 +1,95 @@ +package org.xwiki.tool.xar; + +import org.apache.commons.io.FileUtils; +import org.apache.maven.project.MavenProject; +import org.junit.Test; + +import java.io.File; +import java.io.InputStream; +import java.util.Arrays; +import java.util.List; + +/** + * Unit test for the method {@link XARMojo#processIncludesOnFile(File)}. + */ +public class ProcessIncludesTest { + + public void setUp() { + this.xarMojo = new XARMojo(); + xarMojo.project = new MavenProject(); + mockDir = new File(new File("target"), "mockDir"); + + xarMojo.project.setParentFile(new File("target")); + } + + private File mockDir; + private XARMojo xarMojo; + + @Test + public void testProcessXIncludeText() throws Throwable { + setUp(); + testProcess("xIncludeTTest.xml", + Arrays.asList("xIncludeTIncludedText.txt"), + "xIncludeTProof.xml"); + } + + @Test + public void testProcessXIncludeXML() throws Throwable { + setUp(); + testProcess("xIncludeXTest.xml", + Arrays.asList("xIncludeXIncludedXML.xml"), + "xIncludeXProof.xml"); + } + + @Test + public void testProcessTextInclude() throws Throwable { + setUp(); + testProcess("textIncludeTest.xml", + Arrays.asList("xIncludeTIncludedText.txt"), + "textIncludeProof.xml"); + } + + @Test + public void testProcessBase64Include() throws Throwable { + setUp(); + testProcess("binaryIncludeTest.xml", + Arrays.asList("spreadsheet.xls"), + "binaryIncludeProof.xml"); + } + + private File copyResource(String resourceName) throws Throwable { + File file = new File(mockDir, resourceName); + InputStream inputStream = this.getClass().getResourceAsStream(resourceName); + if(inputStream==null) throw new IllegalArgumentException("No such resource \"" + resourceName + "\"."); + FileUtils.copyInputStreamToFile(inputStream, file); + return file; + } + + + private void testProcess(String source, List alsoCopy, String expectedRsrc) throws Throwable { + File sourceFile = copyResource(source); + for(Object o: alsoCopy) { + copyResource((String) o); + } + + File result = xarMojo.processIncludesOnFile(sourceFile); + + String expected = FileUtils.readFileToString( + copyResource(expectedRsrc), "utf-8"); + String obtained = FileUtils.readFileToString(result, "utf-8"); + if(! expected.trim().equals(obtained.trim())) { + System.err.println("Expected: " + expected); + File tempFile = File.createTempFile("expected_", ".xml"); + FileUtils.writeStringToFile(tempFile, expected, "utf-8"); + System.err.println("Saved in " + tempFile); + + System.err.println("Obtained: " + obtained); + tempFile = File.createTempFile("obtained_" , ".xml"); + FileUtils.writeStringToFile(tempFile, obtained, "utf-8"); + System.err.println("Saved in " + tempFile); + throw new Exception("Results are not equal."); + } + + } + +} diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/.DS_Store b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ff5ac46b1786524b55c0a15c802830b01fccb6d0 GIT binary patch literal 6148 zcmeHK&5GMF5SEf`Yd34~VG9dwLHFj6W!r9!Cf!_0p#g{Np<7ZJi;cj@i|r&`LcpiK zKp&$I&KptOt=|jq*In@&r0}lJkvd=h#LDaP6Ap72%{v7MIsAlV#QIex;3OYv;yI&%f2) z4cbAt8wA0Nc$zQbidVC;&x=WTHic2L5UC-1wJ&`KS7yW#u((?3j;YoOVSco~K4!IIzS;|CavbxYkZJ@S? zyqdyfUZ{M}pM?9%&O@BWi%v1I0hU8Tg`yow7m9KKc#y($ADwt ze=vai0|P~jEY=3~)&ULvKH_)_5e00#OCU0fk;U2|jDS#+3TRTPy<$+44t{3iB8#;_ zlTN6f8S2=XslB04Jv;cB4kt7+=vv2sW8f+SP16nW{2%=N{(m*e^&A6^fosJ8Z5_wQ zeRw5%wr;!}p0y10B`6BU)dqj3fT53Kh{dCLA5;tY85)3*#o8cvK-`ajrolCifq%-t EFF3Jp!~g&Q literal 0 HcmV?d00001 diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/binaryIncludeProof.xml b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/binaryIncludeProof.xml new file mode 100644 index 0000000..4ea8420 --- /dev/null +++ b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/binaryIncludeProof.xml @@ -0,0 +1,14 @@ + + +content + + spreadsheet.xls + application/vnd.ms-excel + XWiki.Admin + 1466349620000 + 1.1 + + + 6656 + + diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/binaryIncludeTest.xml b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/binaryIncludeTest.xml new file mode 100644 index 0000000..72dc5a5 --- /dev/null +++ b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/binaryIncludeTest.xml @@ -0,0 +1,14 @@ + + +content + + spreadsheet.xls + application/vnd.ms-excel + XWiki.Admin + 1466349620000 + 1.1 + + + 6656 + + diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/spreadsheet.xls b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/spreadsheet.xls new file mode 100644 index 0000000000000000000000000000000000000000..b4976333721e77bd0eae6466e463c22265d08a26 GIT binary patch literal 6656 zcmeHLZETZO6h80Uc61-mZhWYG`7)twtV6bG#OSsTHa-$Q798;piFT#k3LQ23Nc4xX z4EbXq(Lka zno=a4@uHOecj_~%KfeQa+ABVH?my!<G^Zl;_<^uBoAAl4f^*{qKA6Nh^ z1Qr4J0QUm-0gHhpz*1ltupGD_uz(dnBk%yQ5?BQUfYm?~&r}98_42iWK6;CC< z;16YwsU918yZkBasm0~l zl-uVPy$_i}esd9iun2!m5q|Zwe1Rtv&gYnk*qo9qYk$h6>iSfbsvA;nRnJe&QT2k9 zC;K#f+>pbF&}SIbagy5H24E)X+UO;5vs3AYf zKF0mbAiGLchVhw6fhw3k2zn<$?_!bz+qgfb+{uQHP$vv@I> z7n#HRJCaMpyHFxLg4)E)LNb|-blCFW61M7~bT1~zrPr$o_@U~Lx37M)eXzg#DaB8L zlcQDKRLROgJUQoHqa<2XIjQ6$AUYOqa)!&W1y`)(6bO(3^{GO zhyCH9s1@ixq=tG?l>w;jP;|L_wWHmH_Mz4bldTsr-OY~nNomB%doLEk-=qYMpplc$ z)rRcG*tPP!%FALLuVqdKnat06=XL2dxxZ}N*EGW?eA>_#{w^nAYQL;+-ddXzqJ95=~f-KGHf69*iOtBZ!J@h{t03$f{+^E)m+a z(y}GBzzqZ?My*0($h>&?^`Ecp9QL1j#VakVKlqlR^DK}Hsaw!SghasAykXQlMx+3S zxg!AYjjsW)7f!tT{&*TSHD121?}E%*{o#p(wJkn4I2w%%kKdk8S>F3XKGwNNbixii6Q=kf0rVukK8?zL8C2h)_G@Mt zWdnAb`%OR0rPxx$=g=`hhHQl95!`ThVh;N>vy77ZxgP2!l_J`TPFwAc2J|K*T8h}T zeQKazYu4qooeG!_;y=IDkUa8)Okn*ZxbgDa-&TADj47LtGme{Z5}e}HWb0=zE_MBk sBUkJpJvcEYC8FjKRbL>>o6q_gtp6eCMu@2xmAn7W?{Afu#NW~XC+*>bp8x;= literal 0 HcmV?d00001 diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/textIncludeProof.xml b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/textIncludeProof.xml new file mode 100644 index 0000000..845edd3 --- /dev/null +++ b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/textIncludeProof.xml @@ -0,0 +1,4 @@ + + + + diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/textIncludeTest.xml b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/textIncludeTest.xml new file mode 100644 index 0000000..a0bc22a --- /dev/null +++ b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/textIncludeTest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeTIncludedText.txt b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeTIncludedText.txt new file mode 100644 index 0000000..80fe93a --- /dev/null +++ b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeTIncludedText.txt @@ -0,0 +1 @@ +This is an included Text with & and <. \ No newline at end of file diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeXIncludedXML.xml b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeXIncludedXML.xml new file mode 100644 index 0000000..73a9cf8 --- /dev/null +++ b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeXIncludedXML.xml @@ -0,0 +1,6 @@ + + Space.Name + 0 + XWiki.WikiMacroClass + d60367cb-c227-4b75-b056-25018a8c95bc + diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeXProof.xml b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeXProof.xml new file mode 100644 index 0000000..9665d42 --- /dev/null +++ b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeXProof.xml @@ -0,0 +1,10 @@ + + + + Space.Name + 0 + XWiki.WikiMacroClass + d60367cb-c227-4b75-b056-25018a8c95bc + + content + diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeXTest.xml b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeXTest.xml new file mode 100644 index 0000000..e774013 --- /dev/null +++ b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xIncludeXTest.xml @@ -0,0 +1,5 @@ + + + + content + diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xincludeTProof.xml b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xincludeTProof.xml new file mode 100644 index 0000000..82ec66e --- /dev/null +++ b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xincludeTProof.xml @@ -0,0 +1,4 @@ + + + This is an included Text with & and <. + diff --git a/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xincludeTTest.xml b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xincludeTTest.xml new file mode 100644 index 0000000..161def6 --- /dev/null +++ b/xwiki-commons-tools/xwiki-commons-tool-xar/xwiki-commons-tool-xar-plugin/src/test/resources/org/xwiki/tool/xar/xincludeTTest.xml @@ -0,0 +1,4 @@ + + + + -- 2.6.4 (Apple Git-63)