From 03b8c017f2f9198d86a0808995699c5b33a2d910 Mon Sep 17 00:00:00 2001
From: Jaewon Choi <jaewon.james.choi@gmail.com>
Date: Tue, 19 Sep 2017 00:44:50 +0900
Subject: [PATCH] Add command validating test

---
 Makefile                           |  4 +-
 include/commands.h                 | 37 ++++++++++++++++
 src/commands.c                     |  2 +
 tests/src/command_validate_test.cc | 68 ++++++++++++++++++++++++++++++
 4 files changed, 109 insertions(+), 2 deletions(-)
 create mode 100644 tests/src/command_validate_test.cc

diff --git a/Makefile b/Makefile
index fddb9c1..81ed931 100644
--- a/Makefile
+++ b/Makefile
@@ -12,9 +12,9 @@ mysh: $(OBJ)
 
 # For testing
 CXX=g++ -std=c++11
-TESTING_FLAGS=-I./tests/src -I./tests/include $(CFLAGS)
+TESTING_FLAGS=-I./tests/src -I./tests/include $(CFLAGS) -Wno-write-strings
 TESTING_LIB=-lgtest -lgtest_main -L./tests/lib -lpthread $(LIB)
-TESTING_SRC=./tests/src/command_parsing_test.cc
+TESTING_SRC=./tests/src/command_parsing_test.cc ./tests/src/command_validate_test.cc
 TESTING_EXE=mysh-test
 
 test: $(OBJ)
diff --git a/include/commands.h b/include/commands.h
index cef8739..0afab8b 100644
--- a/include/commands.h
+++ b/include/commands.h
@@ -1,10 +1,47 @@
 #ifndef MYSH_COMMANDS_H_
 #define MYSH_COMMANDS_H_
 
+/**
+  do_cd(argc, argv)
+
+  params:
+    argc: # of arguments. argc must be 2. just "cd" doesn't be approved.
+    argv: a list of arguments.
+
+  returns:
+    If success, return 0.
+    Else if arguments are not valid, return -1.
+*/
 int do_cd(int argc, char** argv);
+
+/**
+  do_pwd(argc, argv)
+
+  params:
+    argc: # of arguments. argc must be 1.
+    argv: a list of arguments.
+
+  returns:
+    If success, return 0.
+    Else if arguments are not valid, return -1.
+*/
 int do_pwd(int argc, char** argv);
 
+/**
+  validate_cd_argv(argc, argv)
+
+  returns:
+    If success, return 1. (true)
+    Else return 0. (false)
+*/
 int validate_cd_argv(int argc, char** argv);
+/**
+  validate_pwd_argv(argc, argv)
+
+  returns:
+    If success, return 1. (true)
+    Else return 0. (false)
+*/
 int validate_pwd_argv(int argc, char** argv);
 
 #endif // MYSH_COMMANDS_H_
diff --git a/src/commands.c b/src/commands.c
index 2df0d4d..20293c8 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -21,8 +21,10 @@ int do_pwd(int argc, char** argv) {
 
 int validate_cd_argv(int argc, char** argv) {
   // TODO: Fill it!
+  return 1;
 }
 
 int validate_pwd_argv(int argc, char** argv) {
   // TODO: Fill it!
+  return 1;
 }
diff --git a/tests/src/command_validate_test.cc b/tests/src/command_validate_test.cc
new file mode 100644
index 0000000..5274854
--- /dev/null
+++ b/tests/src/command_validate_test.cc
@@ -0,0 +1,68 @@
+extern "C" {
+#include "commands.h"
+}
+
+#include "gtest/gtest.h"
+
+TEST(CDValidateTest, ValidateCDArgv) {
+  int argc = 2;
+  char* argv[] = {
+    "cd", "."
+  };
+
+  ASSERT_EQ(validate_cd_argv(argc, argv), 1);
+}
+
+TEST(CDValidateTest, ValidateCDArgv2) {
+  int argc = 3;
+  char* argv[] = {
+    "cd", ".", "."
+  };
+
+  ASSERT_EQ(validate_cd_argv(argc, argv), 0);
+}
+
+TEST(CDValidateTest, ValidateCDArgv3) {
+  int argc = 1;
+  char* argv[] = {
+    "cd"
+  };
+
+  ASSERT_EQ(validate_cd_argv(argc, argv), 0);
+}
+
+TEST(CDValidateTest, ValidateCDArgv4) {
+  int argc = 2;
+  char* argv[] = {
+    ".", "cd"
+  };
+
+  ASSERT_EQ(validate_cd_argv(argc, argv), 0);
+}
+
+TEST(PWDValidateTest, ValidatePWDArgv) {
+  int argc = 1;
+  char* argv[] = {
+    "pwd"
+  };
+
+  ASSERT_EQ(validate_pwd_argv(argc, argv), 1);
+}
+
+TEST(PWDValidateTest, ValidatePWDArgv2) {
+  int argc = 2;
+  char* argv[] = {
+    "pwd", "cd"
+  };
+
+  ASSERT_EQ(validate_pwd_argv(argc, argv), 0);
+}
+
+TEST(PWDValidateTest, ValidatePWDArgv3) {
+  int argc = 1;
+  char* argv[] = {
+    "cd"
+  };
+
+  ASSERT_EQ(validate_pwd_argv(argc, argv), 0);
+}
-- 
GitLab