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

Fix compatibile issue on test

parent 641757e9
Branches
No related tags found
No related merge requests found
......@@ -116,3 +116,4 @@ tags
# End of https://www.gitignore.io/api/c,vim,c++,linux,cmake
mysh
mysh-test
......@@ -7,8 +7,8 @@ struct single_command
char** argv;
};
int evaluate_command(int n_commands, struct single_command (*commands)[]);
int evaluate_command(int n_commands, struct single_command (*commands)[512]);
void free_commands(int n_commands, struct single_command (*commands)[]);
void free_commands(int n_commands, struct single_command (*commands)[512]);
#endif // MYSH_COMMANDS_H_
......@@ -5,7 +5,7 @@
void mysh_parse_command(const char* command,
int* n_commands,
struct single_command (*commands)[]);
struct single_command (*commands)[512]);
void parse_single_command(const char* command,
int *argc, char*** argv);
......
......@@ -28,7 +28,7 @@ static int is_built_in_command(const char* command_name)
/*
* Description: Currently this function only handles single built_in commands. You should modify this structure to launch process and offer pipeline functionality.
*/
int evaluate_command(int n_commands, struct single_command (*commands)[])
int evaluate_command(int n_commands, struct single_command (*commands)[512])
{
if (n_commands > 0) {
struct single_command* com = (*commands);
......@@ -58,7 +58,7 @@ int evaluate_command(int n_commands, struct single_command (*commands)[])
return 0;
}
void free_commands(int n_commands, struct single_command (*commands)[])
void free_commands(int n_commands, struct single_command (*commands)[512])
{
for (int i = 0; i < n_commands; ++i) {
struct single_command *com = (*commands) + i;
......
#ifdef __cplusplus
extern "C" {
#endif
#include "utils.h"
#include "commands.h"
#ifdef __cplusplus
}
#endif
#include "gtest/gtest.h"
#include <stdlib.h>
static void free_string_array(char*** argv, int num_str);
TEST(CommandParsingTest, BasicCommand) {
char** argv = NULL;
int argc = -1;
struct single_command commands[512];
int n_commands = 0;
mysh_parse_command("cd test", &argc, &argv);
mysh_parse_command("cd test", &n_commands, &commands);
ASSERT_EQ(argc, 2);
EXPECT_STREQ(argv[0], "cd");
EXPECT_STREQ(argv[1], "test");
ASSERT_EQ(n_commands, 1);
ASSERT_EQ(commands[0].argc, 2);
EXPECT_STREQ(commands[0].argv[0], "cd");
EXPECT_STREQ(commands[0].argv[1], "test");
free_string_array(&argv, argc);
free_commands(n_commands, &commands);
}
TEST(CommandParsingTest, SingleCommand) {
char** argv = NULL;
int argc = -1;
struct single_command commands[512];
int n_commands = 0;
mysh_parse_command("pwd", &argc, &argv);
mysh_parse_command("pwd", &n_commands, &commands);
ASSERT_EQ(argc, 1);
EXPECT_STREQ(argv[0], "pwd");
ASSERT_EQ(n_commands, 1);
ASSERT_EQ(commands[0].argc, 1);
EXPECT_STREQ(commands[0].argv[0], "pwd");
free_string_array(&argv, argc);
free_commands(n_commands, &commands);
}
TEST(CommandParsingTest, Redirection1) {
char** argv = NULL;
int argc = -1;
struct single_command commands[512];
int n_commands = 0;
mysh_parse_command("pwd > curdir.txt", &argc, &argv);
mysh_parse_command("pwd > curdir.txt", &n_commands, &commands);
ASSERT_EQ(argc, 3);
EXPECT_STREQ(argv[0], "pwd");
EXPECT_STREQ(argv[1], ">");
EXPECT_STREQ(argv[2], "curdir.txt");
ASSERT_EQ(n_commands, 1);
ASSERT_EQ(commands[0].argc, 3);
EXPECT_STREQ(commands[0].argv[0], "pwd");
EXPECT_STREQ(commands[0].argv[1], ">");
EXPECT_STREQ(commands[0].argv[2], "curdir.txt");
free_string_array(&argv, argc);
free_commands(n_commands, &commands);
}
TEST(CommandParsingTest, Redirection2) {
char** argv = NULL;
int argc = -1;
struct single_command commands[512];
int n_commands = 0;
mysh_parse_command("pwd > curdir.txt | less", &n_commands, &commands);
mysh_parse_command("pwd > curdir.txt | less", &argc, &argv);
ASSERT_EQ(n_commands, 2);
ASSERT_EQ(commands[0].argc, 3);
EXPECT_STREQ(commands[0].argv[0], "pwd");
EXPECT_STREQ(commands[0].argv[1], ">");
EXPECT_STREQ(commands[0].argv[2], "curdir.txt");
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");
ASSERT_EQ(commands[1].argc, 1);
EXPECT_STREQ(commands[1].argv[0], "less");
free_string_array(&argv, argc);
free_commands(n_commands, &commands);
}
TEST(CommandParsingTest, SpaceBeforeString) {
char** argv = NULL;
int argc = -1;
struct single_command commands[512];
int n_commands = 0;
mysh_parse_command(" \n \t pwd > curdir.txt | less", &argc, &argv);
mysh_parse_command(" \n \t pwd > curdir.txt | less", &n_commands, &commands);
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");
ASSERT_EQ(n_commands, 2);
ASSERT_EQ(commands[0].argc, 3);
EXPECT_STREQ(commands[0].argv[0], "pwd");
EXPECT_STREQ(commands[0].argv[1], ">");
EXPECT_STREQ(commands[0].argv[2], "curdir.txt");
free_string_array(&argv, argc);
ASSERT_EQ(commands[1].argc, 1);
EXPECT_STREQ(commands[1].argv[0], "less");
free_commands(n_commands, &commands);
}
TEST(CommandParsingTest, EmptyCommand) {
char** argv = NULL;
int argc = -1;
mysh_parse_command(" \n \t ", &argc, &argv);
struct single_command commands[512];
int n_commands = 0;
ASSERT_EQ(argc, 1);
EXPECT_STREQ(argv[0], "");
free_string_array(&argv, argc);
}
static void free_string_array(char*** argv, int num_str) {
for (int i = 0; i < num_str; ++i) {
free((*argv)[i]);
}
mysh_parse_command(" \n \t ", &n_commands, &commands);
free(*argv);
ASSERT_EQ(commands[0].argc, 1);
EXPECT_STREQ(commands[0].argv[0], "");
*argv = NULL;
free_commands(n_commands, &commands);
}
extern "C" {
#include "commands.h"
#include "built_in.h"
}
#include "gtest/gtest.h"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment