repl.it
linkLevel-8
, A-JavaDoc
, A-Gradle
optional, A-JUnit
1 Implement increments Level-8
, A-JavaDoc
, A-Gradle
optional, A-JUnit
Level-8
: Dates and Times
Teach Duke to understand dates and times. For example, if the command is deadline return book /by 2/12/2019 1800
, Duke understands 2/12/2019 1800
as 2nd of December 2019, 6pm, instead of storing it simply as a String.
java.time.LocalDate
in your task objects. Accept dates in a format such as yyyy-mm-dd
format (e.g., 2019-10-15
) and print in a different format such as MMM d yyyy
e.g., (Oct 15 2019
).A code snippet using the LocalDate
class:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
public class Main {
public static void main(String[] args) {
//create dates from strings
LocalDate d1 = LocalDate.parse("2019-12-01");
LocalDate d2 = LocalDate.parse("2019-12-02");
LocalDate d3 = LocalDate.parse("2019-12-02");
//compare dates
System.out.println(d1.isBefore(d2)); // -> true
System.out.println(d1.isAfter(d2)); // -> false
System.out.println(d2.equals(d3)); // -> true
//work with dates
System.out.println(d1.getDayOfWeek()); // -> SUNDAY
System.out.println(d1.getMonth()); // -> DECEMBER
System.out.println(d1.plus(1, ChronoUnit.YEARS)); // -> 2020-12-01
// get today's date and print it in a specific format
LocalDate d4 = LocalDate.now();
System.out.println(d4); // -> 2019-10-15
System.out.println(d4.format(DateTimeFormatter.ofPattern("MMM d yyyy"))); // -> Oct 15 2019
}
}
A-Gradle
: Gradle optionalUse Gradle to automate some of the build tasks of the project. Refer to the Gradle tutorial at the Duke repo (i.e., the repo you forked from) to find how to set up Gradle for your project.
A-JUnit
: JUnit Testing Add JUnit tests to test the behavior of the code.
Conventions to follow:
[project root]\src\test\java\
folder (reason: to follow the convention followed by the project structure so far).Todo.java
can be tested by TodoTest.java
), and put it in a package to match. For example,
seedu.duke.Todo
: src\main\java\seedu\duke\Todo.java
seedu.duke.TodoTest
: src\test\java\seedu\duke\TodoTest.java
Requirements:
Adding JUnit support to your project: As JUnit is a third-party library, you need to add support to it specifically in your project.
[project root]\src\test\java\
(you may have to do this outside of Intellij)File
→ New
→ Module From Existing Sources ...
[project root]\src\test\
(not the java
) folder.Create module from existing sources
Next
until the process is completeProject
panel of Intellij, expand the newly-created test
module, right-click on the java
folder inside it, and choose Mark Directory as
→ Test Source Root
(that will make the folder turn to green color).java
folder and type @Test
inside it. A code example given below.duke.Duke
class, create a duke.DukeTest
i.e., in src\test\java\duke\DukeTest.java
).
public class DukeTest {
@Test
}
@Test
turn to red because Intellij (not having JUnit support yet) does not understand it. But it will pop up a hint, asking if you want to add support for JUnit. Select Add JUnit 5.* to classpath
.Sources
, JavaDocs
and Annotations
boxes. After that, click OK
to add the JUnit 5 to the project dependencies.import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class DukeTest {
@Test
public void dummyTest(){
assertEquals(2, 2);
}
}
Run DukeTest
.Duke
from DukeTest
class, you need to add main
module as a dependency of the test
module you just created.
Duke
inside the DukeTest
, Intellij will flag it as an error and will give you an option (i.e., in the bulb icon that pops up) to add the main
module as a dependency.Refer to the Gradle tutorial at the Duke repo (i.e., the repo you forked from) to find how to use JUnit via Gradle.
Use Gradle to automate some of the build tasks of the project. Refer to the Gradle tutorial at the Duke repo (i.e., the repo you forked from) to find how to set up Gradle for your project.