diff --git a/include/utils.h b/include/utils.h index 57345da8a0ef78ebb377ac1ec600b5eba6a9faaa..a84b441cdf2d4b14b2463dad22055dec0165f270 100644 --- a/include/utils.h +++ b/include/utils.h @@ -2,6 +2,6 @@ #define MYSH_UTILS_H_ void mysh_parse_command(const char* command, - int *argc, char** argv); + int *argc, char*** argv); #endif // MYSH_UTILS_H_ diff --git a/src/utils.c b/src/utils.c index 681ab85fb646ab1f1201f052b898177b042adcd3..619c771cd29d38dcf0e265e8688b55e1cfe3d6a0 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1,7 +1,7 @@ #include "utils.h" void mysh_parse_command(const char* command, - int *argc, char** argv) + int *argc, char*** argv) { // TODO: Fill this! } diff --git a/tests/lib/libgtest.a b/tests/lib/libgtest.a new file mode 100644 index 0000000000000000000000000000000000000000..2259a7b2bb52b1ebc285c390feb2007ff5f71b85 Binary files /dev/null and b/tests/lib/libgtest.a differ diff --git a/tests/lib/libgtest_main.a b/tests/lib/libgtest_main.a new file mode 100644 index 0000000000000000000000000000000000000000..f32ddc96e1e1b6b40a43d5da2e661109ab2c5c7d Binary files /dev/null and b/tests/lib/libgtest_main.a differ diff --git a/tests/src/command_parsing_test.cc b/tests/src/command_parsing_test.cc index 19165c13892f15d6870b7bfdc5fcfef82ed698d9..e7f06016900d4ee2940f1c2ae6b07955d5b9f411 100644 --- a/tests/src/command_parsing_test.cc +++ b/tests/src/command_parsing_test.cc @@ -6,108 +6,97 @@ extern "C" { #include <stdlib.h> -static char** alloc_string_array(int num_str, int size_str); -static void free_string_array(char** argv, int num_str); +static void free_string_array(char*** argv, int num_str); TEST(CommandParsingTest, BasicCommand) { - char** argv = alloc_string_array(2, 1024); + char** argv = NULL; int argc = -1; - mysh_parse_command("cd test", &argc, argv); + mysh_parse_command("cd test", &argc, &argv); - EXPECT_EQ(argc, 2); + ASSERT_EQ(argc, 2); EXPECT_STREQ(argv[0], "cd"); EXPECT_STREQ(argv[1], "test"); - free_string_array(argv, 2); + free_string_array(&argv, argc); } TEST(CommandParsingTest, SingleCommand) { - char** argv = alloc_string_array(1, 1024); + char** argv = NULL; int argc = -1; - mysh_parse_command("pwd", &argc, argv); + mysh_parse_command("pwd", &argc, &argv); - EXPECT_EQ(argc, 1); + ASSERT_EQ(argc, 1); EXPECT_STREQ(argv[0], "pwd"); - free_string_array(argv, 1); + free_string_array(&argv, argc); } TEST(CommandParsingTest, Redirection1) { - char** argv = alloc_string_array(3, 1024); + char** argv = NULL; int argc = -1; - mysh_parse_command("pwd > curdir.txt", &argc, argv); + mysh_parse_command("pwd > curdir.txt", &argc, &argv); - EXPECT_EQ(argc, 3); + ASSERT_EQ(argc, 3); EXPECT_STREQ(argv[0], "pwd"); EXPECT_STREQ(argv[1], ">"); EXPECT_STREQ(argv[2], "curdir.txt"); - free_string_array(argv, 3); + free_string_array(&argv, argc); } TEST(CommandParsingTest, Redirection2) { - char** argv = alloc_string_array(5, 1024); + char** argv = NULL; int argc = -1; - mysh_parse_command("pwd > curdir.txt | less", &argc, argv); + mysh_parse_command("pwd > curdir.txt | less", &argc, &argv); - EXPECT_EQ(argc, 5); + ASSERT_EQ(argc, 5); EXPECT_STREQ(argv[0], "pwd"); EXPECT_STREQ(argv[1], ">"); EXPECT_STREQ(argv[2], "curdir.txt"); EXPECT_STREQ(argv[3], "|"); EXPECT_STREQ(argv[4], "less"); - free_string_array(argv, 5); + free_string_array(&argv, argc); } TEST(CommandParsingTest, SpaceBeforeString) { - char** argv = alloc_string_array(5, 1024); + char** argv = NULL; int argc = -1; - mysh_parse_command(" \n \t pwd > curdir.txt | less", &argc, argv); + mysh_parse_command(" \n \t pwd > curdir.txt | less", &argc, &argv); - EXPECT_EQ(argc, 5); + ASSERT_EQ(argc, 5); EXPECT_STREQ(argv[0], "pwd"); EXPECT_STREQ(argv[1], ">"); EXPECT_STREQ(argv[2], "curdir.txt"); EXPECT_STREQ(argv[3], "|"); EXPECT_STREQ(argv[4], "less"); - free_string_array(argv, 5); + free_string_array(&argv, argc); } TEST(CommandParsingTest, EmptyCommand) { - char** argv = alloc_string_array(1, 1024); + char** argv = NULL; int argc = -1; - mysh_parse_command(" \n \t ", &argc, argv); + mysh_parse_command(" \n \t ", &argc, &argv); - EXPECT_EQ(argc, 1); + ASSERT_EQ(argc, 1); EXPECT_STREQ(argv[0], ""); - free_string_array(argv, 1); + free_string_array(&argv, argc); } -static char** alloc_string_array(int num_str, int size_str) { - char** argv; - - argv = (char**)malloc(num_str); - +static void free_string_array(char*** argv, int num_str) { for (int i = 0; i < num_str; ++i) { - argv[i] = (char*)malloc(size_str); + free((*argv)[i]); } - return argv; -} - -static void free_string_array(char** argv, int num_str) { - for (int i = 0; i < num_str; ++i) { - free(argv[i]); - } + free(*argv); - free(argv); + argv = NULL; }