aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar BanceDev 2024-09-12 09:13:01 -0400
committerGravatar BanceDev 2024-09-12 09:13:01 -0400
commit2870751be3f8874378f1a383e6d264b87195580d (patch)
treef4a2d13121723140cd44bebc69b01c7db48a6c21
parentupdated buffer size for date to account for compiler warning (diff)
added e2e testing to cover basic shell functionality
-rw-r--r--src/lua_api.c6
-rw-r--r--src/lush.c3
-rw-r--r--src/lush.h1
-rw-r--r--test/args_test.lua28
-rw-r--r--test/env_test.lua30
-rw-r--r--test/filecheck_test.lua46
-rw-r--r--test/history_test.lua38
-rw-r--r--test/pipes_test.lua25
-rw-r--r--test/run_tests.lua35
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;
diff --git a/src/lush.c b/src/lush.c
index 5b6fca1..f04d8d7 100644
--- a/src/lush.c
+++ b/src/lush.c
@@ -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) {
diff --git a/src/lush.h b/src/lush.h
index 27cf5db..15d4d71 100644
--- a/src/lush.h
+++ b/src/lush.h
@@ -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")