diff --git a/README.adoc b/README.adoc index b9d614fcbc14..d6047fa3e45e 100644 --- a/README.adoc +++ b/README.adoc @@ -8,19 +8,20 @@ https://www.codacy.com/app/damith/addressbook-level4?utm_source=github.com&utm_m https://gitter.im/se-edu/Lobby[image:https://badges.gitter.im/se-edu/Lobby.svg[Gitter chat]] ifdef::env-github[] -image::docs/images/App Interface.png[width="600"] + +image::docs/images/Ui.png[width="600"] endif::[] ifndef::env-github[] -image::docs/images/App Interface.png[width="600"] +image::docs/images/Ui.png[width="600"] endif::[] -* CLIndar is a desktop application that helps university computing students to *manage their tasks and events*. -* It is a *Command Line Interface (CLI)-based* app that has a *Graphic User Interface (GUI)* and *Linux-style commands*. -** The CLI system would allow fast input for users who can type fast, which most computing students are expected to do. -** The GUI is easy on the eye and makes the chores of managing commitments more enjoyable. -** The Linux-style commands are more familiar to computing students. Thus, they can use this application more conveniently. -* You would need to have *Java Runtime Environment (JRE)* installed to run this application. +* CLindar is a desktop application that intends to help university computing students to manage their tasks and events. +** Computing student may have a tight schedule hence required to keep track of various events and deadlines +** Computing student would be more familiar with the commands used in this application, hence would be easy to use. +* It is a GUI app but most of its user interaction is CLI (Command Line Interface)-based. +** This would allow fast input for users who can type fast, such as computing students. +* You would need to have *Java Runtime Environment* (JRE) installed to run this application. == Site Map diff --git a/docs/AboutUs.adoc b/docs/AboutUs.adoc index 994eb70d6080..2651003446ce 100644 --- a/docs/AboutUs.adoc +++ b/docs/AboutUs.adoc @@ -13,7 +13,7 @@ We are a team based in the http://www.comp.nus.edu.sg[School of Computing, Natio === Jarrett Choo image::kyomian.png[width="150", align="left"] -{empty}[https://github.com/Kyomian[github]] +{empty}[https://github.com/Kyomian[github]] [<>] Role: Team Lead, Testing, Deliverables and deadlines + Responsibilities: Logic @@ -23,7 +23,7 @@ Responsibilities: Logic === Jasmund Toh image::jasmoon.png[width="150", align="left"] -{empty}[http://github.com/jasmoon[github]] +{empty}[http://github.com/jasmoon[github]] [<>] Role: Scheduling and tracking, JavaFX expert + Responsibilities: UI @@ -33,7 +33,7 @@ Responsibilities: UI === Karen Frilya image::karenfrilya97.png[width="150", align="left"] -{empty}[http://github.com/karenfrilya97[github]] +{empty}[http://github.com/karenfrilya97[github]] [<>] Role: Documentation + Responsibilities: Storage @@ -43,7 +43,7 @@ Responsibilities: Storage === Yuan Quan image::yuanqller.png[width="150", align="left"] -{empty}[http://github.com/YuanQQLer[github]] +{empty}[http://github.com/YuanQQLer[github]] [<>] Role: Code Quality, Integration + Responsibilities: Model diff --git a/docs/DeveloperGuide.adoc b/docs/DeveloperGuide.adoc index 879b5dee24d6..e5d7cc275861 100644 --- a/docs/DeveloperGuide.adoc +++ b/docs/DeveloperGuide.adoc @@ -259,7 +259,7 @@ image::UiClassDiagram.png[width="800"] *API* : link:{repoURL}/src/main/java/seedu/address/ui/Ui.java[`Ui.java`] -The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter`, `BrowserPanel` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class. +The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `TaskListPanel`, `EventListPanel`, `StatusBarFooter`, `BrowserPanel` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class. The `UI` component uses JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the link:{repoURL}/src/main/java/seedu/address/ui/MainWindow.java[`MainWindow`] is specified in link:{repoURL}/src/main/resources/view/MainWindow.fxml[`MainWindow.fxml`]. @@ -272,9 +272,14 @@ The `UI` component [[Design-Logic]] === Logic component +*_Figure 6_* below shows the UML of the Logic component. [[fig-LogicClassDiagram]] .Structure of the Logic Component image::LogicClassDiagram.png[width="800"] +{empty} + +{empty} + + +*_Figure 7_* below shows finer details of the Logic component. .Structure of Commands in the Logic Component. This diagram shows finer details concerning `XYZCommand` and `Command` in <> image::LogicCommandClassDiagram.png[width="800"] @@ -341,6 +346,7 @@ The undo/redo mechanism is facilitated by an `UndoRedoStack`, which resides insi `UndoRedoStack` only deals with `UndoableCommands`. Commands that cannot be undone will inherit from `Command` instead. The following diagram shows the inheritance diagram for commands: +.Class Diagram of a Logic Command image::LogicCommandClassDiagram.png[width="800"] As you can see from the diagram, `UndoableCommand` adds an extra layer between the abstract `Command` class and concrete commands that can be undone, such as the `DeleteCommand`. Note that extra tasks need to be done when executing a command in an _undoable_ way, such as saving the state of the desk board before execution. `UndoableCommand` contains the high-level algorithm for those extra tasks while the child classes implements the details of how to execute the specific command. Note that this technique of putting the high-level algorithm in the parent class and lower-level steps of the algorithm in child classes is also known as the https://www.tutorialspoint.com/design_pattern/template_pattern.htm[template pattern]. @@ -393,6 +399,7 @@ The user now decides that adding the activity was a mistake, and decides to undo We will pop the most recent command out of the `undoStack` and push it back to the `redoStack`. We will restore the desk board to the state before the `add` command executed. +.'Undo' stack pops into the 'Redo' Stack image::UndoRedoExecuteUndoStackDiagram.png[width="800"] [NOTE] @@ -400,6 +407,7 @@ If the `undoStack` is empty, then there are no other commands left to be undone, The following sequence diagram shows how the undo operation works: +.'Undo' and 'Redo' Stack Sequence Diagram image::UndoRedoSequenceDiagram.png[width="800"] The redo does the exact opposite (pops from `redoStack`, push to `undoStack`, and restores the desk board to the state after the command is executed). @@ -409,14 +417,17 @@ If the `redoStack` is empty, then there are no other commands left to be redone, The user now decides to execute a new command, `clear`. As before, `clear` will be pushed into the `undoStack`. This time the `redoStack` is no longer empty. It will be purged as it no longer make sense to redo the `add n/David` command (this is the behavior that most modern desktop applications follow). +.Adding 'ClearCommand' to the 'Undo' Stack image::UndoRedoNewCommand2StackDiagram.png[width="800"] Commands that are not undoable are not added into the `undoStack`. For example, `list`, which inherits from `Command` rather than `UndoableCommand`, will not be added after execution: +.'ListCommand' does not affect the 'Undo' Stack image::UndoRedoNewCommand3StackDiagram.png[width="800"] The following activity diagram summarize what happens inside the `UndoRedoStack` when a user executes a new command: +.Activity Diagram for 'Undo' and 'Redo' image::UndoRedoActivityDiagram.png[width="650"] ==== Design Considerations @@ -483,7 +494,38 @@ We are using `java.util.logging` package for logging. The `LogsCenter` class is * `INFO` : Information showing the noteworthy actions by the App * `FINE` : Details that is not usually noteworthy but may be useful in debugging e.g. print the actual list instead of just its size -=== Overdue +=== Task +Task refer to a piece of work to be done that can be added by a student user using the application. After being added, tasks can be edited and deleted. When a task is not completed within the deadline +, it will be automatically be marked as overdue. + +==== Current Implementation + +*_Figure17_* below shows how `Task` is represented in the application. + +.UML Diagram for Task +image::UML diagram for task.png[width="450"] + +A brief description of each of the attributes of `Task`is given below: + +* Name: Represents the name of the task +* DateTime: Represents the due date and time of the task. +* Remark: Represents a short description or reminder pertaining to the task. +* Tags: Groupings or representation for the task + +Operation that manipulates the `task` object can been done using `task`, `complete`, `delete`, `edit` commands. +These commands are described in more detail below. + +===== Task + +===== Complete + +===== Delete + +===== Edit + +===== Find + +===== Overdue The user is able to list down overdue tasks by using the `overdue` command. Note that overdue only lists down overdue tasks; overdue events are marked as completed automatically. @@ -984,7 +1026,7 @@ Our remark label in link:{repoURL}/src/main/java/seedu/address/ui/PersonCard.jav **Tests:** -. Modify link:{repoURL}/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java[`GuiTestAssert#assertCardDisplaysPerson(...)`] so that it will compare the now-functioning remark label. +. Modify link:{repoURL}/src/test/java/seedu/address/ui/testutil/GuiTestAssert.java[`GuiTestAssert#assertCardDisplaysTask(...)`] so that it will compare the now-functioning remark label. ===== [Step 8] Logic: Implement `RemarkCommand#execute()` logic We now have everything set up... but we still can't modify the remarks. Let's finish it up by adding in actual logic for our `remark` command. diff --git a/docs/UserGuide.adoc b/docs/UserGuide.adoc index 548ae648f2c6..9a1cdb54f5d4 100644 --- a/docs/UserGuide.adoc +++ b/docs/UserGuide.adoc @@ -19,7 +19,14 @@ By: `CS2103JAN2018-W13-B3` Since: `Mar 2018` Licence: `MIT` CLIndar is a desktop application that helps university computing students to manage their tasks and events. CLIndar is *Common-Line Interface (CLI) based and uses Linux-style commands*, which computing students are familiar with. -Thus, compared to traditional Graphical User Interface (GUI) applications, CLIndar is faster and provides more convenience for its target audience. +Thus, compared to traditional Graphical User Interface (GUI) applications, CLIndar is faster and provides more convenience for computing students. + +With CLIndar, you can: + +* Keep track of your tasks and events and be reminded of their due dates +* Record all completed tasks and events, so that you know what you have done + +The current version of CLIndar is 1.4 and is available on Windows and Linux Operating Systems. == Get Started @@ -37,7 +44,7 @@ This app will not work with earlier versions of Java 8. . Double-click the file to start the app. The GUI should appear in a few seconds. + -image::jasmund_ui.png[width="790"] +image::Ui.png[width="790"] + . Type the command in the command box and press kbd:[Enter] to execute it. + @@ -46,7 +53,7 @@ e.g. typing *`help`* and pressing kbd:[Enter] will open the help window. * *`task`* `n/Software Engineering Milestone 1 d/16/03/2018 17:00 r/Enhance major component`: Adds Software Engineering task to the desk board in CLIndar * *`event`* `n/Software Project s/01/05/2018 8:00 e/01/08/2018 8:00 l/School of Computing`: Adds Software Project event to the desk board -* *`list task`* : list all uncompleted tasks +* *`ls task`* : list all uncompleted tasks * *`exit`* : exits the app . Refer to <> for details of each command. @@ -68,8 +75,7 @@ For example, `n/NAME [r/REMARK]` can be used as `n/Software Engineering Milesto For example, if the command specifies `n/NAME d/DATETIME`, `d/DATETIME n/NAME` is also acceptable. -=== Viewing help : `help` or `man` -*`As of v1.1`* +=== Viewing help : `help` or `man` `[As of v1.1]` Shows the help menu for all of the commands or only the `COMMAND_WORD` requested. @@ -78,12 +84,12 @@ Shows the help menu for all of the commands or only the `COMMAND_WORD` requested *Examples:* * `help` -* `help task` * `man` +* `help task` * `man task` +* `help man` -=== Adding a task: `task` -*`As of v1.2`* +=== Adding a task: `task` `[As of v1.2]` Adds a task to the desk board. @@ -95,8 +101,7 @@ Adds a task to the desk board. * `task n/Software Engineering Milestone 1 d/16/03/2018 17:00 r/urgent` * `task n/Programming Methodology Assignment 2 d/16/03/2018 23:59` -=== Adding an event: `event` -*`As of v1.3`* +=== Adding an event: `event` `[As of v1.3]` Adds an event to the desk board. + @@ -107,8 +112,7 @@ Adds an event to the desk board. + * `event n/Software Project s/1/5/2018 8:00 e/01/08/2018 8:00 l/School of Computing r/remember to bring laptop charger` * `event n/Blockchain Talk s/16/3/2018 16:00 e/16/03/2018 18:00` -=== Listing uncompleted tasks and upcoming events: `ls` -*`As of v1.5`* +=== Listing uncompleted tasks and upcoming events: `ls` `[As of v1.4]` Shows one or two lists of tasks and events in the desk board as described below. @@ -116,10 +120,9 @@ Shows one or two lists of tasks and events in the desk board as described below. * `ls task`: shows only uncompleted tasks. * `ls event`: shows only upcoming events. -* `ls`: shows both uncompleted tasks upcoming events in 2 separate lists. +* `ls`: shows both uncompleted tasks and upcoming events in 2 separate lists. -=== Removing a task or event: `rm` -*`As of v1.5`* +=== Removing a task or event: `rm` `[As of v1.4]` Removes a task or event from the desk board according to the following conditions. @@ -139,8 +142,7 @@ Removes a task or event from the desk board according to the following condition `rm task 2` + Removes the 2nd task in the desk board. -=== Completing a task: `complete task` or `com task` -*`As of v1.5`* +=== Completing a task: `complete task` or `com task` `[Coming Soon in v1.5]` Completes the task at the specified `INDEX` based on the most recent listing. @@ -156,22 +158,19 @@ Completes the 3rd task in the desk board. `com task 2` + Completes the 2nd task in the desk board. -=== Listing all completed tasks: `ls complete task` or `ls com task` -*`As of v1.5`* +=== Listing all completed tasks: `ls complete task` or `ls com task` `[Coming Soon in v1.5]` Shows a list of all completed tasks in the desk board. + *Format:* `ls complete task` or `ls com task` -=== Shows overdue tasks: `overdue` -*`As of v1.5`* +=== Shows overdue tasks: `overdue` `[Coming Soon in v1.5]` Shows a list of tasks that remain uncompleted after their respective due dates. *Format:* `overdue` -=== Listing entered commands : `history` -*`As of v1.5`* +=== Listing entered commands : `history` `[Coming Soon in v1.5]` Lists all the commands that you have entered in reverse chronological order. @@ -230,29 +229,23 @@ The `redo` command fails as there are no `undo` commands executed previously. `r` (reapplies the `clear` command) + // end::undoredo[] -=== Clearing all entries : `clear` or `c` +=== Clearing all entries : `clear` or `c` `[Coming Soon in v1.5]` Clears all entries from the desk board. *Format:* `clear` or `c` -=== Exiting the program : `exit` +=== Exiting the program : `exit` `[Coming Soon in v1.5]` Exits the program. *Format:* `exit` -=== Editing a person : `edit task` - -*`Coming Soon in v2.0`* +=== Editing a task : `edit task` `[Coming Soon in v2.0]` -=== Locating task by name: `find task` +=== Locating task by name: `find task` `[Coming Soon in v2.0]` -*`Coming Soon in v2.0`* - -=== Listing all past events: `ls past event` - -*`Coming Soon in v2.0`* +=== Listing all past events: `ls past event` `[Coming Soon in v2.0]` === Saving the data @@ -263,3 +256,50 @@ There is no need to save manually. *Q*: How do I transfer my data to another Computer? + *A*: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous CLIndar folder. + +== Command Summary + +* *Add task*: `task n/NAME d/DUE_DATE_TIME [r/REMARK] [t/TAGS]` + +eg. `task n/Software Engineering Milestone 1 d/16/03/2018 17:00 r/urgent` + +* *Add event*: `event n/NAME s/START_TIME e/END_TIME [l/LOCATION] [r/REMARK]` + +eg. `event n/Software Project s/1/5/2018 8:00 e/01/08/2018 8:00 l/School of Computing r/remember to bring laptop charger` + +* *List uncompleted tasks and upcoming events*: `ls` + +eg. `ls` or `ls task` or `ls event` + +* *Remove task or event*: `rm` + +eg. `rm task 1` or `rm event 2` + +* *Complete a task*: `complete task` or `com task` + +eg. `complete task 1` or `com task 2` + +* *List completed tasks*: `ls complete task` or `ls com task` + +eg. `ls complete task` or `ls com task` + +* *Show overdue tasks*: `overdue` + +eg. `overdue` + +* *List entered commands*: `history` + +eg. `history` + +* *Undo previous command*: `undo` or `u` + +eg. `undo` or `u` + +* *Redo previously undone command*: `redo` or `r` + +eg. `redo` or `r` + +* *Clear all entries*: `clear` or `c` + +eg. `clear` or `c` + +* *Exit the program*: `exit` + +eg. `exit` + +* *Edit a task*: `edit task` + +eg. `edit task 1` + +* *Locate a task by name*: `find task` + +eg. `find task CS2106 Assignment` + +* *List all past events*: `ls past event` + +eg. `ls past event` diff --git a/docs/diagrams/UiComponentClassDiagram.pptx b/docs/diagrams/UiComponentClassDiagram.pptx index 384d0a00e6ea..36ffc2edead1 100644 Binary files a/docs/diagrams/UiComponentClassDiagram.pptx and b/docs/diagrams/UiComponentClassDiagram.pptx differ diff --git a/docs/images/UML diagram for task.png b/docs/images/UML diagram for task.png new file mode 100644 index 000000000000..18432197a41a Binary files /dev/null and b/docs/images/UML diagram for task.png differ diff --git a/docs/images/Ui.png b/docs/images/Ui.png index 5ec9c527b49c..3f172ed753cd 100644 Binary files a/docs/images/Ui.png and b/docs/images/Ui.png differ diff --git a/docs/images/UiClassDiagram.png b/docs/images/UiClassDiagram.png index 369469ef176e..37e98d58b33c 100644 Binary files a/docs/images/UiClassDiagram.png and b/docs/images/UiClassDiagram.png differ diff --git a/docs/images/Uiv1.4.png b/docs/images/Uiv1.4.png deleted file mode 100644 index c027c2aeee34..000000000000 Binary files a/docs/images/Uiv1.4.png and /dev/null differ diff --git a/src/main/resources/view/ClinderStyler.css b/src/main/resources/view/ClinderStyler.css deleted file mode 100644 index 64cac29e7cec..000000000000 --- a/src/main/resources/view/ClinderStyler.css +++ /dev/null @@ -1,195 +0,0 @@ -/*@@author jasmoon*/ -@font-face { - font-family: 'Open Sans Bold Italic'; - src: url('../fonts/open-sans/OpenSans-BoldItalic.ttf'); -} - -@font-face { - font-family: 'Open Sans Italic'; - src: url('../fonts/open-sans/OpenSans-Italic.ttf'); -} - -@font-face { - font-family: 'Open Sans'; - src: url('../fonts/open-sans/OpenSans-Regular.ttf'); -} - -@font-face { - font-family: 'Arvo'; - src: url('../fonts/arvo/Arvo-Regular.ttf'); -} - -@font-face { - font-family: 'Arvo Bold'; - src: url('../fonts/arvo/Arvo-Bold.ttf'); -} - -/* menu bar*/ -.menu-bar { - -fx-background-color: #f7e399; - -fx-padding: 0 2 0 2; - -fx-border-width: 0 0 2 0; - -fx-border-color: #dbdad9; -} - -.menu-bar .label { - -fx-font-size: 11pt; - -fx-font-family: "Segoe UI Light"; - -fx-text-fill: black; -} - -.context-menu { - -fx-background-color: #ffd177; - -fx-border-width: 2 0 0 0; - -fx-border-color: #969594; -} - -/* taskList and eventList */ - -.list-view { - -fx-background-color: transparent; - -fx-border-insets: 2 2 2 2; - -fx-background-insets: 2 2 2 2; - -fx-focus-color: transparent; - -fx-faint-focus-color: transparent; -} - -.list-cell:empty { - -fx-background-color: transparent; - -fx-border-color: transparent; -} - -.list-cell:filled:hover { - -fx-border-width: 1 1 1 1; - -fx-border-color: #2dc6c6; - -fx-border-insets: 0 0 0 1; - -fx-background-insets: 0 0 0 1; -} - -#taskListView .list-cell:filled:even { - -fx-background: linear-gradient(to right, #e8e8e8 0%, #e8e8e8 82.5%, #b2eaff 82.5%, #b2eaff 100%); -} - -#taskListView .list-cell:filled:odd { - -fx-background: linear-gradient(to right, #d1d1d1 0%, #d1d1d1 82.5%, #8ccef2 82.5%, #8ccef2 100%); -} - -#eventListView .list-cell:filled:even { - -fx-background: linear-gradient(to right, #e8e8e8 0%, #e8e8e8 82.5%, #ffd6d8 82.5%, #ffd6d8 100%); -} - -#eventListView .list-cell:filled:odd { - -fx-background: linear-gradient(to right, #d1d1d1 0%, #d1d1d1 82.5%, #ffb2b5 82.5%, #ffb2b5 100%); -} - -.list-cell .label { - -fx-text-fill: black; -} - -.cell_big_label { - -fx-font-family: "Open Sans Bold Italic"; - -fx-font-size: 14pt; - -fx-text-fill: #010504; -} - -.cell_small_label { - -fx-font-family: "Open Sans Italic"; - -fx-font-size: 10pt; - -fx-text-fill: #010504; -} - -#tags { - -fx-hgap: 7; - -fx-vgap: 3; -} - -#tags .label { - -fx-font-family: "Open Sans"; - -fx-text-fill: white; - -fx-background-color: #854c99; - -fx-padding: 1 3 1 3; - -fx-border-radius: 2; - -fx-background-radius: 2; - -fx-font-size: 11; -} - -.scroll-bar .thumb { - -fx-background-color: linear-gradient(to right, #f4f4f4, #bcbcbc); - -fx-background-insets: 2; -} - -.scroll-bar .increment-button, .scroll-bar .decrement-button { - -fx-background-color: transparent; - -fx-padding: 0 0 0 0; -} - -.scroll-bar .increment-arrow, .scroll-bar .decrement-arrow { - -fx-shape: "|"; -} - -.scroll-bar:vertical .increment-arrow, .scroll-bar:vertical .decrement-arrow { - -fx-padding: 1 8 1 8; -} - -.scroll-bar:horizontal .increment-arrow, .scroll-bar:horizontal .decrement-arrow { - -fx-padding: 8 1 8 1; -} - -/* resultBox */ -.text-area { - -fx-text-fill: black; -} - -#resultBox { - -fx-background-color: transparent; - -fx-opacity: 0.45; - -fx-background-radius: 2px 2px 2px 2px; -} - -/* commandBox */ - -#commandBoxPlaceholder { - -fx-background-color: white; - -fx-opacity: 0.45; - -fx-background-radius: 4px 4px 4px 4px; -} - -.text-field { - -fx-background-color: transparent; - -fx-border-width: 1 1 1 1; - -fx-border-color: grey; - -fx-border-radius: 4px 4px 4px 4px; - -fx-prompt-text-fill: black; - -fx-text-fill: black; -} - -/* statusBar */ - -#statusBarPlaceholder { - -fx-background-color: #f7e399 /*silver #d8d7d0*/; - -fx-font-color: black; - -fx-border-width: 1 0 0 0; - -fx-border-color: #dbdad9; - -} - -.status-bar .label { - -fx-font-family: "Segoe UI Light"; - -fx-text-fill: black; -} - -.grid-pane .anchor-pane { - -fx-background-color: #f7e399; - -fx-border-width: 1 0 0 0; - -fx-border-color: #dbdad9; -} - -/* miscs */ -.background { - -fx-background-image: url("../images/light-veneer.png"); - -fx-background-repeat: repeat; -} - -.split-pane-divider { - -fx-background-color: transparent; -} diff --git a/src/test/java/seedu/address/logic/commands/HelpCommandTest.java b/src/test/java/seedu/address/logic/commands/HelpCommandTest.java index 6a4271ba7a82..1aa25b98c4ca 100644 --- a/src/test/java/seedu/address/logic/commands/HelpCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/HelpCommandTest.java @@ -31,7 +31,13 @@ public void execute_helpForTask_success() { } @Test - public void execute_helpForDelete_success() { + public void execute_helpForEvent_success() { + HelpCommand command = new HelpCommand("event"); + assertCommandSuccess(command, EventCommand.MESSAGE_USAGE); + } + + @Test + public void execute_helpForRemove_success() { HelpCommand command = new HelpCommand("rm"); assertCommandSuccess(command, RemoveCommand.MESSAGE_USAGE);; }