From 6b2def18093055290cc896023078b639d85694f6 Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Wed, 13 Mar 2019 12:48:07 +0100 Subject: tdf#123293 Add test Test for commit 0a5ca5768f56db481dd3b947b3dddaab7ed96450 Change-Id: I53b72c385d9ef4d51cefa687f07a75c9520d3e71 Reviewed-on: https://gerrit.libreoffice.org/69165 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt (cherry picked from commit e9ce7acaf5cc87a4fb40f12ea0aac8cb9df3562f) Reviewed-on: https://gerrit.libreoffice.org/69182 Reviewed-by: Thorsten Behrens (cherry picked from commit ed85a358d4aed976ec19578fbfbe00d31c6430fe) Reviewed-on: https://gerrit.libreoffice.org/76215 Tested-by: Thorsten Behrens --- qadevOOo/runner/util/DesktopTools.java | 48 ++++++++++++++++++++++++ sfx2/qa/complex/sfx2/DocumentMetadataAccess.java | 15 ++++++++ sfx2/qa/complex/sfx2/tools/TestDocument.java | 3 ++ 3 files changed, 66 insertions(+) diff --git a/qadevOOo/runner/util/DesktopTools.java b/qadevOOo/runner/util/DesktopTools.java index 1650a04fdb71..5b82a2dc3726 100644 --- a/qadevOOo/runner/util/DesktopTools.java +++ b/qadevOOo/runner/util/DesktopTools.java @@ -19,6 +19,10 @@ package util; import helper.ConfigHelper; +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.InputStream; import java.util.ArrayList; import lib.StatusException; @@ -35,9 +39,11 @@ import com.sun.star.frame.XComponentLoader; import com.sun.star.frame.XDesktop; import com.sun.star.frame.XFrame; import com.sun.star.frame.XModel; +import com.sun.star.io.XInputStream; import com.sun.star.lang.XComponent; import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.lang.XServiceInfo; +import com.sun.star.lib.uno.adapter.ByteArrayToXInputStreamAdapter; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XInterface; import com.sun.star.util.XCloseable; @@ -252,6 +258,48 @@ public class DesktopTools return oDoc; } + /** + * loads a document of from a given path using an input stream + * + * @param xMSF the MultiServiceFactory + * @param filePath the path of the document to load. + * @return the XComponent Interface of the document + */ + public static XComponent loadDocUsingStream(XMultiServiceFactory xMSF, String filePath) + { + XInputStream inputStream = null; + try { + final InputStream inputFile = new BufferedInputStream( + new FileInputStream(filePath)); + final ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + final byte[] byteBuffer = new byte[4096]; + int byteBufferLength = 0; + while ((byteBufferLength = inputFile.read(byteBuffer)) > 0) + bytes.write(byteBuffer, 0, byteBufferLength); + inputFile.close(); + inputStream = new ByteArrayToXInputStreamAdapter( + bytes.toByteArray()); + } catch (java.io.IOException e) { + e.printStackTrace(); + } + + PropertyValue[] loadProps = new PropertyValue[1]; + loadProps[0] = new PropertyValue(); + loadProps[0].Name = "InputStream"; + loadProps[0].Value = inputStream; + + XComponent oDoc = null; + try + { + oDoc = getCLoader(xMSF).loadComponentFromURL("private:stream", "_blank", 0, loadProps); + } + catch (com.sun.star.uno.Exception e) + { + throw new IllegalArgumentException("Document could not be loaded", e); + } + return oDoc; + } + /** * closes a given document * @param DocumentToClose the document to close diff --git a/sfx2/qa/complex/sfx2/DocumentMetadataAccess.java b/sfx2/qa/complex/sfx2/DocumentMetadataAccess.java index 9a0e7b8170a7..5697bba07e20 100644 --- a/sfx2/qa/complex/sfx2/DocumentMetadataAccess.java +++ b/sfx2/qa/complex/sfx2/DocumentMetadataAccess.java @@ -615,6 +615,21 @@ public class DocumentMetadataAccess } } + @Test + public void checkTdf123293() throws Exception + { + XComponent xComp = null; + try { + xComp = util.DesktopTools.loadDocUsingStream(xMSF, TestDocument.getPath("TESTRDFA.odt")); + + // Metadata was discarded when loading from stream, make sure it's there now + XRepositorySupplier xRepoSupplier = UnoRuntime.queryInterface(XRepositorySupplier.class, xComp); + assertNotNull("No metadata loaded", xRepoSupplier); + } finally { + close(xComp); + } + } + private void storeRDFa(XComponent xComp, String file) throws com.sun.star.io.IOException { System.out.println("Storing test document..."); diff --git a/sfx2/qa/complex/sfx2/tools/TestDocument.java b/sfx2/qa/complex/sfx2/tools/TestDocument.java index d10a4b0cb5d6..462c97fb99b7 100644 --- a/sfx2/qa/complex/sfx2/tools/TestDocument.java +++ b/sfx2/qa/complex/sfx2/tools/TestDocument.java @@ -26,6 +26,9 @@ public final class TestDocument { public static String getUrl(String name) { return OfficeFileUrl.getAbsolute(new File(Argument.get("tdoc"), name)); } + public static String getPath(String name) { + return new File(Argument.get("tdoc"), name).toString(); + } private TestDocument() {} } -- cgit v1.2.3