aboutsummaryrefslogtreecommitdiff
path: root/tests/functional/lang/eval-okay-functionargs.nix
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2023-10-05 12:12:18 -0400
committerJohn Ericson <John.Ericson@Obsidian.Systems>2023-12-01 12:06:43 -0500
commit30dcc19d1f30fc203be460134c4578509cce704f (patch)
tree6cc32609b9984a2c4d5ecc0cac5cf30609e208b9 /tests/functional/lang/eval-okay-functionargs.nix
parent72425212657d795dc215b334b7c8c8cd36d06b72 (diff)
Put functional tests in `tests/functional`
I think it is bad for these reasons when `tests/` contains a mix of functional and integration tests - Concepts is harder to understand, the documentation makes a good unit vs functional vs integration distinction, but when the integration tests are just two subdirs within `tests/` this is not clear. - Source filtering in the `flake.nix` is more complex. We need to filter out some of the dirs from `tests/`, rather than simply pick the dirs we want and take all of them. This is a good sign the structure of what we are trying to do is not matching the structure of the files. With this change we have a clean: ```shell-session $ git show 'HEAD:tests' tree HEAD:tests functional/ installer/ nixos/ ``` (cherry picked from commit 68c81c737571794f7246db53fb4774e94fcf4b7e)
Diffstat (limited to 'tests/functional/lang/eval-okay-functionargs.nix')
-rw-r--r--tests/functional/lang/eval-okay-functionargs.nix80
1 files changed, 80 insertions, 0 deletions
diff --git a/tests/functional/lang/eval-okay-functionargs.nix b/tests/functional/lang/eval-okay-functionargs.nix
new file mode 100644
index 000000000..68dca62ee
--- /dev/null
+++ b/tests/functional/lang/eval-okay-functionargs.nix
@@ -0,0 +1,80 @@
+let
+
+ stdenvFun = { }: { name = "stdenv"; };
+ stdenv2Fun = { }: { name = "stdenv2"; };
+ fetchurlFun = { stdenv }: assert stdenv.name == "stdenv"; { name = "fetchurl"; };
+ atermFun = { stdenv, fetchurl }: { name = "aterm-${stdenv.name}"; };
+ aterm2Fun = { stdenv, fetchurl }: { name = "aterm2-${stdenv.name}"; };
+ nixFun = { stdenv, fetchurl, aterm }: { name = "nix-${stdenv.name}-${aterm.name}"; };
+
+ mplayerFun =
+ { stdenv, fetchurl, enableX11 ? false, xorg ? null, enableFoo ? true, foo ? null }:
+ assert stdenv.name == "stdenv2";
+ assert enableX11 -> xorg.libXv.name == "libXv";
+ assert enableFoo -> foo != null;
+ { name = "mplayer-${stdenv.name}.${xorg.libXv.name}-${xorg.libX11.name}"; };
+
+ makeOverridable = f: origArgs: f origArgs //
+ { override = newArgs:
+ makeOverridable f (origArgs // (if builtins.isFunction newArgs then newArgs origArgs else newArgs));
+ };
+
+ callPackage_ = pkgs: f: args:
+ makeOverridable f ((builtins.intersectAttrs (builtins.functionArgs f) pkgs) // args);
+
+ allPackages =
+ { overrides ? (pkgs: pkgsPrev: { }) }:
+ let
+ callPackage = callPackage_ pkgs;
+ pkgs = pkgsStd // (overrides pkgs pkgsStd);
+ pkgsStd = {
+ inherit pkgs;
+ stdenv = callPackage stdenvFun { };
+ stdenv2 = callPackage stdenv2Fun { };
+ fetchurl = callPackage fetchurlFun { };
+ aterm = callPackage atermFun { };
+ xorg = callPackage xorgFun { };
+ mplayer = callPackage mplayerFun { stdenv = pkgs.stdenv2; enableFoo = false; };
+ nix = callPackage nixFun { };
+ };
+ in pkgs;
+
+ libX11Fun = { stdenv, fetchurl }: { name = "libX11"; };
+ libX11_2Fun = { stdenv, fetchurl }: { name = "libX11_2"; };
+ libXvFun = { stdenv, fetchurl, libX11 }: { name = "libXv"; };
+
+ xorgFun =
+ { pkgs }:
+ let callPackage = callPackage_ (pkgs // pkgs.xorg); in
+ {
+ libX11 = callPackage libX11Fun { };
+ libXv = callPackage libXvFun { };
+ };
+
+in
+
+let
+
+ pkgs = allPackages { };
+
+ pkgs2 = allPackages {
+ overrides = pkgs: pkgsPrev: {
+ stdenv = pkgs.stdenv2;
+ nix = pkgsPrev.nix.override { aterm = aterm2Fun { inherit (pkgs) stdenv fetchurl; }; };
+ xorg = pkgsPrev.xorg // { libX11 = libX11_2Fun { inherit (pkgs) stdenv fetchurl; }; };
+ };
+ };
+
+in
+
+ [ pkgs.stdenv.name
+ pkgs.fetchurl.name
+ pkgs.aterm.name
+ pkgs2.aterm.name
+ pkgs.xorg.libX11.name
+ pkgs.xorg.libXv.name
+ pkgs.mplayer.name
+ pkgs2.mplayer.name
+ pkgs.nix.name
+ pkgs2.nix.name
+ ]