diff --git a/tests/tests.pro b/tests/tests.pro
index c8eae29..483a3f0 100644
--- a/tests/tests.pro
+++ b/tests/tests.pro
@@ -5,6 +5,7 @@ SUBDIRS = \
testutils/sandboxhook.pro \
ut_coreconfig \
ut_rndssucli \
+ ut_sandbox \
ut_settings \
ut_ssuurlresolver \
ut_urlresolver \
diff --git a/tests/tests.xml b/tests/tests.xml
index baaec5d..a28ebbc 100644
--- a/tests/tests.xml
+++ b/tests/tests.xml
@@ -13,6 +13,11 @@
/opt/tests/ssu/runtest.sh ut_rndssucli
+
+
+ /opt/tests/ssu/runtest.sh ut_sandbox
+
+
/opt/tests/ssu/runtest.sh ut_settings
diff --git a/tests/ut_sandbox/main.cpp b/tests/ut_sandbox/main.cpp
new file mode 100644
index 0000000..2dae6a3
--- /dev/null
+++ b/tests/ut_sandbox/main.cpp
@@ -0,0 +1,19 @@
+/**
+ * @file main.cpp
+ * @copyright 2012 Jolla Ltd.
+ * @author Martin Kampas
+ * @date 2012
+ */
+
+#include
+
+#include "sandboxtest.h"
+
+int main(int argc, char **argv){
+ SandboxTest sandboxTest;
+
+ if (QTest::qExec(&sandboxTest, argc, argv))
+ return 1;
+
+ return 0;
+}
diff --git a/tests/ut_sandbox/sandboxtest.cpp b/tests/ut_sandbox/sandboxtest.cpp
new file mode 100644
index 0000000..72058cf
--- /dev/null
+++ b/tests/ut_sandbox/sandboxtest.cpp
@@ -0,0 +1,79 @@
+/**
+ * @file sandboxtest.cpp
+ * @copyright 2013 Jolla Ltd.
+ * @author Martin Kampas
+ * @date 2013
+ */
+
+#include "sandboxtest.h"
+
+#include
+
+#include "libssu/sandbox_p.h"
+
+void SandboxTest::test(){
+
+ const QDir::Filters noHidden = QDir::AllEntries | QDir::NoDotAndDotDot;
+
+ QCOMPARE(QDir(TESTS_DATA_PATH "/world").entryList(noHidden, QDir::Name),
+ QStringList()
+ << "world-and-sandbox"
+ << "world-only"
+ << "world-only-to-be-copied-into-sandbox");
+
+ QVERIFY(!QFileInfo(TESTS_DATA_PATH "/world/world-only").isWritable());
+ QCOMPARE(readAll(TESTS_DATA_PATH "/world/world-only").trimmed(),
+ QString("world/world-only"));
+
+ QVERIFY(!QFileInfo(TESTS_DATA_PATH "/world/world-and-sandbox").isWritable());
+ QCOMPARE(readAll(TESTS_DATA_PATH "/world/world-and-sandbox").trimmed(),
+ QString("world/world-and-sandbox"));
+
+ QVERIFY(!QFileInfo(TESTS_DATA_PATH "/world/world-only-to-be-copied-into-sandbox").isWritable());
+ QCOMPARE(readAll(TESTS_DATA_PATH "/world/world-only-to-be-copied-into-sandbox").trimmed(),
+ QString("world/world-only-to-be-copied-into-sandbox"));
+
+ QVERIFY(!QFileInfo(TESTS_DATA_PATH "/world/sandbox-only").exists());
+
+
+ Sandbox sandbox(TESTS_DATA_PATH "/sandbox",
+ Sandbox::UseAsSkeleton, Sandbox::ThisProcess | Sandbox::ChildProcesses);
+ sandbox.addWorldFiles(TESTS_DATA_PATH "/world", QDir::AllEntries,
+ QStringList() << "*-to-be-copied-into-sandbox");
+ QVERIFY(sandbox.activate());
+
+
+ QCOMPARE(QDir(TESTS_DATA_PATH "/world").entryList(noHidden, QDir::Name),
+ QStringList()
+ << "world-and-sandbox"
+ << "world-only"
+ << "world-only-to-be-copied-into-sandbox");
+
+ QVERIFY(!QFileInfo(TESTS_DATA_PATH "/world/world-only").isWritable());
+ QCOMPARE(readAll(TESTS_DATA_PATH "/world/world-only").trimmed(),
+ QString("world/world-only"));
+
+ QVERIFY(QFileInfo(TESTS_DATA_PATH "/world/world-and-sandbox").isWritable());
+ QCOMPARE(readAll(TESTS_DATA_PATH "/world/world-and-sandbox").trimmed(),
+ QString("sandbox/world-and-sandbox"));
+
+ QVERIFY(QFileInfo(TESTS_DATA_PATH "/world/world-only-to-be-copied-into-sandbox").isWritable());
+ QCOMPARE(readAll(TESTS_DATA_PATH "/world/world-only-to-be-copied-into-sandbox").trimmed(),
+ QString("world/world-only-to-be-copied-into-sandbox"));
+
+ QVERIFY(QFileInfo(TESTS_DATA_PATH "/world/sandbox-only").exists());
+ QVERIFY(QFileInfo(TESTS_DATA_PATH "/world/sandbox-only").isWritable());
+ QCOMPARE(readAll(TESTS_DATA_PATH "/world/sandbox-only").trimmed(),
+ QString("sandbox/sandbox-only"));
+}
+
+QString SandboxTest::readAll(const QString &fileName){
+ QFile file(fileName);
+ if (!file.open(QIODevice::ReadOnly)){
+ qWarning("%s: Failed to open file for reading: '%s': %s", Q_FUNC_INFO, qPrintable(fileName),
+ qPrintable(file.errorString()));
+ return QString();
+ }
+
+ return file.readAll();
+}
diff --git a/tests/ut_sandbox/sandboxtest.h b/tests/ut_sandbox/sandboxtest.h
new file mode 100644
index 0000000..dbb0e15
--- /dev/null
+++ b/tests/ut_sandbox/sandboxtest.h
@@ -0,0 +1,23 @@
+/**
+ * @file sandboxtest.h
+ * @copyright 2013 Jolla Ltd.
+ * @author Martin Kampas
+ * @date 2013
+ */
+
+#ifndef _SANDBOXTEST_H
+#define _SANDBOXTEST_H
+
+#include
+
+class SandboxTest: public QObject {
+ Q_OBJECT
+
+ private slots:
+ void test();
+
+ private:
+ static QString readAll(const QString &fileName);
+};
+
+#endif
diff --git a/tests/ut_sandbox/testdata/sandbox/sandbox-only b/tests/ut_sandbox/testdata/sandbox/sandbox-only
new file mode 100644
index 0000000..f34c895
--- /dev/null
+++ b/tests/ut_sandbox/testdata/sandbox/sandbox-only
@@ -0,0 +1 @@
+sandbox/sandbox-only
diff --git a/tests/ut_sandbox/testdata/sandbox/world-and-sandbox b/tests/ut_sandbox/testdata/sandbox/world-and-sandbox
new file mode 100644
index 0000000..cb58395
--- /dev/null
+++ b/tests/ut_sandbox/testdata/sandbox/world-and-sandbox
@@ -0,0 +1 @@
+sandbox/world-and-sandbox
diff --git a/tests/ut_sandbox/testdata/world/world-and-sandbox b/tests/ut_sandbox/testdata/world/world-and-sandbox
new file mode 100644
index 0000000..1e04375
--- /dev/null
+++ b/tests/ut_sandbox/testdata/world/world-and-sandbox
@@ -0,0 +1 @@
+world/world-and-sandbox
diff --git a/tests/ut_sandbox/testdata/world/world-only b/tests/ut_sandbox/testdata/world/world-only
new file mode 100644
index 0000000..43ddf9c
--- /dev/null
+++ b/tests/ut_sandbox/testdata/world/world-only
@@ -0,0 +1 @@
+world/world-only
diff --git a/tests/ut_sandbox/testdata/world/world-only-to-be-copied-into-sandbox b/tests/ut_sandbox/testdata/world/world-only-to-be-copied-into-sandbox
new file mode 100644
index 0000000..d8b09bc
--- /dev/null
+++ b/tests/ut_sandbox/testdata/world/world-only-to-be-copied-into-sandbox
@@ -0,0 +1 @@
+world/world-only-to-be-copied-into-sandbox
diff --git a/tests/ut_sandbox/ut_sandbox.pro b/tests/ut_sandbox/ut_sandbox.pro
new file mode 100644
index 0000000..03c34bb
--- /dev/null
+++ b/tests/ut_sandbox/ut_sandbox.pro
@@ -0,0 +1,23 @@
+TARGET = ut_sandbox
+include(../testapplication.pri)
+include(ut_sandbox_dependencies.pri)
+
+HEADERS = \
+ sandboxtest.h \
+
+SOURCES = \
+ main.cpp \
+ sandboxtest.cpp \
+
+test_data_world.path = $${TESTS_DATA_PATH}/world
+test_data_world.files = \
+ testdata/world/world-only \
+ testdata/world/world-and-sandbox \
+ testdata/world/world-only-to-be-copied-into-sandbox \
+
+test_data_sandbox.path = $${TESTS_DATA_PATH}/sandbox/$${test_data_world.path}
+test_data_sandbox.files = \
+ testdata/sandbox/world-and-sandbox \
+ testdata/sandbox/sandbox-only \
+
+INSTALLS += test_data_world test_data_sandbox
diff --git a/tests/ut_sandbox/ut_sandbox_dependencies.pri b/tests/ut_sandbox/ut_sandbox_dependencies.pri
new file mode 100644
index 0000000..37c741f
--- /dev/null
+++ b/tests/ut_sandbox/ut_sandbox_dependencies.pri
@@ -0,0 +1 @@
+include(../../libssu/libssu.pri)