about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nixos/tests/all-tests.nix1
-rw-r--r--nixos/tests/gnome-photos.nix42
-rw-r--r--pkgs/applications/graphics/gnome-photos/default.nix33
-rw-r--r--pkgs/applications/graphics/gnome-photos/installed-tests-path.patch23
4 files changed, 97 insertions, 2 deletions
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 4eeee9c35c07..6e3e06889200 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -97,6 +97,7 @@ in
   glusterfs = handleTest ./glusterfs.nix {};
   gnome3-xorg = handleTest ./gnome3-xorg.nix {};
   gnome3 = handleTest ./gnome3.nix {};
+  gnome-photos = handleTest ./gnome-photos.nix {};
   gocd-agent = handleTest ./gocd-agent.nix {};
   gocd-server = handleTest ./gocd-server.nix {};
   google-oslogin = handleTest ./google-oslogin {};
diff --git a/nixos/tests/gnome-photos.nix b/nixos/tests/gnome-photos.nix
new file mode 100644
index 000000000000..2ecda1d68ce3
--- /dev/null
+++ b/nixos/tests/gnome-photos.nix
@@ -0,0 +1,42 @@
+# run installed tests
+import ./make-test.nix ({ pkgs, lib, ... }:
+
+let
+
+  # gsettings tool with access to gsettings-desktop-schemas
+  desktop-gsettings = with pkgs; stdenv.mkDerivation {
+    name = "desktop-gsettings";
+    dontUnpack = true;
+    nativeBuildInputs = [ glib wrapGAppsHook ];
+    buildInputs = [ gsettings-desktop-schemas ];
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out/bin
+      ln -s ${glib.bin}/bin/gsettings $out/bin/desktop-gsettings
+      runHook postInstall
+    '';
+  };
+
+in
+
+{
+  name = "gnome-photos";
+  meta = {
+    maintainers = pkgs.gnome-photos.meta.maintainers;
+  };
+
+  machine = { pkgs, ... }: {
+    imports = [ ./common/x11.nix ];
+    programs.dconf.enable = true;
+    services.gnome3.at-spi2-core.enable = true; # needed for dogtail
+    environment.systemPackages = with pkgs; [ gnome-desktop-testing desktop-gsettings ];
+    services.dbus.packages = with pkgs; [ gnome-photos ];
+  };
+
+  testScript = ''
+    $machine->waitForX;
+    # dogtail needs accessibility enabled
+    $machine->succeed("desktop-gsettings set org.gnome.desktop.interface toolkit-accessibility true 2>&1");
+    $machine->succeed("gnome-desktop-testing-runner -d '${pkgs.gnome-photos.installedTests}/share' 2>&1");
+  '';
+})
diff --git a/pkgs/applications/graphics/gnome-photos/default.nix b/pkgs/applications/graphics/gnome-photos/default.nix
index e6072b1211dd..f591dd5a60dd 100644
--- a/pkgs/applications/graphics/gnome-photos/default.nix
+++ b/pkgs/applications/graphics/gnome-photos/default.nix
@@ -1,5 +1,6 @@
 { stdenv
 , fetchurl
+, at-spi2-core
 , babl
 , dbus
 , desktop-file-utils
@@ -13,6 +14,7 @@
 , glib
 , gnome-online-accounts
 , gnome3
+, gobject-introspection
 , grilo
 , grilo-plugins
 , gsettings-desktop-schemas
@@ -23,6 +25,7 @@
 , libxml2
 , meson
 , ninja
+, nixosTests
 , pkgconfig
 , python3
 , tracker
@@ -34,22 +37,32 @@ stdenv.mkDerivation rec {
   pname = "gnome-photos";
   version = "3.32.1";
 
+  outputs = [ "out" "installedTests" ];
+
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
     sha256 = "0nxa2jz1g73wypdsj19r4plf4hfkhs9mpl7gbhsiyqp1rkn84ahn";
   };
 
-  # doCheck = true;
+  patches = [
+    ./installed-tests-path.patch
+  ];
 
   nativeBuildInputs = [
     desktop-file-utils
     gettext
+    gobject-introspection # for setup hook
+    glib # for setup hook
     itstool
     libxml2
     meson
     ninja
     pkgconfig
-    python3
+    (python3.withPackages (pkgs: with pkgs; [
+      dogtail
+      pygobject3
+      pyatspi
+    ]))
     wrapGAppsHook
   ];
 
@@ -73,17 +86,33 @@ stdenv.mkDerivation rec {
     libgdata
     tracker
     tracker-miners # For 'org.freedesktop.Tracker.Miner.Files' GSettings schema
+
+    at-spi2-core # for tests
+  ];
+
+  mesonFlags = [
+    "-Dinstalled_tests=true"
+    "-Dinstalled_test_prefix=${placeholder "installedTests"}"
   ];
 
   postPatch = ''
     chmod +x meson_post_install.py
     patchShebangs meson_post_install.py
+    patchShebangs tests/basic.py
+  '';
+
+  postFixup = ''
+    wrapProgram "${placeholder "installedTests"}/libexec/installed-tests/gnome-photos/basic.py" "''${gappsWrapperArgs[@]}"
   '';
 
   passthru = {
     updateScript = gnome3.updateScript {
       packageName = pname;
     };
+
+    tests = {
+      installed-tests = nixosTests.gnome-photos;
+    };
   };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/applications/graphics/gnome-photos/installed-tests-path.patch b/pkgs/applications/graphics/gnome-photos/installed-tests-path.patch
new file mode 100644
index 000000000000..218108328dd8
--- /dev/null
+++ b/pkgs/applications/graphics/gnome-photos/installed-tests-path.patch
@@ -0,0 +1,23 @@
+diff --git a/meson.build b/meson.build
+index dee932dc..f8851913 100644
+--- a/meson.build
++++ b/meson.build
+@@ -16,8 +16,8 @@
+ photos_docdir = join_paths(photos_datadir, 'doc', meson.project_name())
+ photos_libdir = join_paths(photos_prefix, get_option('libdir'), meson.project_name())
+ 
+-photos_installed_test_metadir = join_paths(photos_datadir, 'installed-tests', meson.project_name())
+-photos_installed_test_execdir = join_paths(photos_libexecdir, 'installed-tests', meson.project_name())
++photos_installed_test_metadir = join_paths(get_option('installed_test_prefix'), 'share', 'installed-tests', meson.project_name())
++photos_installed_test_execdir = join_paths(get_option('installed_test_prefix'), 'libexec', 'installed-tests', meson.project_name())
+ 
+ photos_namespace = 'org.gnome.Photos'
+ 
+diff --git a/meson_options.txt b/meson_options.txt
+index f34b5cc0..8e09970b 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -1,2 +1,3 @@
+ option('dogtail', type: 'boolean', value: true, description: 'test using dogtail')
+ option('installed_tests', type: 'boolean', value: false, description: 'Enable installation of some test cases')
++option('installed_test_prefix', type: 'string', value: '', description: 'Prefix for installed tests')