linuxdeploy/tests/core/test_appdir.cpp
2018-10-25 01:16:05 +02:00

130 lines
4.5 KiB
C++

#include "gtest/gtest.h"
#include "linuxdeploy/core/appdir.h"
using namespace linuxdeploy::core::appdir;
using namespace linuxdeploy::core::desktopfile;
using namespace boost::filesystem;
namespace AppDirTest {
class AppDirUnitTestsFixture : public ::testing::Test {
public:
path tmpAppDir;
AppDir appDir;
public:
AppDirUnitTestsFixture() :
tmpAppDir(temp_directory_path() / unique_path("linuxdeploy-tests-%%%%-%%%%-%%%%")),
appDir(tmpAppDir) {
}
void SetUp() override {
}
void TearDown() override {
remove_all(tmpAppDir);
}
~AppDirUnitTestsFixture() override = default;
void listDeployedFiles() {
std::cout << "Files deployed in AppDir:";
recursive_directory_iterator end_itr; // default construction yields past-the-end
for (recursive_directory_iterator itr(tmpAppDir); itr != end_itr; itr++) {
std::cout << relative(itr->path(), tmpAppDir).string() << std::endl;
}
}
};
TEST_F(AppDirUnitTestsFixture, createBasicStructure) {
// in this test case we expect the following exact directory set to be created in the AppDir
std::set<std::string> expected = {
"usr",
"usr/bin",
"usr/share",
"usr/share/icons",
"usr/share/icons/hicolor",
"usr/share/icons/hicolor/scalable",
"usr/share/icons/hicolor/scalable/apps",
"usr/share/icons/hicolor/32x32",
"usr/share/icons/hicolor/32x32/apps",
"usr/share/icons/hicolor/256x256",
"usr/share/icons/hicolor/256x256/apps",
"usr/share/icons/hicolor/16x16",
"usr/share/icons/hicolor/16x16/apps",
"usr/share/icons/hicolor/128x128",
"usr/share/icons/hicolor/128x128/apps",
"usr/share/icons/hicolor/64x64",
"usr/share/icons/hicolor/64x64/apps",
"usr/share/applications",
"usr/lib",
};
appDir.createBasicStructure();
recursive_directory_iterator end_itr; // default construction yields past-the-end
for (recursive_directory_iterator itr(tmpAppDir); itr != end_itr; itr++) {
std::string path = relative(itr->path(), tmpAppDir).string();
ASSERT_NE(expected.find(path), expected.end());
expected.erase(path);
}
ASSERT_TRUE(expected.empty());
}
TEST_F(AppDirUnitTestsFixture, depoloyLibraryWrongPath) {
ASSERT_THROW(appDir.deployLibrary("/lib/fakelib.so"), std::exception);
}
TEST_F(AppDirUnitTestsFixture, depoloyLibrary) {
appDir.deployLibrary(SIMPLE_LIBRARY_PATH);
appDir.executeDeferredOperations();
ASSERT_TRUE(is_regular_file(tmpAppDir / "usr/lib" / path(SIMPLE_LIBRARY_PATH).filename()));
}
TEST_F(AppDirUnitTestsFixture, deployExecutable) {
appDir.deployExecutable(SIMPLE_EXECUTABLE_PATH);
appDir.executeDeferredOperations();
ASSERT_TRUE(is_regular_file(tmpAppDir / "usr/bin" / path(SIMPLE_EXECUTABLE_PATH).filename()));
ASSERT_TRUE(is_regular_file(tmpAppDir / "usr/lib" / path(SIMPLE_LIBRARY_PATH).filename()));
}
TEST_F(AppDirUnitTestsFixture, deployDesktopFile) {
DesktopFile desktopFile{SIMPLE_DESKTOP_ENTRY_PATH};
appDir.deployDesktopFile(desktopFile);
appDir.executeDeferredOperations();
ASSERT_TRUE(is_regular_file(tmpAppDir / "usr/share/applications" / path(SIMPLE_DESKTOP_ENTRY_PATH).filename()));
}
TEST_F(AppDirUnitTestsFixture, deployIcon) {
appDir.deployIcon(SIMPLE_ICON_PATH);
appDir.executeDeferredOperations();
ASSERT_TRUE(is_regular_file(tmpAppDir / "usr/share/icons/hicolor/scalable/apps" / path(SIMPLE_ICON_PATH).filename()));
}
TEST_F(AppDirUnitTestsFixture, deployFileToDirectory) {
auto destination = tmpAppDir / "usr/share/doc/simple_application/";
appDir.deployFile(SIMPLE_FILE_PATH, destination);
appDir.executeDeferredOperations();
ASSERT_TRUE(is_regular_file(destination / path(SIMPLE_FILE_PATH).filename()));
}
TEST_F(AppDirUnitTestsFixture, deployFileToAbsoluteFilePath) {
auto destination = tmpAppDir / "usr/share/doc/simple_application/test123";
appDir.deployFile(SIMPLE_FILE_PATH, destination);
appDir.executeDeferredOperations();
ASSERT_TRUE(is_regular_file(destination));
}
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}