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
Branches
No related tags found
No related merge requests found
......@@ -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_
#include "utils.h"
void mysh_parse_command(const char* command,
int *argc, char** argv)
int *argc, char*** argv)
{
// TODO: Fill this!
}
File added
File added
......@@ -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);
}
return argv;
free((*argv)[i]);
}
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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment