← Back to team overview

uonedb-qt team mailing list archive

[Merge] lp:~kalikiana/u1db-qt/parentPaths into lp:u1db-qt

 

Christian Dywan has proposed merging lp:~kalikiana/u1db-qt/parentPaths into lp:u1db-qt.

Commit message:
Create parent folder for full database path

Requested reviews:
  PS Jenkins bot (ps-jenkins): continuous-integration
  U1DB Qt developers (uonedb-qt)
Related bugs:
  Bug #1390166 in U1DB Qt/ QML: "out of memory when creating db in non existent directory"
  https://bugs.launchpad.net/u1db-qt/+bug/1390166

For more details, see:
https://code.launchpad.net/~kalikiana/u1db-qt/parentPaths/+merge/241085
-- 
https://code.launchpad.net/~kalikiana/u1db-qt/parentPaths/+merge/241085
Your team U1DB Qt developers is requested to review the proposed merge of lp:~kalikiana/u1db-qt/parentPaths into lp:u1db-qt.
=== modified file 'src/database.cpp'
--- src/database.cpp	2014-07-09 22:39:59 +0000
+++ src/database.cpp	2014-11-07 14:33:31 +0000
@@ -145,11 +145,16 @@
         QString absolutePath(QDir(dataPath).absoluteFilePath(path));
         QString parent(QFileInfo(absolutePath).dir().path());
         if (!QDir().mkpath(parent))
-            qWarning() << "Failed to make data folder" << parent;
+            setError(QString("Failed to make data folder %1").arg(parent));
         m_db.setDatabaseName(absolutePath);
     }
     else
-    m_db.setDatabaseName(path);
+    {
+        QDir parent(QFileInfo(path).dir());
+        if (!parent.mkpath(parent.path()))
+            setError(QString("Failed to make parent folder %1").arg(parent.path()));
+        m_db.setDatabaseName(path);
+    }
 
     if (!m_db.open())
         return setError(QString("Failed to open %1: %2").arg(path).arg(m_db.lastError().text()));

=== modified file 'tests/CMakeLists.txt'
--- tests/CMakeLists.txt	2014-01-24 14:00:15 +0000
+++ tests/CMakeLists.txt	2014-11-07 14:33:31 +0000
@@ -20,7 +20,7 @@
     ${U1DB_QT_LIBNAME}
     )
 set_target_properties(test-database PROPERTIES COMPILE_FLAGS -fPIC)
-add_test(NAME test-database COMMAND "dbus-test-runner" "--task" "${CMAKE_CURRENT_BINARY_DIR}/test-database" "-p" "-xunitxml" "-p" "-o" "-p" "test-database-xunit.xml")
+add_test(NAME test-database COMMAND "dbus-test-runner" "--task" "${CMAKE_CURRENT_BINARY_DIR}/test-database" "-p" "-xunitxml" "-p" "-o" "-p" "test-database-xunit.xml" "-p" "-o" "-p" "-,txt")
 set_property(TEST test-database PROPERTY ENVIRONMENT "LD_LIBRARY_PATH=.")
 set_property(TEST test-database PROPERTY ENVIRONMENT "QT_QPA_PLATFORM=minimal")
 add_dependencies(check test-database)

=== modified file 'tests/test-database.cpp'
--- tests/test-database.cpp	2013-04-22 13:29:20 +0000
+++ tests/test-database.cpp	2014-11-07 14:33:31 +0000
@@ -33,29 +33,54 @@
 private Q_SLOTS:
     void initTestCase()
     {
-    }
-
-    void synchronizedTest()
-    {
         while(false)
             qApp->processEvents();
+    }
 
+    void testCanSetPath()
+    {
         Database db;
         QCOMPARE(db.getPath(), QString(""));
         QSignalSpy modelReset(&db, SIGNAL(pathChanged(const QString&)));
         QTemporaryFile file;
         db.setPath(file.fileName());
         QCOMPARE(db.getPath(), file.fileName());
-
-        Index index;
-        index.setDatabase(&db);
-        index.setName("py-phone-number");
-        index.setExpression(QStringList("managers.phone_number"));
+    }
+
+    void testNonExistingParentFolder()
+    {
+        Database db;
+        QTemporaryFile file("spamXXXXXX");
+        file.setAutoRemove(false);
+        QCOMPARE(file.open(), true);
+        QString subfolder(file.fileName() + "/eggs");
+        QFile::remove(file.fileName());
+        db.setPath(subfolder);
+        QCOMPARE(db.getPath(), subfolder);
+        QVERIFY(db.lastError().isEmpty());
+    }
+
+    void testCanSetIndex()
+    {
+        Database db;
+        Index index;
+        index.setDatabase(&db);
+        index.setName("py-name-phone");
+        index.setExpression(QStringList() << "gents.name" << "gents.phone");
+    }
+
+    void testCanSetQuery()
+    {
+        Database db;
+        Index index;
+        index.setDatabase(&db);
+        index.setName("by-date");
+        index.setExpression(QStringList() << "date" << "sports" << "software");
 
         Query query;
         query.setIndex(&index);
-        query.setQuery("*");
-     }
+        query.setQuery(QStringList() << "2014*" << "basketball" << "linux");
+    }
 
     void cleanupTestCase()
     {