From dbdb37908f5393fb4dc5ebcae799f86f72b0f27c Mon Sep 17 00:00:00 2001 From: jopejoe1 Date: Thu, 22 Jan 2026 20:36:13 +0100 Subject: [PATCH] lib/tests: add tests for lib.licenses --- lib/licenses/operators.nix | 6 +-- lib/tests/misc.nix | 99 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 3 deletions(-) diff --git a/lib/licenses/operators.nix b/lib/licenses/operators.nix index c7dab4a1469a..db7cc25d37c6 100644 --- a/lib/licenses/operators.nix +++ b/lib/licenses/operators.nix @@ -76,7 +76,7 @@ - [exception] Exception to apply */ WITH = license: exception: { - licenseType = "compound"; + licenseType = "exception"; operator = "WITH"; inherit license exception; }; @@ -88,8 +88,8 @@ # Example ```nix - PLUS lib.licenses.lgpl21Only - => { licenseType = "plus"; operator = "+"; license = lib.licenses.lgpl21Only; }; + PLUS lib.licenses.eupl11 + => { licenseType = "plus"; operator = "+"; license = lib.licenses.eupl11; }; ``` # Type diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index da0979756720..916994152754 100644 --- a/lib/tests/misc.nix +++ b/lib/tests/misc.nix @@ -5012,4 +5012,103 @@ runTests { testReplaceElemAtOutOfRange = testingThrow (lib.replaceElemAt [ 1 2 3 ] 5 "a"); testReplaceElemAtNegative = testingThrow (lib.replaceElemAt [ 1 2 3 ] (-1) "a"); + + testIsFree = { + expr = lib.licenses.isFree ( + lib.licenses.AND [ + (lib.licenses.mit) + (lib.licenses.OR [ + lib.licenses.free + lib.licenses.unfree + ]) + (lib.licenses.WITH lib.licenses.asl20 lib.licenses.llvm-exception) + (lib.licenses.PLUS lib.licenses.eupl11) + ] + ); + expected = true; + }; + + testIsUnfree = { + expr = lib.licenses.isFree ( + lib.licenses.AND [ + (lib.licenses.mit) + (lib.licenses.OR [ lib.licenses.unfree ]) + (lib.licenses.WITH lib.licenses.asl20 lib.licenses.llvm-exception) + (lib.licenses.PLUS lib.licenses.eupl11) + ] + ); + expected = false; + }; + + testIsRedistributable = { + expr = lib.licenses.isRedistributable ( + lib.licenses.AND [ + (lib.licenses.mit) + (lib.licenses.OR [ + lib.licenses.free + lib.licenses.unfree + ]) + (lib.licenses.WITH lib.licenses.asl20 lib.licenses.llvm-exception) + (lib.licenses.PLUS lib.licenses.eupl11) + ] + ); + expected = true; + }; + + testIsUnredistributable = { + expr = lib.licenses.isRedistributable ( + lib.licenses.AND [ + (lib.licenses.mit) + (lib.licenses.OR [ lib.licenses.unfree ]) + (lib.licenses.WITH lib.licenses.asl20 lib.licenses.llvm-exception) + (lib.licenses.PLUS lib.licenses.eupl11) + ] + ); + expected = false; + }; + + testContainsLicenses = { + expr = lib.licenses.containsLicenses [ lib.licenses.mit ] ( + lib.licenses.AND [ + (lib.licenses.mit) + (lib.licenses.OR [ + lib.licenses.free + lib.licenses.unfree + ]) + (lib.licenses.WITH lib.licenses.asl20 lib.licenses.llvm-exception) + (lib.licenses.PLUS lib.licenses.eupl11) + ] + ); + expected = true; + }; + + testToSPDX = { + expr = lib.licenses.toSPDX ( + lib.licenses.AND [ + (lib.licenses.mit) + (lib.licenses.OR [ + lib.licenses.free + lib.licenses.unfree + ]) + (lib.licenses.WITH lib.licenses.asl20 lib.licenses.llvm-exception) + (lib.licenses.PLUS lib.licenses.eupl11) + ] + ); + expected = "MIT AND (LicenseRef-nixos-free OR LicenseRef-nixos-unfree) AND (Apache-2.0 WITH LLVM-exception) AND EUPL-1.1+"; + }; + + testEvaluateProperty = { + expr = lib.licenses.evaluateProperty (x: x.deprecated) true ( + lib.licenses.AND [ + (lib.licenses.mit) + (lib.licenses.OR [ + lib.licenses.free + lib.licenses.unfree + ]) + (lib.licenses.WITH lib.licenses.asl20 lib.licenses.llvm-exception) + (lib.licenses.PLUS lib.licenses.eupl11) + ] + ); + expected = false; + }; }