diff options
| author | 2024-09-12 09:13:01 -0400 | |
|---|---|---|
| committer | 2024-09-12 09:13:01 -0400 | |
| commit | 2870751be3f8874378f1a383e6d264b87195580d (patch) | |
| tree | f4a2d13121723140cd44bebc69b01c7db48a6c21 | |
| parent | updated buffer size for date to account for compiler warning (diff) | |
added e2e testing to cover basic shell functionality
| -rw-r--r-- | src/lua_api.c | 6 | ||||
| -rw-r--r-- | src/lush.c | 3 | ||||
| -rw-r--r-- | src/lush.h | 1 | ||||
| -rw-r--r-- | test/args_test.lua | 28 | ||||
| -rw-r--r-- | test/env_test.lua | 30 | ||||
| -rw-r--r-- | test/filecheck_test.lua | 46 | ||||
| -rw-r--r-- | test/history_test.lua | 38 | ||||
| -rw-r--r-- | test/pipes_test.lua | 25 | ||||
| -rw-r--r-- | test/run_tests.lua | 35 |
9 files changed, 208 insertions, 4 deletions
diff --git a/src/lua_api.c b/src/lua_api.c index 20f089c..77417db 100644 --- a/src/lua_api.c +++ b/src/lua_api.c @@ -94,8 +94,11 @@ void lua_run_init(lua_State *L) { // -- C funtions -- static int execute_command(lua_State *L, const char *line) { int status = 0; - char **commands = lush_split_pipes((char *)line); + lush_push_history(line); + char *expanded_line = lush_resolve_aliases((char *)line); + char **commands = lush_split_pipes(expanded_line); char ***args = lush_split_args(commands, &status); + if (status == -1) { fprintf(stderr, "lush: Expected end of quoted string\n"); } else if (lush_run(L, args, status) == 0) { @@ -105,7 +108,6 @@ static int execute_command(lua_State *L, const char *line) { for (int i = 0; args[i]; i++) { free(args[i]); } - lush_push_history(line); free(args); free(commands); return status; @@ -881,8 +881,7 @@ char *lush_read_line() { return buffer; } -// -- static helper for resolving aliases -- -static char *lush_resolve_aliases(char *line) { +char *lush_resolve_aliases(char *line) { // Allocate memory for the new string char *result = (char *)malloc(BUFFER_SIZE); if (!result) { @@ -22,6 +22,7 @@ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. void lush_add_alias(const char *alias, const char *command); char *lush_get_alias(char *alias); +char *lush_resolve_aliases(char *line); int lush_cd(lua_State *L, char ***args); int lush_help(lua_State *L, char ***args); diff --git a/test/args_test.lua b/test/args_test.lua new file mode 100644 index 0000000..d14fd73 --- /dev/null +++ b/test/args_test.lua @@ -0,0 +1,28 @@ +--[[ +Copyright (c) 2024, Lance Borden +All rights reserved. + +This software is licensed under the BSD 3-Clause License. +You may obtain a copy of the license at: +https://opensource.org/licenses/BSD-3-Clause + +Redistribution and use in source and binary forms, with or without +modification, are permitted under the conditions stated in the BSD 3-Clause +License. + +THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +]] + +if args == nil then + print("args test failed, no args found ❌\n") + return +else + print("args:") + for i = 1, #args do + print(args[i]) + end +end + +print("args test passed ✅\n") diff --git a/test/env_test.lua b/test/env_test.lua new file mode 100644 index 0000000..972a730 --- /dev/null +++ b/test/env_test.lua @@ -0,0 +1,30 @@ +--[[ +Copyright (c) 2024, Lance Borden +All rights reserved. + +This software is licensed under the BSD 3-Clause License. +You may obtain a copy of the license at: +https://opensource.org/licenses/BSD-3-Clause + +Redistribution and use in source and binary forms, with or without +modification, are permitted under the conditions stated in the BSD 3-Clause +License. + +THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +]] + +lush.setenv("ENVTEST", "envtest") +if lush.getenv("ENVTEST") == "envtest" then + print("setenv test passed ✅\n") +else + print("setenv test failed ❌\n") +end + +lush.unsetenv("ENVTEST") +if lush.getenv("ENVTEST") == nil then + print("unsetenv test passed ✅\n") +else + print("unsetenv test failed ❌\n") +end diff --git a/test/filecheck_test.lua b/test/filecheck_test.lua new file mode 100644 index 0000000..af0c130 --- /dev/null +++ b/test/filecheck_test.lua @@ -0,0 +1,46 @@ +--[[ +Copyright (c) 2024, Lance Borden +All rights reserved. + +This software is licensed under the BSD 3-Clause License. +You may obtain a copy of the license at: +https://opensource.org/licenses/BSD-3-Clause + +Redistribution and use in source and binary forms, with or without +modification, are permitted under the conditions stated in the BSD 3-Clause +License. + +THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +]] + +if lush.exists("~/.lush/scripts/example.lua") then + print("exists test passed ✅\n") +else + print("exists test failed ❌\n") +end + +if lush.isFile("~/.lush/scripts/example.lua") then + print("isFile test passed ✅\n") +else + print("isFile test failed ❌\n") +end + +if not lush.isDirectory("~/.lush/scripts/example.lua") then + print("isDirectory test passed ✅\n") +else + print("isDirectory test failed ❌\n") +end + +if lush.isReadable("~/.lush/scripts/example.lua") then + print("isReadable test passed ✅\n") +else + print("isReadable test failed ❌\n") +end + +if lush.isWriteable("~/.lush/scripts/example.lua") then + print("isWriteable test passed ✅\n") +else + print("isWriteable test failed ❌\n") +end diff --git a/test/history_test.lua b/test/history_test.lua new file mode 100644 index 0000000..5cf607a --- /dev/null +++ b/test/history_test.lua @@ -0,0 +1,38 @@ +--[[ +Copyright (c) 2024, Lance Borden +All rights reserved. + +This software is licensed under the BSD 3-Clause License. +You may obtain a copy of the license at: +https://opensource.org/licenses/BSD-3-Clause + +Redistribution and use in source and binary forms, with or without +modification, are permitted under the conditions stated in the BSD 3-Clause +License. + +THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +]] + +if lush.lastHistory() == "history_test.lua" then + print("lastHistory test passed ✅\n") +else + print("lastHistory test failed ❌\n") +end + +if lush.getHistory(1) == lush.lastHistory() then + -- ensure that piping history is stored correctly + if lush.getHistory(3) == 'cat "example.lua" | grep "hello" | sort | uniq' then + -- ensure args history is stored correctly + if lush.getHistory(5) == "args_test.lua testarg1 testarg2 testarg3" then + print("getHistory test passed ✅\n") + else + print("getHistory test failed at args history ❌\n") + end + else + print("getHistory test failed at piping history ❌\n") + end +else + print("getHistory test failed at lastHistory ❌\n") +end diff --git a/test/pipes_test.lua b/test/pipes_test.lua new file mode 100644 index 0000000..46000e3 --- /dev/null +++ b/test/pipes_test.lua @@ -0,0 +1,25 @@ +--[[ +Copyright (c) 2024, Lance Borden +All rights reserved. + +This software is licensed under the BSD 3-Clause License. +You may obtain a copy of the license at: +https://opensource.org/licenses/BSD-3-Clause + +Redistribution and use in source and binary forms, with or without +modification, are permitted under the conditions stated in the BSD 3-Clause +License. + +THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +]] + +local cwd = lush.getcwd() +lush.cd("~/.lush/scripts") +if lush.exec('cat "example.lua" | grep "hello" | sort | uniq') then + print("piping test passed ✅\n") +else + print("piping test failed ❌\n") +end +lush.cd(cwd) diff --git a/test/run_tests.lua b/test/run_tests.lua new file mode 100644 index 0000000..e861326 --- /dev/null +++ b/test/run_tests.lua @@ -0,0 +1,35 @@ +--[[ +Copyright (c) 2024, Lance Borden +All rights reserved. + +This software is licensed under the BSD 3-Clause License. +You may obtain a copy of the license at: +https://opensource.org/licenses/BSD-3-Clause + +Redistribution and use in source and binary forms, with or without +modification, are permitted under the conditions stated in the BSD 3-Clause +License. + +THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +]] + +print("Starting Lunar Shell End-to-End Testing...\n") +print("Entering Debug Mode...") +lush.debug(true) + +print("Testing Args...") +lush.exec("args_test.lua testarg1 testarg2 testarg3") + +print("\nTesting Piping...") +lush.exec("pipes_test.lua") + +print("\nTesting File Checks...") +lush.exec("filecheck_test.lua") + +print("\nTesting History...") +lush.exec("history_test.lua") + +print("\nTesting Environment Variables...") +lush.exec("env_test.lua") |
