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;
 }