Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions nixos/tests/all-tests.nix
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,7 @@ in {
lxd = pkgs.recurseIntoAttrs (handleTest ./lxd { inherit handleTestOn; });
lxd-image-server = handleTest ./lxd-image-server.nix {};
#logstash = handleTest ./logstash.nix {};
lomiri-system-settings = handleTest ./lomiri-system-settings.nix {};
lorri = handleTest ./lorri/default.nix {};
maddy = discoverTests (import ./maddy { inherit handleTest; });
maestral = handleTest ./maestral.nix {};
Expand Down
99 changes: 99 additions & 0 deletions nixos/tests/lomiri-system-settings.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
import ./make-test-python.nix ({ pkgs, lib, ... }: {
name = "lomiri-system-settings-standalone";
meta.maintainers = lib.teams.lomiri.members;

nodes.machine = { config, pkgs, ... }: {
imports = [
./common/x11.nix
];

services.xserver.enable = true;

environment = {
systemPackages = with pkgs.lomiri; [
suru-icon-theme
lomiri-system-settings
];
variables = {
UITK_ICON_THEME = "suru";
};
};

i18n.supportedLocales = [ "all" ];

fonts.packages = with pkgs; [
# Intended font & helps with OCR
ubuntu_font_family
];

services.upower.enable = true;
};

enableOCR = true;

testScript = let
settingsPages = [
# Base pages
{ name = "wifi"; type = "internal"; element = "networks"; }
{ name = "bluetooth"; type = "internal"; element = "discoverable|None detected"; }
# only text we can really look for with VPN is on a button, OCR on CI struggles with it
{ name = "vpn"; type = "internal"; element = "Add|Manual|Configuration"; skipOCR = true; }
{ name = "appearance"; type = "internal"; element = "Background image|blur effects"; }
{ name = "desktop"; type = "internal"; element = "workspaces|Icon size"; }
{ name = "sound"; type = "internal"; element = "Silent Mode|Message sound"; }
{ name = "language"; type = "internal"; element = "Display language|External keyboard"; }
{ name = "notification"; type = "internal"; element = "Apps that notify"; }
{ name = "gestures"; type = "internal"; element = "Edge drag"; }
{ name = "mouse"; type = "internal"; element = "Cursor speed|Wheel scrolling speed"; }
{ name = "timedate"; type = "internal"; element = "Time zone|Set the time and date"; }

# External plugins
{ name = "security-privacy"; type = "external"; element = "Locking|unlocking|permissions"; elementLocalised = "Sperren|Entsperren|Berechtigungen"; }
];
in
''
machine.wait_for_x()

with subtest("lomiri system settings launches"):
machine.execute("lomiri-system-settings >&2 &")
machine.wait_for_text("System Settings")
machine.screenshot("lss_open")

# Move focus to start of plugins list for following list of tests
machine.send_key("tab")
machine.send_key("tab")
machine.screenshot("lss_focus")

# tab through & open all sub-menus, to make sure none of them fail
'' + (lib.strings.concatMapStringsSep "\n" (page: ''
machine.send_key("tab")
machine.send_key("kp_enter")
''
+ lib.optionalString (!(page.skipOCR or false)) ''
with subtest("lomiri system settings ${page.name} works"):
machine.wait_for_text(r"(${page.element})")
machine.screenshot("lss_page_${page.name}")
'') settingsPages) + ''

machine.execute("pkill -f lomiri-system-settings")

with subtest("lomiri system settings localisation works"):
machine.execute("env LANG=de_DE.UTF-8 lomiri-system-settings >&2 &")
machine.wait_for_text("Systemeinstellungen")
machine.screenshot("lss_localised_open")

# Move focus to start of plugins list for following list of tests
machine.send_key("tab")
machine.send_key("tab")
machine.screenshot("lss_focus_localised")

'' + (lib.strings.concatMapStringsSep "\n" (page: ''
machine.send_key("tab")
machine.send_key("kp_enter")
'' + lib.optionalString (page.type == "external") ''
with subtest("lomiri system settings ${page.name} localisation works"):
machine.wait_for_text(r"(${page.elementLocalised})")
machine.screenshot("lss_localised_page_${page.name}")
'') settingsPages) + ''
'';
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
From 8e21cf46551091c884014985d3e0dd9704d6dc04 Mon Sep 17 00:00:00 2001
From: OPNA2608 <opna2608@protonmail.com>
Date: Wed, 14 Feb 2024 16:00:24 +0100
Subject: [PATCH] Support wrapping for Nixpkgs

---
src/CMakeLists.txt | 24 +++++++++++++++++++-----
src/main.cpp | 8 +++++---
src/plugin.cpp | 19 +++++++++++++++++--
tests/CMakeLists.txt | 18 ++++++++++++++----
4 files changed, 55 insertions(+), 14 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index cd3131d0..fcd78bdf 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,13 +1,27 @@
include_directories(${GLIB_INCLUDE_DIRS})

-add_definitions(-DI18N_DIRECTORY="${CMAKE_INSTALL_FULL_LOCALEDIR}")
add_definitions(-DI18N_DOMAIN="lomiri-system-settings")
-add_definitions(-DPLUGIN_PRIVATE_MODULE_DIR="${PLUGIN_PRIVATE_MODULE_DIR}")
+
+add_definitions(-DNIX_FALLBACK_PREFIX="${CMAKE_INSTALL_PREFIX}")
+
+set(I18N_DIRECTORY "${CMAKE_INSTALL_FULL_LOCALEDIR}")
+
+list(APPEND NIX_LOCATION_VARIABLES
+ I18N_DIRECTORY
+ PLUGIN_PRIVATE_MODULE_DIR
+ PLUGIN_MANIFEST_DIR
+ PLUGIN_QML_DIR
+ PLUGIN_MODULE_DIR
+)
+
+foreach(locvar IN LISTS NIX_LOCATION_VARIABLES)
+ string(REPLACE "${CMAKE_INSTALL_PREFIX}" "" NIX_${locvar}_RELATIVE "${${locvar}}")
+ add_definitions(-D${locvar}=do_not_use_me)
+ add_definitions(-DNIX_${locvar}_RELATIVE="${NIX_${locvar}_RELATIVE}")
+endforeach()
+
add_definitions(-DMANIFEST_DIR="${MANIFEST_DIR}")
-add_definitions(-DPLUGIN_MANIFEST_DIR="${PLUGIN_MANIFEST_DIR}")
add_definitions(-DQML_DIR="${QML_DIR}")
-add_definitions(-DPLUGIN_QML_DIR="${PLUGIN_QML_DIR}")
-add_definitions(-DPLUGIN_MODULE_DIR="${PLUGIN_MODULE_DIR}")

add_subdirectory(SystemSettings)

diff --git a/src/main.cpp b/src/main.cpp
index 64441da3..cfcabe42 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -42,6 +42,8 @@ int main(int argc, char **argv)
QByteArray mountPoint = qEnvironmentVariableIsSet("SNAP") ? qgetenv("SNAP") : "";
bool isSnap = !mountPoint.isEmpty();

+ QByteArray dataPrefix = qEnvironmentVariableIsSet("NIX_LSS_PREFIX") ? qgetenv("NIX_LSS_PREFIX") : NIX_FALLBACK_PREFIX;
+
// Ensure printing environment is correct.
qputenv("QT_PRINTER_MODULE", "cupsprintersupport");

@@ -78,12 +80,12 @@ int main(int argc, char **argv)
qmlRegisterType<LomiriSystemSettings::PluginManager>("SystemSettings", 1, 0, "PluginManager");
view.engine()->rootContext()->setContextProperty("Utilities", &utils);
view.setResizeMode(QQuickView::SizeRootObjectToView);
- view.engine()->addImportPath(mountPoint + PLUGIN_PRIVATE_MODULE_DIR);
- view.engine()->addImportPath(mountPoint + PLUGIN_QML_DIR);
+ view.engine()->addImportPath(mountPoint + dataPrefix + "/" + NIX_PLUGIN_PRIVATE_MODULE_DIR_RELATIVE);
+ view.engine()->addImportPath(mountPoint + dataPrefix + "/" + NIX_PLUGIN_QML_DIR_RELATIVE);
view.rootContext()->setContextProperty("defaultPlugin", defaultPlugin);
view.rootContext()->setContextProperty("mountPoint", mountPoint);
view.rootContext()->setContextProperty("isSnap", isSnap);
- view.rootContext()->setContextProperty("i18nDirectory", mountPoint + I18N_DIRECTORY);
+ view.rootContext()->setContextProperty("i18nDirectory", mountPoint + dataPrefix + "/" + NIX_I18N_DIRECTORY_RELATIVE);
view.rootContext()->setContextProperty("pluginOptions", pluginOptions);
view.rootContext()->setContextProperty("view", &view);
view.setSource(QUrl("qrc:/qml/MainWindow.qml"));
diff --git a/src/plugin.cpp b/src/plugin.cpp
index 133821af..6a1a152c 100644
--- a/src/plugin.cpp
+++ b/src/plugin.cpp
@@ -36,9 +36,16 @@
#include <LomiriSystemSettings/ItemBase>
#include <LomiriSystemSettings/PluginInterface>

+#include <libintl.h>
+
using namespace LomiriSystemSettings;

-static const QLatin1String pluginModuleDir{PLUGIN_MODULE_DIR};
+const QLatin1String getWrapperPrefix()
+{
+ const QLatin1String pluginWrapperPrefix {qEnvironmentVariableIsSet("NIX_LSS_PREFIX") ? qgetenv("NIX_LSS_PREFIX") : NIX_FALLBACK_PREFIX};
+ return pluginWrapperPrefix;
+}
+static const QLatin1String pluginModuleDirRelative{NIX_PLUGIN_MODULE_DIR_RELATIVE};
static const QLatin1String pluginQmlDir{QML_DIR};

namespace LomiriSystemSettings {
@@ -89,6 +96,11 @@ PluginPrivate::PluginPrivate(Plugin *q, const QFileInfo &manifest):

m_data = json.toVariant().toMap();
m_dataPath = manifest.absolutePath();
+
+ QString textDomain = m_data.value(keyTranslations).toString();
+ QString textDomainDir = QString("%1/%2")
+ .arg(getWrapperPrefix()).arg(NIX_I18N_DIRECTORY_RELATIVE);
+ bindtextdomain(qPrintable(textDomain), qPrintable(textDomainDir));
}

bool PluginPrivate::ensureLoaded() const
@@ -110,8 +122,11 @@ bool PluginPrivate::ensureLoaded() const
ctx->contextProperty("mountPoint").value<QByteArray>() :
"";

+ QString wrapperModuleDir = QString("%1/%2")
+ .arg(getWrapperPrefix()).arg(pluginModuleDirRelative);
+
QString name = QString("%1%2/lib%3.so")
- .arg(mountPoint).arg(pluginModuleDir).arg(plugin);
+ .arg(mountPoint).arg(wrapperModuleDir).arg(plugin);

m_loader.setFileName(name);
if (Q_UNLIKELY(!m_loader.load())) {
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index c10b2e2d..a998b641 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -9,13 +9,23 @@ include_directories(
set(XVFB_CMD xvfb-run -a -s "-screen 0 640x480x24")

add_definitions(-DI18N_DOMAIN="lomiri-system-settings")
-add_definitions(-DPLUGIN_PRIVATE_MODULE_DIR="${PLUGIN_PRIVATE_MODULE_DIR}")
-add_definitions(-DPLUGIN_MODULE_DIR="${CMAKE_CURRENT_BINARY_DIR}")
+
+add_definitions(-DNIX_FALLBACK_PREFIX="${CMAKE_CURRENT_BINARY_DIR}")
+
+add_definitions(-DI18N_DIRECTORY=do_not_use_me)
+add_definitions(-DNIX_I18N_DIRECTORY_RELATIVE="")
+add_definitions(-DPLUGIN_PRIVATE_MODULE_DIR=do_not_use_me)
+add_definitions(-DNIX_PLUGIN_PRIVATE_MODULE_DIR_RELATIVE="")
+add_definitions(-DPLUGIN_MODULE_DIR=do_not_use_me)
+add_definitions(-DNIX_PLUGIN_MODULE_DIR_RELATIVE="")
+add_definitions(-DPLUGIN_MANIFEST_DIR=do_not_use_me)
+add_definitions(-DNIX_PLUGIN_MANIFEST_DIR_RELATIVE="../../tests/data")
+add_definitions(-DPLUGIN_QML_DIR=do_not_use_me)
+add_definitions(-DNIX_PLUGIN_QML_DIR_RELATIVE="")
+
add_definitions(-DMANIFEST_DIR="data")
-add_definitions(-DPLUGIN_MANIFEST_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data")
add_definitions(-DQML_TEST_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
add_definitions(-DQML_DIR="${CMAKE_CURRENT_BINARY_DIR}")
-add_definitions(-DPLUGIN_QML_DIR="${CMAKE_CURRENT_BINARY_DIR}")
add_definitions(-DSYSTEM_IMAGE_DBUS_TEMPLATE="${CMAKE_SOURCE_DIR}/tests/autopilot/lomiri_system_settings/tests/systemimage.py")

add_library(test-plugin SHARED test-plugin.cpp test-plugin.h)
--
2.42.0

Loading