summary refs log tree commit diff
path: root/pkgs/test/mkOption
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/test/mkOption')
-rw-r--r--pkgs/test/mkOption/declare.nix53
-rw-r--r--pkgs/test/mkOption/keep.nix11
-rw-r--r--pkgs/test/mkOption/keep.ref57
-rw-r--r--pkgs/test/mkOption/merge.nix15
-rw-r--r--pkgs/test/mkOption/merge.ref20
-rwxr-xr-xpkgs/test/mkOption/test.sh9
6 files changed, 165 insertions, 0 deletions
diff --git a/pkgs/test/mkOption/declare.nix b/pkgs/test/mkOption/declare.nix
new file mode 100644
index 00000000000..9e89a1c096d
--- /dev/null
+++ b/pkgs/test/mkOption/declare.nix
@@ -0,0 +1,53 @@
+# sets of small configurations:
+# Each configuration
+rec {
+  # has 2 arguments pkgs and this.
+  configA = pkgs: this: {
+    # Can depends on other configuration
+    require = configB;
+
+    # Defines new options
+    optionA = pkgs.lib.mkOption {
+      # With default values
+      default = false;
+      # And merging functions.
+      merge = pkgs.lib.mergeEnableOption;
+    };
+
+    # Add a new definition to other options.
+    optionB = this.optionA;
+  };
+
+  # Can be used for option header.
+  configB = pkgs: this: {
+    # Can depends on more than one configuration.
+    require = [ configC configD ];
+
+    optionB = pkgs.lib.mkOption {
+      default = false;
+    };
+
+    # Is not obliged to define other options.
+  };
+
+  configC = pkgs: this: {
+    require = [ configA ];
+
+    optionC = pkgs.lib.mkOption {
+      default = false;
+    };
+
+    # Use the default value if it is not overwritten.
+    optionA = this.optionC;
+  };
+
+  # Can also be used as option configuration only.
+  # without any arguments (backward compatibility)
+  configD = {
+    # Is not forced to specify the require attribute.
+
+    # Is not force to make new options.
+    optionA = true;
+    optionD = false;
+  };
+}
diff --git a/pkgs/test/mkOption/keep.nix b/pkgs/test/mkOption/keep.nix
new file mode 100644
index 00000000000..26fb8c28dd5
--- /dev/null
+++ b/pkgs/test/mkOption/keep.nix
@@ -0,0 +1,11 @@
+let
+  pkgs = import ../../.. {};
+  config = import ./declare.nix;
+in
+  with (pkgs.lib);
+
+  finalReferenceOptionSets
+    filterOptionSets
+    pkgs
+    # List of main configurations.
+    [ config.configB config.configC ]
diff --git a/pkgs/test/mkOption/keep.ref b/pkgs/test/mkOption/keep.ref
new file mode 100644
index 00000000000..a3a051eb48c
--- /dev/null
+++ b/pkgs/test/mkOption/keep.ref
@@ -0,0 +1,57 @@
+<?xml version='1.0' encoding='utf-8'?>
+<expr>
+  <attrs>
+    <attr name="optionA">
+      <list>
+        <attrs>
+          <attr name="_type">
+            <string value="option" />
+          </attr>
+          <attr name="default">
+            <bool value="false" />
+          </attr>
+          <attr name="merge">
+            <unevaluated />
+          </attr>
+          <attr name="name">
+            <string value="optionA" />
+          </attr>
+        </attrs>
+      </list>
+    </attr>
+    <attr name="optionB">
+      <list>
+        <attrs>
+          <attr name="_type">
+            <string value="option" />
+          </attr>
+          <attr name="default">
+            <bool value="false" />
+          </attr>
+          <attr name="name">
+            <string value="optionB" />
+          </attr>
+        </attrs>
+      </list>
+    </attr>
+    <attr name="optionC">
+      <list>
+        <attrs>
+          <attr name="_type">
+            <string value="option" />
+          </attr>
+          <attr name="default">
+            <bool value="false" />
+          </attr>
+          <attr name="name">
+            <string value="optionC" />
+          </attr>
+        </attrs>
+      </list>
+    </attr>
+    <attr name="optionD">
+      <attrs>
+      </attrs>
+    </attr>
+  </attrs>
+</expr>
diff --git a/pkgs/test/mkOption/merge.nix b/pkgs/test/mkOption/merge.nix
new file mode 100644
index 00000000000..bbf68218aa0
--- /dev/null
+++ b/pkgs/test/mkOption/merge.nix
@@ -0,0 +1,15 @@
+let
+  pkgs = import ../../.. {};
+  config = import ./declare.nix;
+
+  # Define the handler of unbound options.
+  noOption = name: values:
+    builtins.trace "Attribute named '${name}' does not match any option declaration." values;
+in
+  with (pkgs.lib);
+
+  finalReferenceOptionSets
+    (mergeOptionSets noOption)
+    pkgs
+    # List of main configurations.
+    [ config.configB config.configC ]
diff --git a/pkgs/test/mkOption/merge.ref b/pkgs/test/mkOption/merge.ref
new file mode 100644
index 00000000000..6956f65dbbc
--- /dev/null
+++ b/pkgs/test/mkOption/merge.ref
@@ -0,0 +1,20 @@
+trace: Str("Attribute named 'optionD' does not match any option declaration.",[])
+<?xml version='1.0' encoding='utf-8'?>
+<expr>
+  <attrs>
+    <attr name="optionA">
+      <bool value="true" />
+    </attr>
+    <attr name="optionB">
+      <bool value="true" />
+    </attr>
+    <attr name="optionC">
+      <bool value="false" />
+    </attr>
+    <attr name="optionD">
+      <list>
+        <bool value="false" />
+      </list>
+    </attr>
+  </attrs>
+</expr>
diff --git a/pkgs/test/mkOption/test.sh b/pkgs/test/mkOption/test.sh
new file mode 100755
index 00000000000..5478846d563
--- /dev/null
+++ b/pkgs/test/mkOption/test.sh
@@ -0,0 +1,9 @@
+#! /bin/sh -e
+
+echo 1>&2 "Test: Merge of option bindings."
+nix-instantiate merge.nix --eval-only --strict --xml >& merge.out
+diff merge.ref merge.out
+
+echo 1>&2 "Test: Filter of option declarations."
+nix-instantiate keep.nix --eval-only --strict --xml >& keep.out
+diff keep.ref keep.out