public void addDataTest()
        {
            Task newTask = new Task();
            newTask.setTaskDescription = Utility.TEST_NORMAL_ADDTASK_1;
            Storage.addData(newTask);
            int expected = 1;
            int actual = Storage.getTaskList().Count;

            Assert.AreEqual(expected, actual);
        }
        private static void mergeTaskTag(int taskID, Task editedTask)
        {
            if (editedTask.setTag == Utility.EMPTY_STRING && Storage.getTaskList()[taskID - 1].setTag != Utility.KEYWORD_NULL)
            {
                editedTask.setTag = Storage.getTaskList()[taskID - 1].setTag;
            }

            else if (editedTask.setTag == Utility.EMPTY_STRING && Storage.getTaskList()[taskID - 1].setTag == Utility.KEYWORD_NULL)
            {
                editedTask.setTag = Utility.KEYWORD_NULL;
            }
        }
 public void updateCompletedTaskList()
 {
     Task current = new Task();
     for (int i = 0; i < Storage.getTaskList().Count; i++)
     {
         current = Storage.getTaskList()[i];
         if (current.setIsCompleted == true)
         {
             completedTasks.Add(current);
         }
     }
 }
        public void CompareDatesTest()
        {
            Task x = new Task();
            Task y = new Task();
            Parser target = new Parser();
            x = target.returnTask(Utility.TEST_TASK_X);
            y = target.returnTask(Utility.TEST_TASK_Y);

            int expected = 0;
            int actual;
            actual = Task.CompareDates(x, y);
            Assert.AreEqual(expected, actual);
        }
        private static void mergeTaskDescription(int taskID, Task editedTask)
        {
            if (editedTask.setTaskDescription == Utility.EMPTY_STRING
                && Storage.getTaskList()[taskID - 1].setTaskDescription != Utility.KEYWORD_NULL)
            {
                editedTask.setTaskDescription = Storage.getTaskList()[taskID - 1].setTaskDescription;
            }

            else if (editedTask.setTaskDescription == Utility.EMPTY_STRING
                && Storage.getTaskList()[taskID - 1].setTaskDescription == Utility.KEYWORD_NULL)
            {
                editedTask.setTaskDescription = Utility.KEYWORD_NULL;
            }
        }
        public void removeDataTest()
        {
            int testnum = 100;
            int testnum2 = 50;
            for (int i = 0; i < testnum; i++)
            {
                Task newtask = new Task();
                Storage.addData(newtask);
            }
            for (int i = 0; i < testnum2; i++)
            {
                int index = 0;
                Storage.removeData(index);
            }

            int expected = 50;
            int actual = Storage.getTaskList().Count;
            Assert.AreEqual(expected, actual);
        }
        public string addTask(string input)
        {
            log4net.Config.XmlConfigurator.Configure();
            newTask = parseInput.returnTask(input).getShallowTask();
            isTaskDescriptionNull();

            if (newTask.setEnd != DateTime.MinValue && newTask.setStart != DateTime.MinValue
                && newTask.setStart != DateTime.Parse(Utility.INVALID_STARTDATE_ENDDATE)
                && newTask.setEnd != DateTime.Parse(Utility.INVALID_STARTDATE_ENDDATE))
            {
                log.Info(Utility.LOG_ADD_FUNCTION_WORKING);
                Storage.addData(newTask);
                Storage.updateStorage();
                return Utility.STATUS_TASK_ADDED;
            }

            else
            {
                log.Warn(Utility.LOG_INVALID_DATE_TIME_PROMPT);
                return Utility.ERROR_INVALID_DATETIME;
            }
        }
        private string mergeTask(int taskID)
        {
            Parser parseTask = new Parser();
            Task editedTask = new Task();

            if (taskID > 0 && taskID <= Storage.getTaskList().Count)
            {
                log.Warn(Utility.LOG_PARSING_BEGINS);

                appendNonExistingFields(taskID, parseTask);
                editedTask = parseTask.returnTask(userInput.TrimStart());
                mergeTaskDescription(taskID, editedTask);
                mergeTaskTag(taskID, editedTask);

                if (editedTask.setStart > editedTask.setEnd
                    || editedTask.setEnd == DateTime.MinValue
                    || editedTask.setStart == DateTime.MinValue
                    || editedTask.setEnd == DateTime.MaxValue
                    || editedTask.setStart == DateTime.MaxValue
                    || editedTask.setEnd == DateTime.Parse(Utility.INVALID_STARTDATE_ENDDATE)
                    || editedTask.setStart == DateTime.Parse(Utility.INVALID_STARTDATE_ENDDATE))
                {
                    return Utility.ERROR_INVALID_DATETIME;
                }
                else
                {
                    Storage.getTaskList()[taskID - 1] = editedTask;
                    Storage.updateStorage();
                    return Utility.STATUS_TASK_EDITED;
                }
            }
            else
            {
                return Utility.ERROR_INVALID_TASKNO;
            }
        }
 public static int CompareDates(Task x, Task y)
 {
     return x.setEnd.CompareTo(y.setEnd);
 }
        public void returnTaskTest()
        {
            Parser target = new Parser();
            string input = Utility.TEST_PARSER_TASK_ALL;
            Task parsedtask = new Task();
            parsedtask = target.returnTask(input);

            string expected=Utility.TEST_PARSER_TASK_DESCRIPTION;
            string actual=parsedtask.setTaskDescription;
            Assert.AreEqual(expected, actual);

            expected = Utility.TEST_PARSER_START;
            actual = parsedtask.setStart+" ";
            Assert.AreEqual(expected, actual);

            expected = Utility.TEST_PARSER_END;
            actual = parsedtask.setEnd + " ";
            Assert.AreEqual(expected, actual);

            expected = Utility.TEST_PARSERTAG;
            actual = parsedtask.setTag;
            Assert.AreEqual(expected, actual);
        }