Skip to content
Snippets Groups Projects
Commit 244fa3f7 authored by Jaewon Choi's avatar Jaewon Choi
Browse files

Change interface of mysh_parse_command

parent 482c8cdc
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
#define MYSH_UTILS_H_ #define MYSH_UTILS_H_
void mysh_parse_command(const char* command, void mysh_parse_command(const char* command,
int *argc, char** argv); int *argc, char*** argv);
#endif // MYSH_UTILS_H_ #endif // MYSH_UTILS_H_
#include "utils.h" #include "utils.h"
void mysh_parse_command(const char* command, void mysh_parse_command(const char* command,
int *argc, char** argv) int *argc, char*** argv)
{ {
// TODO: Fill this! // TODO: Fill this!
} }
File added
File added
...@@ -6,108 +6,97 @@ extern "C" { ...@@ -6,108 +6,97 @@ extern "C" {
#include <stdlib.h> #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) { TEST(CommandParsingTest, BasicCommand) {
char** argv = alloc_string_array(2, 1024); char** argv = NULL;
int argc = -1; 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[0], "cd");
EXPECT_STREQ(argv[1], "test"); EXPECT_STREQ(argv[1], "test");
free_string_array(argv, 2); free_string_array(&argv, argc);
} }
TEST(CommandParsingTest, SingleCommand) { TEST(CommandParsingTest, SingleCommand) {
char** argv = alloc_string_array(1, 1024); char** argv = NULL;
int argc = -1; 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"); EXPECT_STREQ(argv[0], "pwd");
free_string_array(argv, 1); free_string_array(&argv, argc);
} }
TEST(CommandParsingTest, Redirection1) { TEST(CommandParsingTest, Redirection1) {
char** argv = alloc_string_array(3, 1024); char** argv = NULL;
int argc = -1; 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[0], "pwd");
EXPECT_STREQ(argv[1], ">"); EXPECT_STREQ(argv[1], ">");
EXPECT_STREQ(argv[2], "curdir.txt"); EXPECT_STREQ(argv[2], "curdir.txt");
free_string_array(argv, 3); free_string_array(&argv, argc);
} }
TEST(CommandParsingTest, Redirection2) { TEST(CommandParsingTest, Redirection2) {
char** argv = alloc_string_array(5, 1024); char** argv = NULL;
int argc = -1; 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[0], "pwd");
EXPECT_STREQ(argv[1], ">"); EXPECT_STREQ(argv[1], ">");
EXPECT_STREQ(argv[2], "curdir.txt"); EXPECT_STREQ(argv[2], "curdir.txt");
EXPECT_STREQ(argv[3], "|"); EXPECT_STREQ(argv[3], "|");
EXPECT_STREQ(argv[4], "less"); EXPECT_STREQ(argv[4], "less");
free_string_array(argv, 5); free_string_array(&argv, argc);
} }
TEST(CommandParsingTest, SpaceBeforeString) { TEST(CommandParsingTest, SpaceBeforeString) {
char** argv = alloc_string_array(5, 1024); char** argv = NULL;
int argc = -1; 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[0], "pwd");
EXPECT_STREQ(argv[1], ">"); EXPECT_STREQ(argv[1], ">");
EXPECT_STREQ(argv[2], "curdir.txt"); EXPECT_STREQ(argv[2], "curdir.txt");
EXPECT_STREQ(argv[3], "|"); EXPECT_STREQ(argv[3], "|");
EXPECT_STREQ(argv[4], "less"); EXPECT_STREQ(argv[4], "less");
free_string_array(argv, 5); free_string_array(&argv, argc);
} }
TEST(CommandParsingTest, EmptyCommand) { TEST(CommandParsingTest, EmptyCommand) {
char** argv = alloc_string_array(1, 1024); char** argv = NULL;
int argc = -1; 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], ""); 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) { static void free_string_array(char*** argv, int num_str) {
char** argv;
argv = (char**)malloc(num_str);
for (int i = 0; i < num_str; ++i) { 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) { free(*argv);
for (int i = 0; i < num_str; ++i) {
free(argv[i]);
}
free(argv); argv = NULL;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment