From f9939fc1a0fb3c884c5248109bee631000d66845 Mon Sep 17 00:00:00 2001 From: szelongq <72333104+szelongq@users.noreply.github.com> Date: Wed, 8 Sep 2021 22:51:11 +0800 Subject: [PATCH] Use Assertions There are several methods that convert a collection to a set. In somerrr There are a number of assumptions made in the code about the program's flow of control and input of certain non-public methods. These assumptions are not checked and could potentially lead to bugs that are hidden in the program. Let's use assertions to document these important assumptions that should hold true during execution of the code. Assertions do not have a heavy impact on performance and allows quick detection of bugs arising from the assumptions made in the code. They also help to document some of the logic in the code and improves maintainability of the program. --- src/main/java/duke/Duke.java | 6 ++++++ src/main/java/duke/Parser.java | 5 +++-- src/main/java/duke/Storage.java | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/duke/Duke.java b/src/main/java/duke/Duke.java index 80981e692e..240caf81f5 100644 --- a/src/main/java/duke/Duke.java +++ b/src/main/java/duke/Duke.java @@ -96,22 +96,28 @@ private String executeCommand(String userInput) throws DukeException { default: throw new UnsupportedOperationException(); // Error } + assert false; // Execution should not reach this point return ""; } private String addNewTask(Task newTask) { + assert newTask != null; // Task to be added cannot be null tasks.addTask(newTask); storage.saveTasks(tasks); return ui.printAddTask(tasks, newTask); } private String completeTask(int taskNum) { + // TaskNum should be within 1 to the size of the TaskList + assert taskNum > 0 && taskNum <= tasks.getSize(): taskNum; tasks.completeTask(taskNum); storage.saveTasks(tasks); return ui.printCompleteTask(tasks.getTask(taskNum)); } private String deleteTask(int taskNum) { + // TaskNum should be within 1 to the size of the TaskList + assert taskNum > 0 && taskNum <= tasks.getSize(): taskNum; Task deletedTask = tasks.deleteTask(taskNum); storage.saveTasks(tasks); return ui.printDeleteTask(tasks, deletedTask); diff --git a/src/main/java/duke/Parser.java b/src/main/java/duke/Parser.java index c41a4f644c..908356634a 100644 --- a/src/main/java/duke/Parser.java +++ b/src/main/java/duke/Parser.java @@ -68,7 +68,7 @@ public static Task parseNewTask(String userInput) throws MissingInputException { taskType = TaskType.EVENT; break; default: - return null; // Invalid input + assert false; // Invalid task type input } if (!userInputScanner.hasNext()) { @@ -87,7 +87,8 @@ public static Task parseNewTask(String userInput) throws MissingInputException { return new Event(userInputScanner.next().trim(), LocalDate.parse(userInputScanner.next().trim())); default: - return null; // Error + assert false; // Undefined task type input + return null; } } diff --git a/src/main/java/duke/Storage.java b/src/main/java/duke/Storage.java index 79adff6de2..a5538abdfc 100644 --- a/src/main/java/duke/Storage.java +++ b/src/main/java/duke/Storage.java @@ -76,7 +76,7 @@ private ArrayList loadTasks(Path savePath) { LocalDate.parse(saveDataScanner.next()), isTaskDone)); break; default: - break; //Error + assert false; // Undefined task type input } saveDataScanner.close(); }