sfx2/qa/cppunit/test_misc.cxx |  275 -----------------------------------------
 unoxml/qa/unit/rdftest.cxx    |  278 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 278 insertions(+), 275 deletions(-)

New commits:
commit 4ef2f2129b78a5997e988ef723ff8a6c66269285
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Wed Sep 18 17:11:15 2024 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Thu Sep 19 13:39:29 2024 +0200

    unoxml: move these two tests where they belong
    
    so they can make use of CPPUNIT_ASSERT_STATEMENT_EQUAL
    They were moved ported from Java to CppUnittest in
    
    commit e42be49887e75c6ec748b6c48bb4e5eda295c715
    Author: Xisco Fauli <xiscofa...@libreoffice.org>
    Date:   Wed Jul 3 10:09:54 2024 +0200
    
        tdf#123293: port test from Java to CppUnitTest
    
    and
    
    commit d6ad09ca884fb7f35e2e24d532d85f6d818a7f1b
    Author: Xisco Fauli <xiscofa...@libreoffice.org>
    Date:   Tue Jul 2 18:00:26 2024 +0200
    
        sfx2: port checkRDFa from Java to CppUnittest
    
    Change-Id: I7b91bde6d968081a5b1c0bbee42208590e062ea8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173622
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sfx2/qa/cppunit/test_misc.cxx b/sfx2/qa/cppunit/test_misc.cxx
index 60ccfea964c8..4c842df2a4f7 100644
--- a/sfx2/qa/cppunit/test_misc.cxx
+++ b/sfx2/qa/cppunit/test_misc.cxx
@@ -22,17 +22,12 @@
 #include <com/sun/star/packages/zip/ZipFileAccess.hpp>
 #include <com/sun/star/frame/Desktop.hpp>
 #include <com/sun/star/frame/XStorable.hpp>
-#include <com/sun/star/rdf/Statement.hpp>
-#include <com/sun/star/rdf/XDocumentMetadataAccess.hpp>
-#include <com/sun/star/rdf/XDocumentRepository.hpp>
-#include <com/sun/star/rdf/XRepository.hpp>
 #include <com/sun/star/text/XTextDocument.hpp>
 #include <com/sun/star/ucb/XSimpleFileAccess.hpp>
 
 #include <test/unoapixml_test.hxx>
 
 #include <unotools/ucbstreamhelper.hxx>
-#include <comphelper/sequence.hxx>
 #include <comphelper/propertysequence.hxx>
 #include <comphelper/propertyvalue.hxx>
 #include <comphelper/processfactory.hxx>
@@ -227,276 +222,6 @@ CPPUNIT_TEST_FIXTURE(MiscTest, testOverwrite)
     {
     }
 }
-
-std::vector<rdf::Statement>
-sortStatementsByPredicate(const uno::Sequence<rdf::Statement>& rStatements)
-{
-    std::vector<rdf::Statement> aStatements
-        = 
comphelper::sequenceToContainer<std::vector<rdf::Statement>>(rStatements);
-    std::sort(aStatements.begin(), aStatements.end(),
-              [](const rdf::Statement& a, const rdf::Statement& b) {
-                  return a.Predicate->getStringValue() < 
b.Predicate->getStringValue();
-              });
-    return aStatements;
-}
-
-CPPUNIT_TEST_FIXTURE(MiscTest, testRDFa)
-{
-    auto verify = [this](bool bIsExport) {
-        uno::Reference<text::XTextDocument> xTextDocument(mxComponent, 
uno::UNO_QUERY);
-        uno::Reference<container::XEnumerationAccess> 
xParaEnumAccess(xTextDocument->getText(),
-                                                                      
uno::UNO_QUERY);
-        uno::Reference<container::XEnumeration> xParaEnum = 
xParaEnumAccess->createEnumeration();
-
-        uno::Reference<rdf::XDocumentMetadataAccess> 
xDocumentMetadataAccess(mxComponent,
-                                                                             
uno::UNO_QUERY);
-        uno::Reference<rdf::XRepository> xRepo = 
xDocumentMetadataAccess->getRDFRepository();
-        uno::Reference<rdf::XDocumentRepository> xDocRepo(xRepo, 
uno::UNO_QUERY);
-        CPPUNIT_ASSERT(xDocRepo);
-
-        {
-            // RDFa: 1
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
-
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[0].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("1"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT(!xResult.Second);
-        }
-        {
-            // RDFa: 2
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
-
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[0].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("2"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT(!xResult.Second);
-        }
-
-        OUString aSubject3;
-        OUString aSubject4;
-        OUString aSubject5;
-        {
-            // RDFa: 3
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
-
-            aSubject3 = aStatements[0].Subject->getStringValue();
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("3"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT(!xResult.Second);
-        }
-        {
-            // RDFa: 4
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
-
-            aSubject4 = aStatements[0].Subject->getStringValue();
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("4"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT(!xResult.Second);
-        }
-        {
-            // RDFa: 5
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
-
-            aSubject5 = aStatements[0].Subject->getStringValue();
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("5"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT(!xResult.Second);
-        }
-
-        CPPUNIT_ASSERT(aSubject3 != aSubject4);
-        CPPUNIT_ASSERT_EQUAL(aSubject3, aSubject5);
-
-        {
-            // RDFa: 6
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-
-            std::vector<rdf::Statement> aStatements = 
sortStatementsByPredicate(xResult.First);
-            CPPUNIT_ASSERT_EQUAL(size_t(2), aStatements.size());
-
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[0].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("6"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[1].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:baz"), 
aStatements[1].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("6"), 
aStatements[1].Object->getStringValue());
-            CPPUNIT_ASSERT(!xResult.Second);
-        }
-        {
-            // RDFa: 7
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            std::vector<rdf::Statement> aStatements = 
sortStatementsByPredicate(xResult.First);
-            CPPUNIT_ASSERT_EQUAL(size_t(3), aStatements.size());
-
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[0].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("7"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[1].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:baz"), 
aStatements[1].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("7"), 
aStatements[1].Object->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[2].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[2].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("7"), 
aStatements[2].Object->getStringValue());
-            CPPUNIT_ASSERT(!xResult.Second);
-        }
-        {
-            // RDFa: 8
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
-
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[0].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("a fooish bar"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT(xResult.Second);
-        }
-        {
-            // RDFa: 9
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
-
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[0].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("a fooish bar"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT(xResult.Second);
-        }
-        {
-            // RDFa: 10
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
-
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[0].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("a fooish bar^^uri:bar"),
-                                 aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT(xResult.Second);
-        }
-        {
-            // RDFa: 11
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
-
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[0].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("11^^uri:bar"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT(!xResult.Second);
-        }
-        {
-            // RDFa: 12
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
-
-            OUString aSubject;
-            if (bIsExport)
-                aSubject = maTempFile.GetURL() + "/content.xml";
-            else
-                aSubject = createFileURL(u"TESTRDFA.odt") + "/content.xml";
-            CPPUNIT_ASSERT_EQUAL(aSubject, 
aStatements[0].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("12"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT(!xResult.Second);
-        }
-        {
-            // RDFa: 13
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
-
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[0].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("a fooish bar"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT(xResult.Second);
-        }
-        {
-            // RDFa: 14
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
-
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:foo"), 
aStatements[0].Subject->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
-            CPPUNIT_ASSERT_EQUAL(OUString("a fooish bar"), 
aStatements[0].Object->getStringValue());
-            CPPUNIT_ASSERT(xResult.Second);
-        }
-
-        // Remaining rdfs should be empty
-        do
-        {
-            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
-            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
-                = xDocRepo->getStatementRDFa(xPara);
-            uno::Sequence<rdf::Statement> aStatements = xResult.First;
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(0), aStatements.getLength());
-        } while (xParaEnum->hasMoreElements());
-    };
-
-    loadFromFile(u"TESTRDFA.odt");
-    verify(/*bIsExport*/ false);
-    saveAndReload(u"writer8"_ustr);
-    verify(/*bIsExport*/ true);
-}
-
-CPPUNIT_TEST_FIXTURE(MiscTest, testTdf123293)
-{
-    const uno::Reference<uno::XComponentContext> 
xContext(comphelper::getProcessComponentContext(),
-                                                     css::uno::UNO_SET_THROW);
-    const uno::Reference<com::sun::star::ucb::XSimpleFileAccess> xFileAccess(
-        xContext->getServiceManager()->createInstanceWithContext(
-            u"com.sun.star.ucb.SimpleFileAccess"_ustr, xContext),
-        uno::UNO_QUERY_THROW);
-    const uno::Reference<io::XInputStream> 
xInputStream(xFileAccess->openFileRead(createFileURL(u"TESTRDFA.odt") ),
-                                                   uno::UNO_SET_THROW);
-    uno::Sequence<beans::PropertyValue> aLoadArgs{ 
comphelper::makePropertyValue(
-        "InputStream", xInputStream) };
-    mxComponent = mxDesktop->loadComponentFromURL(u"private:stream"_ustr, 
u"_blank"_ustr, 0, aLoadArgs);
-    CPPUNIT_ASSERT(mxComponent.is());
-    uno::Reference<rdf::XDocumentMetadataAccess> 
xDocumentMetadataAccess(mxComponent, uno::UNO_QUERY);
-    uno::Reference<rdf::XRepository> xRepo = 
xDocumentMetadataAccess->getRDFRepository();
-    uno::Reference<rdf::XDocumentRepository> xDocRepo(xRepo, uno::UNO_QUERY);
-    CPPUNIT_ASSERT(xDocRepo);
-}
 }
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sfx2/qa/cppunit/data/TESTRDFA.odt 
b/unoxml/qa/unit/data/TESTRDFA.odt
similarity index 100%
rename from sfx2/qa/cppunit/data/TESTRDFA.odt
rename to unoxml/qa/unit/data/TESTRDFA.odt
diff --git a/unoxml/qa/unit/rdftest.cxx b/unoxml/qa/unit/rdftest.cxx
index 41e5a2d5198d..706219cb0cd2 100644
--- a/unoxml/qa/unit/rdftest.cxx
+++ b/unoxml/qa/unit/rdftest.cxx
@@ -10,6 +10,8 @@
 #include <test/unoapi_test.hxx>
 
 #include <comphelper/processfactory.hxx>
+#include <comphelper/propertyvalue.hxx>
+#include <comphelper/sequence.hxx>
 
 #include <com/sun/star/container/ElementExistException.hpp>
 #include <com/sun/star/rdf/Statement.hpp>
@@ -619,6 +621,282 @@ CPPUNIT_TEST_FIXTURE(RDFStreamTest, testRDF)
     {
     }
 }
+
+std::vector<rdf::Statement>
+sortStatementsByPredicate(const uno::Sequence<rdf::Statement>& rStatements)
+{
+    std::vector<rdf::Statement> aStatements
+        = 
comphelper::sequenceToContainer<std::vector<rdf::Statement>>(rStatements);
+    std::sort(aStatements.begin(), aStatements.end(),
+              [](const rdf::Statement& a, const rdf::Statement& b) {
+                  return a.Predicate->getStringValue() < 
b.Predicate->getStringValue();
+              });
+    return aStatements;
+}
+
+CPPUNIT_TEST_FIXTURE(RDFStreamTest, testRDFa2)
+{
+    auto verify = [this](bool bIsExport) {
+        uno::Reference<text::XTextDocument> xTextDocument(mxComponent, 
uno::UNO_QUERY);
+        uno::Reference<container::XEnumerationAccess> 
xParaEnumAccess(xTextDocument->getText(),
+                                                                      
uno::UNO_QUERY);
+        uno::Reference<container::XEnumeration> xParaEnum = 
xParaEnumAccess->createEnumeration();
+
+        uno::Reference<rdf::XDocumentMetadataAccess> 
xDocumentMetadataAccess(mxComponent,
+                                                                             
uno::UNO_QUERY);
+        uno::Reference<rdf::XRepository> xRepo = 
xDocumentMetadataAccess->getRDFRepository();
+        uno::Reference<rdf::XDocumentRepository> xDocRepo(xRepo, 
uno::UNO_QUERY);
+        CPPUNIT_ASSERT(xDocRepo);
+
+        const uno::Reference<uno::XComponentContext> xContext(
+            comphelper::getProcessComponentContext(), css::uno::UNO_SET_THROW);
+        uno::Reference<css::rdf::XURI> xFoo = rdf::URI::create(xContext, 
"uri:foo");
+        uno::Reference<css::rdf::XURI> xBase = rdf::URI::create(xContext, 
"base-uri:");
+        uno::Reference<css::rdf::XURI> xBar = rdf::URI::create(xContext, 
"uri:bar");
+        uno::Reference<css::rdf::XURI> xBaz = rdf::URI::create(xContext, 
"uri:baz");
+        uno::Reference<css::rdf::XBlankNode> xBlank = 
rdf::BlankNode::create(xContext, "_:uno");
+
+        {
+            // RDFa: 1
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
+            uno::Reference<css::rdf::XLiteral> xLit = 
rdf::Literal::create(xContext, "1");
+            rdf::Statement aFooBarLit(xFoo, xBar, xLit, nullptr);
+
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooBarLit, aStatements[0]);
+            CPPUNIT_ASSERT(!xResult.Second);
+        }
+        {
+            // RDFa: 2
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
+            uno::Reference<css::rdf::XLiteral> xLit = 
rdf::Literal::create(xContext, "2");
+            rdf::Statement aFooBarLit(xFoo, xBar, xLit, nullptr);
+
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooBarLit, aStatements[0]);
+            CPPUNIT_ASSERT(!xResult.Second);
+        }
+
+        OUString aSubject3;
+        OUString aSubject4;
+        OUString aSubject5;
+        {
+            // RDFa: 3
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
+
+            aSubject3 = aStatements[0].Subject->getStringValue();
+            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
+            CPPUNIT_ASSERT_EQUAL(OUString("3"), 
aStatements[0].Object->getStringValue());
+            CPPUNIT_ASSERT(!xResult.Second);
+        }
+        {
+            // RDFa: 4
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
+
+            aSubject4 = aStatements[0].Subject->getStringValue();
+            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
+            CPPUNIT_ASSERT_EQUAL(OUString("4"), 
aStatements[0].Object->getStringValue());
+            CPPUNIT_ASSERT(!xResult.Second);
+        }
+        {
+            // RDFa: 5
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
+
+            aSubject5 = aStatements[0].Subject->getStringValue();
+            CPPUNIT_ASSERT_EQUAL(OUString("uri:bar"), 
aStatements[0].Predicate->getStringValue());
+            CPPUNIT_ASSERT_EQUAL(OUString("5"), 
aStatements[0].Object->getStringValue());
+            CPPUNIT_ASSERT(!xResult.Second);
+        }
+
+        CPPUNIT_ASSERT(aSubject3 != aSubject4);
+        CPPUNIT_ASSERT_EQUAL(aSubject3, aSubject5);
+
+        {
+            // RDFa: 6
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            std::vector<rdf::Statement> aStatements = 
sortStatementsByPredicate(xResult.First);
+            CPPUNIT_ASSERT_EQUAL(size_t(2), aStatements.size());
+
+            uno::Reference<css::rdf::XLiteral> xLit = 
rdf::Literal::create(xContext, "6");
+            rdf::Statement aFooBarLit(xFoo, xBar, xLit, nullptr);
+            rdf::Statement aFooBazLit(xFoo, xBaz, xLit, nullptr);
+
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooBarLit, aStatements[0]);
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooBazLit, aStatements[1]);
+            CPPUNIT_ASSERT(!xResult.Second);
+        }
+        {
+            // RDFa: 7
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            std::vector<rdf::Statement> aStatements = 
sortStatementsByPredicate(xResult.First);
+            CPPUNIT_ASSERT_EQUAL(size_t(3), aStatements.size());
+
+            uno::Reference<css::rdf::XLiteral> xLit = 
rdf::Literal::create(xContext, "7");
+            rdf::Statement aFooBarLit(xFoo, xBar, xLit, nullptr);
+            rdf::Statement aFooBazLit(xFoo, xBaz, xLit, nullptr);
+            rdf::Statement aFooFooLit(xFoo, xFoo, xLit, nullptr);
+
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooBarLit, aStatements[0]);
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooBazLit, aStatements[1]);
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooFooLit, aStatements[2]);
+            CPPUNIT_ASSERT(!xResult.Second);
+        }
+        uno::Reference<css::rdf::XLiteral> xLit2 = 
rdf::Literal::create(xContext, "a fooish bar");
+        uno::Reference<css::rdf::XLiteral> xLitType
+            = rdf::Literal::createWithType(xContext, "a fooish bar", xBar);
+        rdf::Statement aFooBarLit2(xFoo, xBar, xLit2, nullptr);
+        rdf::Statement aFooBarLitType(xFoo, xBar, xLitType, nullptr);
+
+        {
+            // RDFa: 8
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
+
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooBarLit2, aStatements[0]);
+            CPPUNIT_ASSERT(xResult.Second);
+        }
+        {
+            // RDFa: 9
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
+
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooBarLit2, aStatements[0]);
+            CPPUNIT_ASSERT(xResult.Second);
+        }
+        {
+            // RDFa: 10
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
+
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooBarLitType, aStatements[0]);
+            CPPUNIT_ASSERT(xResult.Second);
+        }
+        {
+            // RDFa: 11
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
+            uno::Reference<css::rdf::XLiteral> xLitType11
+                = rdf::Literal::createWithType(xContext, "11", xBar);
+            rdf::Statement aFooBarLitType11(xFoo, xBar, xLitType11, nullptr);
+
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooBarLitType11, aStatements[0]);
+            CPPUNIT_ASSERT(!xResult.Second);
+        }
+        {
+            // RDFa: 12
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
+
+            OUString aURL;
+            if (bIsExport)
+                aURL = maTempFile.GetURL();
+            else
+                aURL = createFileURL(u"TESTRDFA.odt");
+            uno::Reference<css::rdf::XURI> xFile
+                = rdf::URI::createNS(xContext, aURL, "/content.xml");
+            uno::Reference<css::rdf::XLiteral> xLit = 
rdf::Literal::create(xContext, "12");
+            rdf::Statement aFileBarLitType(xFile, xBar, xLit, nullptr);
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFileBarLitType, aStatements[0]);
+            CPPUNIT_ASSERT(!xResult.Second);
+        }
+        {
+            // RDFa: 13
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
+
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooBarLit2, aStatements[0]);
+            CPPUNIT_ASSERT(xResult.Second);
+        }
+        {
+            // RDFa: 14
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aStatements.getLength());
+
+            CPPUNIT_ASSERT_STATEMENT_EQUAL(aFooBarLit2, aStatements[0]);
+            CPPUNIT_ASSERT(xResult.Second);
+        }
+
+        // Remaining rdfs should be empty
+        do
+        {
+            uno::Reference<rdf::XMetadatable> xPara(xParaEnum->nextElement(), 
uno::UNO_QUERY);
+            ::beans::Pair<uno::Sequence<rdf::Statement>, sal_Bool> xResult
+                = xDocRepo->getStatementRDFa(xPara);
+            uno::Sequence<rdf::Statement> aStatements = xResult.First;
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(0), aStatements.getLength());
+        } while (xParaEnum->hasMoreElements());
+    };
+
+    loadFromFile(u"TESTRDFA.odt");
+    verify(/*bIsExport*/ false);
+    saveAndReload(u"writer8"_ustr);
+    verify(/*bIsExport*/ true);
+}
+
+CPPUNIT_TEST_FIXTURE(RDFStreamTest, testTdf123293)
+{
+    const uno::Reference<uno::XComponentContext> 
xContext(comphelper::getProcessComponentContext(),
+                                                          
css::uno::UNO_SET_THROW);
+    const uno::Reference<com::sun::star::ucb::XSimpleFileAccess> xFileAccess(
+        xContext->getServiceManager()->createInstanceWithContext(
+            u"com.sun.star.ucb.SimpleFileAccess"_ustr, xContext),
+        uno::UNO_QUERY_THROW);
+    const uno::Reference<io::XInputStream> xInputStream(
+        xFileAccess->openFileRead(createFileURL(u"TESTRDFA.odt")), 
uno::UNO_SET_THROW);
+    uno::Sequence<beans::PropertyValue> aLoadArgs{ 
comphelper::makePropertyValue("InputStream",
+                                                                               
  xInputStream) };
+    mxComponent
+        = mxDesktop->loadComponentFromURL(u"private:stream"_ustr, 
u"_blank"_ustr, 0, aLoadArgs);
+    CPPUNIT_ASSERT(mxComponent.is());
+    uno::Reference<rdf::XDocumentMetadataAccess> 
xDocumentMetadataAccess(mxComponent,
+                                                                         
uno::UNO_QUERY);
+    uno::Reference<rdf::XRepository> xRepo = 
xDocumentMetadataAccess->getRDFRepository();
+    uno::Reference<rdf::XDocumentRepository> xDocRepo(xRepo, uno::UNO_QUERY);
+    CPPUNIT_ASSERT(xDocRepo);
+}
 }
 
 CPPUNIT_PLUGIN_IMPLEMENT();

Reply via email to