diff --git a/tests/src/command_parsing_test.cc b/tests/src/command_parsing_test.cc
index b7822c6b06b6c8fd554002099e44119ba23df29b..65925de33b7287a07e51480d8ff3dd93660611fd 100644
--- a/tests/src/command_parsing_test.cc
+++ b/tests/src/command_parsing_test.cc
@@ -6,23 +6,108 @@ 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);
+
 TEST(CommandParsingTest, BasicCommand) {
-  char** argv;
+  char** argv = alloc_string_array(2, 1024);
   int argc = -1;
 
-  argv = (char**)malloc(2);
-  for (int i = 0; i < 2; ++i) {
-    argv[i] = (char*)malloc(512);
-  }
-
   mysh_parse_command("cd test", &argc, argv);
 
   EXPECT_EQ(argc, 2);
   EXPECT_STREQ(argv[0], "cd");
   EXPECT_STREQ(argv[1], "test");
 
-  for (int i = 0; i < 2; ++i) {
+  free_string_array(argv, 2);
+}
+
+TEST(CommandParsingTest, SingleCommand) {
+  char** argv = alloc_string_array(1, 1024);
+  int argc = -1;
+
+  mysh_parse_command("pwd", &argc, argv);
+
+  EXPECT_EQ(argc, 1);
+  EXPECT_STREQ(argv[0], "pwd");
+
+  free_string_array(argv, 1);
+}
+
+TEST(CommandParsingTest, Redirection1) {
+  char** argv = alloc_string_array(3, 1024);
+  int argc = -1;
+
+  mysh_parse_command("pwd > curdir.txt", &argc, argv);
+
+  EXPECT_EQ(argc, 3);
+  EXPECT_STREQ(argv[0], "pwd");
+  EXPECT_STREQ(argv[1], ">");
+  EXPECT_STREQ(argv[2], "curdir.txt");
+
+  free_string_array(argv, 3);
+}
+
+TEST(CommandParsingTest, Redirection2) {
+  char** argv = alloc_string_array(5, 1024);
+  int argc = -1;
+
+  mysh_parse_command("pwd > curdir.txt | less", &argc, argv);
+
+  EXPECT_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);
+}
+
+TEST(CommandParsingTest, SpaceBeforeString) {
+  char** argv = alloc_string_array(5, 1024);
+  int argc = -1;
+
+  mysh_parse_command("    \n  \t pwd > curdir.txt | less", &argc, argv);
+
+  EXPECT_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);
+}
+
+TEST(CommandParsingTest, EmptyCommand) {
+  char** argv = alloc_string_array(1, 1024);
+  int argc = -1;
+
+  mysh_parse_command("", &argc, argv);
+
+  EXPECT_EQ(argc, 1);
+  EXPECT_STREQ(argv[0], "");
+
+  free_string_array(argv, 1);
+}
+
+static char** alloc_string_array(int num_str, int size_str) {
+  char** argv;
+
+  argv = (char**)malloc(num_str);
+
+  for (int i = 0; i < num_str; ++i) {
+    argv[i] = (char*)malloc(size_str);
+  }
+
+  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);
 }