about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorsternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org>2021-02-16 02:22:51 +0100
committersternenseemann <sternenseemann@systemli.org>2021-02-25 19:52:33 +0100
commitbd05126ea1ea109d23318c4e26f678ada65cdf2b (patch)
treecea96314372684d6cdfa765b52ee403fdf999cc4 /tests
parenta4e4ca8b9a5ad24787343d6e7bdd5be99776ecd2 (diff)
tests/profpatsch/programs/nman: add nixos test for nman
We can't really do normal unit tests, since they'd be integration tests
requiring nix. Recursive nix is also a bad idea in normal derivations,
so we add a NixOS test for nman.

Here we are also somewhat limited since we already need to have all
store paths used by nman in /nix/store otherwise we'd need to access the
network which would fail. However we can verify that nman only builds
specific store paths before finding the desired man page this way.
Diffstat (limited to 'tests')
-rw-r--r--tests/default.nix1
-rw-r--r--tests/profpatsch/programs/nman.nix53
2 files changed, 54 insertions, 0 deletions
diff --git a/tests/default.nix b/tests/default.nix
index e47ddd46..e7f54e76 100644
--- a/tests/default.nix
+++ b/tests/default.nix
@@ -15,6 +15,7 @@ in {
   games = {
     starbound = callTest ./games/starbound.nix;
   };
+  profpatsch.programs.nman = callTest ./profpatsch/programs/nman.nix;
   programs = {
     gnupg = callTest ./programs/gnupg;
   };
diff --git a/tests/profpatsch/programs/nman.nix b/tests/profpatsch/programs/nman.nix
new file mode 100644
index 00000000..12556fa5
--- /dev/null
+++ b/tests/profpatsch/programs/nman.nix
@@ -0,0 +1,53 @@
+{ nixpkgsPath, ... }:
+
+{
+  name = "nman-test";
+
+  machine = { pkgs, lib, ... }: {
+    nix.nixPath = lib.mkForce [
+      "nixpkgs=${pkgs.path}"
+    ];
+
+    documentation.man.enable = false;
+
+    environment.systemPackages = [
+      pkgs.mandoc
+      pkgs.vuizvui.profpatsch.nman
+    ];
+
+    # add all outputs of packages which are later requested
+    # by nman in tests. note that only a single output is
+    # added which allows us to test that nman accesses the
+    # right outputs first and is as lazy as possible
+    # (any other outputs need network to be realised).
+    system.extraDependencies = [
+      pkgs.lowdown.man
+      pkgs.man-pages.out
+      pkgs.libunwind.devman
+      pkgs.w3m.out
+    ];
+
+    environment.variables = {
+      PAGER = "cat";
+    };
+  };
+
+  testScript = ''
+    # fmt: off
+    machine.start()
+
+    # man pages which exist
+    machine.succeed("nman lowdown | grep LOWDOWN.1.")
+    machine.succeed("nman w3m | grep W3M.1.")
+    machine.succeed("nman lowdown 3 | grep LOWDOWN.3.")
+    machine.succeed("nman lowdown lowdown_html_rndr | grep LOWDOWN_HTML_RNDR.3.")
+    machine.succeed("nman mandoc 7 man | grep MAN.7.")
+    machine.succeed("nman libunwind unw_init_local | grep UNW_INIT_LOCAL.3.")
+
+    # man pages which should not be found
+    machine.fail("nman aewukaishenaiugenaifesphg")
+    machine.fail("nman man-pages 50 realpath")
+    machine.fail("nman man-pages does-not-exist")
+    machine.fail("nman man-pages 3 does-not-exist")
+  '';
+}