Add unit tests for luaUtils and some for lazyUtils.
This commit is contained in:
parent
8dd643ceeb
commit
d82f7a033d
6 changed files with 317 additions and 3 deletions
16
default.nix
16
default.nix
|
@ -1,4 +1,8 @@
|
||||||
{ lib, pkgs }:
|
{
|
||||||
|
pkgs ? import <nixpkgs> { },
|
||||||
|
lib ? pkgs.lib,
|
||||||
|
nix-unit ? pkgs.nix-unit,
|
||||||
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
luaUtils = import ./pkgs/luaUtils.nix { inherit lib pkgs; };
|
luaUtils = import ./pkgs/luaUtils.nix { inherit lib pkgs; };
|
||||||
|
@ -12,6 +16,16 @@ in
|
||||||
{
|
{
|
||||||
# https://github.com/NixOS/rfcs/pull/166
|
# https://github.com/NixOS/rfcs/pull/166
|
||||||
formatter = pkgs.nixfmt-rfc-style;
|
formatter = pkgs.nixfmt-rfc-style;
|
||||||
|
apps = {
|
||||||
|
tests = {
|
||||||
|
type = "app";
|
||||||
|
program =
|
||||||
|
(pkgs.writeScript "nix-unit" ''
|
||||||
|
${nix-unit}/bin/nix-unit --flake '.#tests'
|
||||||
|
'').outPath;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
inherit legacyPackages;
|
inherit legacyPackages;
|
||||||
packages = lib.filterAttrs (name: value: lib.isDerivation value) legacyPackages;
|
packages = lib.filterAttrs (name: value: lib.isDerivation value) legacyPackages;
|
||||||
}
|
}
|
||||||
|
|
17
flake.nix
17
flake.nix
|
@ -3,16 +3,28 @@
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs";
|
nixpkgs.url = "github:NixOS/nixpkgs";
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
# Cannot override nixpkgs input as nix-unit fails to build with nixVersions.git
|
||||||
|
nix-unit.url = "github:nix-community/nix-unit";
|
||||||
};
|
};
|
||||||
outputs =
|
outputs =
|
||||||
{ self, nixpkgs, flake-utils, ... }:
|
{
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
flake-utils,
|
||||||
|
nix-unit,
|
||||||
|
...
|
||||||
|
}:
|
||||||
flake-utils.lib.eachDefaultSystem (
|
flake-utils.lib.eachDefaultSystem (
|
||||||
system:
|
system:
|
||||||
let
|
let
|
||||||
pkgs = nixpkgs.legacyPackages."${system}";
|
pkgs = nixpkgs.legacyPackages."${system}";
|
||||||
lib = nixpkgs.lib;
|
lib = nixpkgs.lib;
|
||||||
|
unit = nix-unit.packages."${system}".nix-unit;
|
||||||
in
|
in
|
||||||
import ./default.nix { inherit pkgs lib; }
|
import ./default.nix {
|
||||||
|
inherit pkgs lib;
|
||||||
|
nix-unit = unit;
|
||||||
|
}
|
||||||
)
|
)
|
||||||
// ({
|
// ({
|
||||||
nixosModules = {
|
nixosModules = {
|
||||||
|
@ -21,5 +33,6 @@
|
||||||
};
|
};
|
||||||
homeManagerModules.nvim-lazy = import ./modules/nvim-lazy/homeManager.nix;
|
homeManagerModules.nvim-lazy = import ./modules/nvim-lazy/homeManager.nix;
|
||||||
homeManagerModule = self.homeManagerModules.nvim-lazy;
|
homeManagerModule = self.homeManagerModules.nvim-lazy;
|
||||||
|
tests = import ./tests { inherit (nixpkgs) lib; };
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
38
tests/default.nix
Normal file
38
tests/default.nix
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
lib ? (import <nixpkgs> { }).lib,
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
# pkgs stub to mock calls to pkgs
|
||||||
|
pkgs = rec {
|
||||||
|
writeTextFile =
|
||||||
|
{
|
||||||
|
name,
|
||||||
|
text,
|
||||||
|
executable ? false,
|
||||||
|
destination ? "",
|
||||||
|
checkPhase ? "",
|
||||||
|
meta ? { },
|
||||||
|
allowSubstitutes ? false,
|
||||||
|
preferLocalBuild ? true,
|
||||||
|
derivationArgs ? { },
|
||||||
|
}@set:
|
||||||
|
set;
|
||||||
|
writeTextDir =
|
||||||
|
path: text:
|
||||||
|
writeTextFile {
|
||||||
|
inherit text;
|
||||||
|
name = builtins.baseNameOf path;
|
||||||
|
destination = "/${path}";
|
||||||
|
};
|
||||||
|
symlinkJoin = { name, paths }@set: set;
|
||||||
|
stylua = "";
|
||||||
|
vimPlugins.lazy-nvim = "";
|
||||||
|
};
|
||||||
|
luaUtils = import ../pkgs/luaUtils.nix { inherit lib pkgs; };
|
||||||
|
lazyUtils = import ../pkgs/lazyUtils.nix { inherit lib pkgs luaUtils; };
|
||||||
|
in
|
||||||
|
{
|
||||||
|
luaUtils = import ./luaUtils.nix { inherit luaUtils; };
|
||||||
|
lazyUtils = import ./lazyUtils.nix { inherit lazyUtils; };
|
||||||
|
}
|
0
tests/empty.txt
Normal file
0
tests/empty.txt
Normal file
68
tests/lazyUtils.nix
Normal file
68
tests/lazyUtils.nix
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
{ lazyUtils }:
|
||||||
|
|
||||||
|
let
|
||||||
|
nullPlugin = {
|
||||||
|
name = null;
|
||||||
|
short = null;
|
||||||
|
dir = null;
|
||||||
|
};
|
||||||
|
miniDrv = builtins.derivation {
|
||||||
|
name = "test";
|
||||||
|
pname = "test";
|
||||||
|
builder = "test";
|
||||||
|
system = "test";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
helpers = {
|
||||||
|
getName = {
|
||||||
|
testName = {
|
||||||
|
expr = lazyUtils.helpers.getName (nullPlugin // { name = "nameTest"; });
|
||||||
|
expected = "nameTest";
|
||||||
|
};
|
||||||
|
testShort = {
|
||||||
|
expr = lazyUtils.helpers.getName (nullPlugin // { short = "shortTest"; });
|
||||||
|
expected = "shortTest";
|
||||||
|
};
|
||||||
|
testDir = {
|
||||||
|
expr = lazyUtils.helpers.getName (nullPlugin // { dir = ./empty.txt; });
|
||||||
|
expected = "empty.txt";
|
||||||
|
};
|
||||||
|
testDrv = {
|
||||||
|
expr = lazyUtils.helpers.getName (nullPlugin // { dir = miniDrv; });
|
||||||
|
expected = "test";
|
||||||
|
};
|
||||||
|
testInvalidInput = {
|
||||||
|
expr = lazyUtils.helpers.getName { };
|
||||||
|
expectedError = {
|
||||||
|
type = "ThrownError";
|
||||||
|
# For some reason there is whitespace after the newline
|
||||||
|
msg = "Could not determine a plugin name.\n +\\{\\}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
getKey = { };
|
||||||
|
pluginWrapper = {
|
||||||
|
testShort = {
|
||||||
|
expr = lazyUtils.helpers.pluginWrapper "test";
|
||||||
|
expected = {
|
||||||
|
short = "test";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testDrv = {
|
||||||
|
expr = lazyUtils.helpers.pluginWrapper miniDrv;
|
||||||
|
expected = {
|
||||||
|
dir = miniDrv;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testSet = {
|
||||||
|
expr = lazyUtils.helpers.pluginWrapper { };
|
||||||
|
expected = { };
|
||||||
|
};
|
||||||
|
testInvalidInput = {
|
||||||
|
expr = lazyUtils.helpers.pluginWrapper null;
|
||||||
|
expectedError.type = "AssertionError";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
181
tests/luaUtils.nix
Normal file
181
tests/luaUtils.nix
Normal file
|
@ -0,0 +1,181 @@
|
||||||
|
{ luaUtils }:
|
||||||
|
|
||||||
|
let
|
||||||
|
miniDrv = builtins.derivation {
|
||||||
|
name = "test";
|
||||||
|
builder = "test";
|
||||||
|
system = "test";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
nullToLua = {
|
||||||
|
testNull = {
|
||||||
|
expr = luaUtils.nullToLua null;
|
||||||
|
expected = "nil";
|
||||||
|
};
|
||||||
|
testInvalidInput = {
|
||||||
|
expr = luaUtils.nullToLua { };
|
||||||
|
expectedError.type = "AssertionError";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
boolToLua = {
|
||||||
|
testTrue = {
|
||||||
|
expr = luaUtils.boolToLua true;
|
||||||
|
expected = "true";
|
||||||
|
};
|
||||||
|
testFalse = {
|
||||||
|
expr = luaUtils.boolToLua false;
|
||||||
|
expected = "false";
|
||||||
|
};
|
||||||
|
testInvalidInput = {
|
||||||
|
expr = luaUtils.boolToLua { };
|
||||||
|
expectedError.type = "AssertionError";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
stringToLua = {
|
||||||
|
testEmptyString = {
|
||||||
|
expr = luaUtils.stringToLua "";
|
||||||
|
expected = ''""'';
|
||||||
|
};
|
||||||
|
testSimpleString = {
|
||||||
|
expr = luaUtils.stringToLua "test";
|
||||||
|
expected = ''"test"'';
|
||||||
|
};
|
||||||
|
testPath = {
|
||||||
|
expr = luaUtils.stringToLua ./empty.txt;
|
||||||
|
expected = ''"/nix/store/sfmk8wid8fzwnvzcwvw8sgblj2xz4n58-empty.txt"'';
|
||||||
|
};
|
||||||
|
testInvalidInput = {
|
||||||
|
expr = luaUtils.stringToLua { };
|
||||||
|
expectedError.type = "AssertionError";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
functionToLua = {
|
||||||
|
testEmptyString = {
|
||||||
|
expr = luaUtils.functionToLua (_: "");
|
||||||
|
expected = "";
|
||||||
|
};
|
||||||
|
testSimpleString = {
|
||||||
|
expr = luaUtils.functionToLua (_: "test");
|
||||||
|
expected = "test";
|
||||||
|
};
|
||||||
|
testFunctionArgs = {
|
||||||
|
expr = luaUtils.functionToLua (lua: luaUtils == lua.luaUtils);
|
||||||
|
expected = true;
|
||||||
|
};
|
||||||
|
testInvalidInput = {
|
||||||
|
expr = luaUtils.functionToLua { };
|
||||||
|
expectedError.type = "AssertionError";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
numberToLua = {
|
||||||
|
testInt = {
|
||||||
|
expr = luaUtils.numberToLua 42;
|
||||||
|
expected = "42";
|
||||||
|
};
|
||||||
|
testNegativeInt = {
|
||||||
|
expr = luaUtils.numberToLua (-1);
|
||||||
|
expected = "-1";
|
||||||
|
};
|
||||||
|
testFloat = {
|
||||||
|
expr = luaUtils.numberToLua 3.141;
|
||||||
|
expected = "3.141";
|
||||||
|
};
|
||||||
|
testNegativeFloat = {
|
||||||
|
expr = luaUtils.numberToLua (-3.141);
|
||||||
|
expected = "-3.141";
|
||||||
|
};
|
||||||
|
# Nix cannot properly represent double precision floats
|
||||||
|
# builtins.toJSON cutoff point seems to be longer than lua rounding precision
|
||||||
|
# TODO: Check for smallest unrounded 64bit float.
|
||||||
|
# (nix) builtins.toJSON 3.1415926535897932 => "3.141592653589793"
|
||||||
|
# (lua) print(3.1415926535897932) => 3.1415926535898
|
||||||
|
# https://github.com/NixOS/nix/issues/5733
|
||||||
|
testFloatCutoff = {
|
||||||
|
expr = luaUtils.numberToLua 3.141592653589793;
|
||||||
|
expected = "3.141592653589793";
|
||||||
|
};
|
||||||
|
testInvalidInput = {
|
||||||
|
expr = luaUtils.numberToLua { };
|
||||||
|
expectedError.type = "AssertionError";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
listToLua = {
|
||||||
|
testEmptyList = {
|
||||||
|
expr = luaUtils.listToLua [ ];
|
||||||
|
expected = "{}";
|
||||||
|
};
|
||||||
|
testEmptyUnpackedList = {
|
||||||
|
expr = luaUtils.listToLua [ "__unpack" ];
|
||||||
|
expected = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
setToLua = {
|
||||||
|
testEmptySet = {
|
||||||
|
expr = luaUtils.setToLua { };
|
||||||
|
expected = "{}";
|
||||||
|
};
|
||||||
|
testEmptyUnpackedSet = {
|
||||||
|
expr = luaUtils.setToLua { __unpack = true; };
|
||||||
|
expected = "";
|
||||||
|
};
|
||||||
|
testDerivation = {
|
||||||
|
expr = luaUtils.setToLua miniDrv;
|
||||||
|
expected = ''"/nix/store/x9sny7pilv8rdsvqlkf0skfqy30xpp2l-test"'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
toLua = {
|
||||||
|
testNull = {
|
||||||
|
expr = luaUtils.toLua null;
|
||||||
|
expected = "nil";
|
||||||
|
};
|
||||||
|
testBool = {
|
||||||
|
expr = luaUtils.toLua true;
|
||||||
|
expected = "true";
|
||||||
|
};
|
||||||
|
testString = {
|
||||||
|
expr = luaUtils.toLua "";
|
||||||
|
expected = ''""'';
|
||||||
|
};
|
||||||
|
testFunction = {
|
||||||
|
expr = luaUtils.toLua (_: "");
|
||||||
|
expected = "";
|
||||||
|
};
|
||||||
|
testPath = {
|
||||||
|
expr = luaUtils.toLua ./empty.txt;
|
||||||
|
expected = ''"/nix/store/sfmk8wid8fzwnvzcwvw8sgblj2xz4n58-empty.txt"'';
|
||||||
|
};
|
||||||
|
testInt = {
|
||||||
|
expr = luaUtils.toLua 42;
|
||||||
|
expected = "42";
|
||||||
|
};
|
||||||
|
testFloat = {
|
||||||
|
expr = luaUtils.toLua 3.141;
|
||||||
|
expected = "3.141";
|
||||||
|
};
|
||||||
|
testList = {
|
||||||
|
expr = luaUtils.toLua [ ];
|
||||||
|
expected = "{}";
|
||||||
|
};
|
||||||
|
testSet = {
|
||||||
|
expr = luaUtils.toLua { };
|
||||||
|
expected = "{}";
|
||||||
|
};
|
||||||
|
testDerivation = {
|
||||||
|
expr = luaUtils.setToLua miniDrv;
|
||||||
|
expected = ''"/nix/store/x9sny7pilv8rdsvqlkf0skfqy30xpp2l-test"'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
testWriteLuaFileDir = {
|
||||||
|
expr = luaUtils.writeLuaFileDir "lua/lazyWrapper/plugins/my_plugin" "return {}";
|
||||||
|
expected = {
|
||||||
|
name = "my_plugin";
|
||||||
|
destination = "/lua/lazyWrapper/plugins/my_plugin.lua";
|
||||||
|
text = "return {}";
|
||||||
|
# TODO: Check writeText function and remove duplicate '/' either in destination or checkPhase
|
||||||
|
checkPhase = ''
|
||||||
|
/bin/stylua $out//lua/lazyWrapper/plugins/my_plugin.lua
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue