# 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, }: 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"; qux = [ 1 2 3 ]; }; expected = ''{foo = "bar",qux = {1,2,3}}''; }; testToLuaObjectRawLua = { expr = helpers.toLuaObject { __raw = ""; }; expected = ""; }; testToLuaObjectLuaTableMixingList = { expr = helpers.toLuaObject { "__unkeyed...." = "foo"; bar = "baz"; }; expected = ''{"foo",bar = "baz"}''; }; testToLuaObjectNestedAttrs = { expr = helpers.toLuaObject { a = { b = 1; c = 2; d = { e = 3; }; }; }; expected = ''{a = {b = 1,c = 2,d = {e = 3}}}''; }; testToLuaObjectNestedList = { 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; b = { }; c = [ ]; d = { e = null; f = { }; }; }; expected = ''{}''; }; testToLuaObjectEmptyTable = { expr = helpers.toLuaObject { a = null; b = { }; c = { __empty = null; }; d = { e = null; 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 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} '') results ); } '' echo -e "Tests failed:\\n\\n$results" >&2 exit 1 ''