nix-community.nixvim/tests/lib-tests.nix

246 lines
4.6 KiB
Nix
Raw Normal View History

# For shorter test iterations run the following in the root of the repo:
# `echo ':b checks.${builtins.currentSystem}.lib-tests' | nix repl .`
{
lib,
pkgs,
helpers,
2024-05-05 19:39:35 +02:00
}:
let
luaNames = {
# Keywords in lua 5.1
keywords = [
"and"
"break"
"do"
"else"
"elseif"
"end"
"false"
"for"
"function"
"if"
"in"
"local"
"nil"
"not"
"or"
"repeat"
"return"
"then"
"true"
"until"
"while"
];
identifiers = [
"validIdentifier"
"valid_identifier"
"_also_valid_"
"_weirdNameFMT"
];
other = [
"1_starts_with_digit"
"01234"
"12340"
"kebab-case"
];
};
results = pkgs.lib.runTests {
testToLuaObject = {
expr = helpers.toLuaObject {
foo = "bar";
2024-05-05 19:39:35 +02:00
qux = [
1
2
3
];
};
expected = ''{foo = "bar", qux = {1, 2, 3}}'';
};
testToLuaObjectRawLua = {
2024-05-05 19:39:35 +02:00
expr = helpers.toLuaObject { __raw = "<lua code>"; };
expected = "<lua code>";
};
testToLuaObjectLuaTableMixingList = {
expr = helpers.toLuaObject {
"__unkeyed...." = "foo";
bar = "baz";
};
expected = ''{"foo", bar = "baz"}'';
};
testToLuaObjectNestedAttrs = {
expr = helpers.toLuaObject {
a = {
b = 1;
c = 2;
2024-05-05 19:39:35 +02:00
d = {
e = 3;
};
};
};
expected = ''{a = {b = 1, c = 2, d = {e = 3}}}'';
};
testToLuaObjectNestedList = {
2024-05-05 19:39:35 +02:00
expr = helpers.toLuaObject [
1
2
[
3
4
[
5
6
]
]
7
];
expected = "{1, 2, {3, 4, {5, 6}}, 7}";
};
testToLuaObjectNonStringPrims = {
expr = helpers.toLuaObject {
a = 1.0;
b = 2;
c = true;
d = false;
e = null;
};
expected = ''{a = 1.000000, b = 2, c = true, d = false}'';
};
testToLuaObjectNilPrim = {
expr = helpers.toLuaObject null;
expected = "nil";
};
testToLuaObjectStringPrim = {
expr = helpers.toLuaObject ''
foo\bar
baz'';
expected = ''"foo\\bar\nbaz"'';
};
testToLuaObjectFilters = {
expr = helpers.toLuaObject {
a = null;
2024-05-05 19:39:35 +02:00
b = { };
c = [ ];
d = {
e = null;
2024-05-05 19:39:35 +02:00
f = { };
};
};
expected = ''{}'';
};
testToLuaObjectEmptyTable = {
expr = helpers.toLuaObject {
a = null;
2024-05-05 19:39:35 +02:00
b = { };
c = {
__empty = null;
};
d = {
e = null;
2024-05-05 19:39:35 +02:00
f = { };
g = helpers.emptyTable;
};
};
expected = ''{c = { }, d = {g = { }}}'';
};
testToLuaObjectQuotedKeys = {
expr = helpers.toLuaObject {
"1_a" = "a";
_b = "b";
c = "c";
d-d = "d";
};
expected = ''{["1_a"] = "a", _b = "b", c = "c", ["d-d"] = "d"}'';
};
testIsLuaKeyword = {
expr = builtins.mapAttrs (_: builtins.filter helpers.lua.isKeyword) luaNames;
expected = {
keywords = [
"and"
"break"
"do"
"else"
"elseif"
"end"
"false"
"for"
"function"
"if"
"in"
"local"
"nil"
"not"
"or"
"repeat"
"return"
"then"
"true"
"until"
"while"
];
identifiers = [ ];
other = [ ];
};
};
testIsLuaIdentifier = {
expr = builtins.mapAttrs (_: builtins.filter helpers.lua.isIdentifier) luaNames;
expected = {
keywords = [ ];
identifiers = [
"validIdentifier"
"valid_identifier"
"_also_valid_"
"_weirdNameFMT"
];
other = [ ];
};
};
testUpperFirstChar = {
expr = map helpers.upperFirstChar [
"foo"
" foo"
"foo bar"
"UPPER"
"mIxEd"
];
expected = [
"Foo"
" foo"
"Foo bar"
"UPPER"
"MIxEd"
];
};
};
in
2024-05-05 19:39:35 +02:00
if results == [ ] then
pkgs.runCommand "lib-tests-success" { } "touch $out"
else
pkgs.runCommand "lib-tests-failure"
{
results = pkgs.lib.concatStringsSep "\n" (
builtins.map (result: ''
${result.name}:
expected: ${result.expected}
result: ${result.result}
2024-05-05 19:39:35 +02:00
'') results
);
2024-05-05 19:39:35 +02:00
}
''
echo -e "Tests failed:\\n\\n$results" >&2
exit 1
''