[Libreoffice-commits] core.git: dbaccess/CppunitTest_dbaccess_firebird_test.mk dbaccess/qa include/unotools unotools/source

Stephan Bergmann sbergman at redhat.com
Fri Dec 15 22:03:39 UTC 2017


 dbaccess/CppunitTest_dbaccess_firebird_test.mk |    1 
 dbaccess/qa/unit/dbtest_base.cxx               |   29 +++++++++++++++++++++++--
 dbaccess/qa/unit/firebird.cxx                  |    3 +-
 include/unotools/tempfile.hxx                  |    5 +---
 unotools/source/ucbhelper/tempfile.cxx         |    9 +++++++
 5 files changed, 41 insertions(+), 6 deletions(-)

New commits:
commit 15d134b4f57e66faa8bcf538a08db98dc9204c54
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Fri Dec 15 15:26:27 2017 +0100

    Make temp copy of dbaccess/qa/unit/data/firebird_empty.odb for testing
    
    ...in CppunitTest_dbaccess_firebird_test.  Otherwise, the test would fail with
    
    > Test name: FirebirdTest::testEmptyDBConnection
    > An uncaught exception of type com.sun.star.sdbc.SQLException
    > - The connection can not be established. No storage or URL was given.
    
    if dbaccess/qa/unit/data/firebird_empty.odb is read-only, as
    DocumentStorageAccess::impl_openSubStorage_nothrow
    (dbaccess/source/core/dataaccess/ModelImpl.cxx) takes
    m_pModelImplementation->m_bDocumentReadOnly into account and returns a null
    xStorage.
    
    Adds a move ctor to utl::TempFile (thus causing copy ctor and copy assignment op
    to be implicitly deleted), but leaves any move assignment op undeclared for now,
    as none happens to be needed (yet).
    
    Change-Id: I6f9eff07eb54f1364a0560ffa4cf1f676a319d16
    Reviewed-on: https://gerrit.libreoffice.org/46561
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/dbaccess/CppunitTest_dbaccess_firebird_test.mk b/dbaccess/CppunitTest_dbaccess_firebird_test.mk
index 5652e6622d76..5065520993e2 100644
--- a/dbaccess/CppunitTest_dbaccess_firebird_test.mk
+++ b/dbaccess/CppunitTest_dbaccess_firebird_test.mk
@@ -25,6 +25,7 @@ $(eval $(call gb_CppunitTest_use_libraries,dbaccess_firebird_test, \
     svt \
     test \
     unotest \
+    utl \
     xo \
 ))
 
diff --git a/dbaccess/qa/unit/dbtest_base.cxx b/dbaccess/qa/unit/dbtest_base.cxx
index 86914faee5c2..3541715f6b49 100644
--- a/dbaccess/qa/unit/dbtest_base.cxx
+++ b/dbaccess/qa/unit/dbtest_base.cxx
@@ -7,9 +7,13 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include <sal/config.h>
+
+#include <cppunit/TestAssert.h>
+
 #include <comphelper/processfactory.hxx>
 #include <test/unoapi_test.hxx>
-
+#include <unotools/tempfile.hxx>
 #include <com/sun/star/sdb/XOfficeDatabaseDocument.hpp>
 #include <com/sun/star/sdbc/XConnection.hpp>
 #include <com/sun/star/sdbc/XDataSource.hpp>
@@ -25,20 +29,41 @@ class DBTestBase
 public:
     DBTestBase() : UnoApiTest("dbaccess/qa/unit/data") {};
 
+    utl::TempFile createTempCopy(OUString const & pathname);
+
     uno::Reference< XOfficeDatabaseDocument >
         getDocumentForFileName(const OUString &sFileName);
 
+    uno::Reference<XOfficeDatabaseDocument> getDocumentForUrl(OUString const & url);
+
     uno::Reference< XConnection >
         getConnectionForDocument(
             uno::Reference< XOfficeDatabaseDocument > const & xDocument);
 };
 
+utl::TempFile DBTestBase::createTempCopy(OUString const & pathname) {
+    OUString url;
+    createFileURL(pathname, url);
+    utl::TempFile tmp;
+    tmp.EnableKillingFile();
+    auto const e = osl::File::copy(url, tmp.GetURL());
+    CPPUNIT_ASSERT_EQUAL_MESSAGE(
+        (OUStringToOString("<" + url + "> -> <" + tmp.GetURL() + ">", RTL_TEXTENCODING_UTF8)
+         .getStr()),
+        osl::FileBase::E_None, e);
+    return tmp;
+}
+
 uno::Reference< XOfficeDatabaseDocument >
     DBTestBase::getDocumentForFileName(const OUString &sFileName)
 {
     OUString sFilePath;
     createFileURL(sFileName, sFilePath);
-    uno::Reference< lang::XComponent > xComponent (loadFromDesktop(sFilePath));
+    return getDocumentForUrl(sFilePath);
+}
+
+uno::Reference<XOfficeDatabaseDocument> DBTestBase::getDocumentForUrl(OUString const & url) {
+    uno::Reference< lang::XComponent > xComponent (loadFromDesktop(url));
     CPPUNIT_ASSERT(xComponent.is());
 
     uno::Reference< XOfficeDatabaseDocument > xDocument(xComponent, UNO_QUERY);
diff --git a/dbaccess/qa/unit/firebird.cxx b/dbaccess/qa/unit/firebird.cxx
index 16a4fb60e800..f7361ac76548 100644
--- a/dbaccess/qa/unit/firebird.cxx
+++ b/dbaccess/qa/unit/firebird.cxx
@@ -51,8 +51,9 @@ void FirebirdTest::setUp()
  */
 void FirebirdTest::testEmptyDBConnection()
 {
+    auto const tmp = createTempCopy("firebird_empty.odb");
     uno::Reference< XOfficeDatabaseDocument > xDocument =
-        getDocumentForFileName("firebird_empty.odb");
+        getDocumentForUrl(tmp.GetURL());
 
     getConnectionForDocument(xDocument);
 
diff --git a/include/unotools/tempfile.hxx b/include/unotools/tempfile.hxx
index 9f5ac4c45dab..791b51573f29 100644
--- a/include/unotools/tempfile.hxx
+++ b/include/unotools/tempfile.hxx
@@ -49,9 +49,6 @@ class UNOTOOLS_DLLPUBLIC TempFile
     bool        bIsDirectory;
     bool        bKillingFileEnabled;
 
-    TempFile( const TempFile& ) = delete;
-    TempFile& operator=(const TempFile&) = delete;
-
 public:
                     /**
                     Create a temporary file or directory, in the default tempfile folder or if possible in a given folder.
@@ -72,6 +69,8 @@ public:
                     TempFile( const OUString& rLeadingChars, bool _bStartWithZero=true, const OUString* pExtension=nullptr,
                               const OUString* pParent=nullptr, bool bCreateParentDirs=false );
 
+                    TempFile(TempFile && other);
+
                     /**
                     TempFile will be removed from disk in dtor if EnableKillingFile(true) was called before.
                     Temporary directories will be removed recursively in that case.
diff --git a/unotools/source/ucbhelper/tempfile.cxx b/unotools/source/ucbhelper/tempfile.cxx
index 4df84af0cb6a..eb099a43dca9 100644
--- a/unotools/source/ucbhelper/tempfile.cxx
+++ b/unotools/source/ucbhelper/tempfile.cxx
@@ -20,6 +20,7 @@
 #include <sal/config.h>
 
 #include <cassert>
+#include <utility>
 
 #include <com/sun/star/ucb/UniversalContentBroker.hpp>
 #include <comphelper/processfactory.hxx>
@@ -366,6 +367,14 @@ TempFile::TempFile( const OUString& rLeadingChars, bool _bStartWithZero,
                             true, true, bCreateParentDirs );
 }
 
+TempFile::TempFile(TempFile && other):
+    aName(std::move(other.aName)), pStream(other.pStream), bIsDirectory(other.bIsDirectory),
+    bKillingFileEnabled(other.bKillingFileEnabled)
+{
+    other.pStream = nullptr;
+    other.bKillingFileEnabled = false;
+}
+
 TempFile::~TempFile()
 {
     delete pStream;


More information about the Libreoffice-commits mailing list