diff --git a/src/main/java/com/booleanuk/core/TodoList.java b/src/main/java/com/booleanuk/core/TodoList.java index 675adaf0b..fa4bd24e0 100644 --- a/src/main/java/com/booleanuk/core/TodoList.java +++ b/src/main/java/com/booleanuk/core/TodoList.java @@ -1,5 +1,90 @@ package com.booleanuk.core; +import java.util.List; + +import com.booleanuk.core.pojo.Task; + +import java.util.ArrayList; +import java.util.Comparator; + public class TodoList { + private List tdList; + + public TodoList(){ + this.tdList = new ArrayList(); + } + + public void add(Task task){ + this.tdList.add(task); + } + + public List retList(){ + return this.tdList; + } + + public void changeStatus(String task, boolean status){ + for(Task t : this.tdList){ + if(task == t.getTask()) + t.setComplet(status); + } + } + + public List getComp(){ + List tmp = new ArrayList(); + for(Task t: this.tdList){ + if(t.getComplet() == true) + tmp.add(t); + } + return tmp; + } + + public List getInComp(){ + List tmp = new ArrayList(); + for(Task t: this.tdList){ + if(t.getComplet() == false) + tmp.add(t); + } + return tmp; + } + + public String search(String task){ + for(Task t: this.tdList){ + if(t.getTask().contains(task)) + return "Found/Exists!"; + } + return "Does not exist!"; + } + + public void delete(String task){ + int i = 0; + for(Task t: this.tdList){ + if(t.getTask() == task){ + this.tdList.remove(i); + break; + } + i++; + } + } + + public String orderAscend(){ + String tmpStr = ""; + List tmpList = this.tdList; + tmpList.sort(Comparator.comparing(Task::getTask, String.CASE_INSENSITIVE_ORDER)); + for (Task t : tmpList){ + tmpStr += t.getTask() + "\n"; + } + return tmpStr.trim(); + } + + public String orderDescend(){ + String tmpStr = ""; + List tmpList = this.tdList; + tmpList.sort(Comparator.comparing(Task::getTask, String.CASE_INSENSITIVE_ORDER).reversed()); + for (Task t : tmpList){ + tmpStr += t.getTask() + "\n"; + } + return tmpStr.trim(); + } + } diff --git a/src/main/java/com/booleanuk/core/pojo/Task.java b/src/main/java/com/booleanuk/core/pojo/Task.java new file mode 100644 index 000000000..b1ebd51a1 --- /dev/null +++ b/src/main/java/com/booleanuk/core/pojo/Task.java @@ -0,0 +1,30 @@ +package com.booleanuk.core.pojo; + +public class Task { + private String task; + private boolean complet; + + public Task(String task){ + this.task = task; + this.complet = false; + + } + + public Task(String task, boolean complet){ + this.task = task; + this.complet = complet; + + } + + public void setComplet(boolean complet){ + this.complet = complet; + } + + public boolean getComplet(){ + return this.complet; + } + + public String getTask(){ + return this.task; + } +} diff --git a/src/main/java/com/booleanuk/extension/ExTask.java b/src/main/java/com/booleanuk/extension/ExTask.java new file mode 100644 index 000000000..b134bdbf3 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/ExTask.java @@ -0,0 +1,48 @@ +package com.booleanuk.extension; + +import java.time.LocalDateTime; + +public class ExTask { + private String task; + private boolean complet; + protected int id; + private LocalDateTime date; + + public ExTask(String task){ + this.task = task; + this.complet = false; + this.date = LocalDateTime.now(); + + } + + public ExTask(String task, boolean complet){ + this.task = task; + this.complet = complet; + this.date = LocalDateTime.now(); + + } + + public void setComplet(boolean complet){ + this.complet = complet; + } + + public void setTask(String task){ + this.task = task; + } + + public boolean getComplet(){ + return this.complet; + } + + public String getTask(){ + return this.task; + } + + public int getID(){ + return this.id; + } + + public LocalDateTime getDate(){ + return this.date; + } +} diff --git a/src/main/java/com/booleanuk/extension/ExTodoList.java b/src/main/java/com/booleanuk/extension/ExTodoList.java new file mode 100644 index 000000000..0db303277 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/ExTodoList.java @@ -0,0 +1,125 @@ +package com.booleanuk.extension; + +import java.util.List; +import java.util.ArrayList; +import java.util.Comparator; + +import java.time.format.DateTimeFormatter; + +public class ExTodoList { + + private List tdList; + private int incrementID; + + public ExTodoList(){ + this.tdList = new ArrayList(); + this.incrementID = 1; + } + + public void add(ExTask task){ + task.id = incrementID; + this.tdList.add(task); + } + + public List retList(){ + return this.tdList; + } + + public void changeStatus(String task, boolean status){ + for(ExTask t : this.tdList){ + if(task == t.getTask()) + t.setComplet(status); + } + } + + public List getComp(){ + List tmp = new ArrayList(); + for(ExTask t: this.tdList){ + if(t.getComplet() == true) + tmp.add(t); + } + return tmp; + } + + public List getInComp(){ + List tmp = new ArrayList(); + for(ExTask t: this.tdList){ + if(t.getComplet() == false) + tmp.add(t); + } + return tmp; + } + + public String search(String task){ + for(ExTask t: this.tdList){ + if(t.getTask().contains(task)) + return "Found/Exists!"; + } + return "Does not exist!"; + } + + public void delete(String task){ + int i = 0; + for(ExTask t: this.tdList){ + if(t.getTask() == task){ + this.tdList.remove(i); + break; + } + i++; + } + } + + public String orderAscend(){ + String tmpStr = ""; + List tmpList = this.tdList; + tmpList.sort(Comparator.comparing(ExTask::getTask, String.CASE_INSENSITIVE_ORDER)); + for (ExTask t : tmpList){ + tmpStr += t.getTask() + "\n"; + } + return tmpStr.trim(); + } + + public String orderDescend(){ + String tmpStr = ""; + List tmpList = this.tdList; + tmpList.sort(Comparator.comparing(ExTask::getTask, String.CASE_INSENSITIVE_ORDER).reversed()); + for (ExTask t : tmpList){ + tmpStr += t.getTask() + "\n"; + } + return tmpStr.trim(); + + } + + public String getExTaskByID(int id){ + for (ExTask t : tdList){ + if(t.id == id) + return t.getTask(); + } + return ""; + } + + public void updateNameExTask(int id, String newTask){ + for (ExTask t : tdList){ + if(t.id == id) + t.setTask(newTask); + } + } + + public void changeStatus(int id, boolean status){ + for (ExTask t : tdList){ + if(t.id == id) + t.setComplet(status); + } + } + + public String dateTime(){ + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); + String tmp = ""; + for(ExTask t : tdList){ + String tmpStr = t.getDate().format(formatter); + tmp += t.getTask() + " " + tmpStr + "\n"; + } + return tmp.trim(); + } + +} diff --git a/src/test/java/com/booleanuk/core/TodoListTest.java b/src/test/java/com/booleanuk/core/TodoListTest.java index 0bef779a4..17002e811 100644 --- a/src/test/java/com/booleanuk/core/TodoListTest.java +++ b/src/test/java/com/booleanuk/core/TodoListTest.java @@ -3,6 +3,12 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.List; + +import java.util.ArrayList; + +import com.booleanuk.core.pojo.Task; + class TodoListTest { @Test public void exampleTest() { @@ -10,4 +16,161 @@ public void exampleTest() { Assertions.assertEquals("Hello", hello); Assertions.assertNotEquals("Goodbye", hello); } + + + private TodoList tdList; + + public TodoListTest(){ + tdList = new TodoList(); + + } + + @Test + public void add_and_retList_twoTask_twoTaskString(){ + Task t1 = new Task("Fix nvim config"); + Task t2 = new Task("Clean house"); + + List empty = tdList.retList(); + + Assertions.assertEquals(empty, new ArrayList()); + + tdList.add(t1); + tdList.add(t2); + + List resNotEmpty = tdList.retList(); + + Assertions.assertTrue(resNotEmpty.contains(t1)); + + Assertions.assertTrue(resNotEmpty.contains(t2)); + } + + @Test + public void changeStatus_twoTask_todoListTaskStatusChanged(){ + Task t1 = new Task("Fix nvim config", true); + Task t2 = new Task("Clean house", false); + + tdList.add(t1); + tdList.add(t2); + + List res1 = tdList.retList(); + + Assertions.assertEquals(res1.get(0).getComplet(), true); + + tdList.changeStatus("Fix nvim config", false); + + Assertions.assertEquals(res1.get(0).getComplet(), false); + } + + @Test + public void getComplet_twoTask_todoListOneCompletedTask(){ + Task t1 = new Task("Fix nvim config", true); + Task t2 = new Task("Clean house", false); + + tdList.add(t1); + tdList.add(t2); + + List res = tdList.getComp(); + + Assertions.assertTrue(res.contains(t1)); + + Assertions.assertFalse(res.contains(t2)); + } + + @Test + public void getInComplet_twoTask_todoListOneIncompletedTask(){ + Task t1 = new Task("Fix nvim config", true); + Task t2 = new Task("Clean house", false); + + tdList.add(t1); + tdList.add(t2); + + List res = tdList.getInComp(); + + Assertions.assertFalse(res.contains(t1)); + + Assertions.assertTrue(res.contains(t2)); + } + + @Test + public void search_threeTask_stringTask(){ + Task t1 = new Task("Fix nvim config", true); + Task t2 = new Task("Clean house", false); + Task t3 = new Task("Do dishes", false); + + tdList.add(t1); + tdList.add(t2); + tdList.add(t3); + + String res1 = tdList.search("Fix"); + String res2 = tdList.search("house"); + String res3 = tdList.search("vscode"); + + Assertions.assertEquals(res1, "Found/Exists!"); + Assertions.assertEquals(res2, "Found/Exists!"); + Assertions.assertEquals(res3, "Does not exist!"); + } + + + + + @Test + public void delete_twoTask_todoListTaskRemoved(){ + Task t1 = new Task("Fix nvim config", true); + Task t2 = new Task("Clean house", false); + + tdList.add(t1); + tdList.add(t2); + + List res1 = tdList.retList(); + + Assertions.assertTrue(res1.contains(t1)); + Assertions.assertTrue(res1.contains(t2)); + + tdList.delete("Clean house"); + + List res2 = tdList.retList(); + + Assertions.assertTrue(res2.contains(t1)); + Assertions.assertFalse(res2.contains(t2)); + } + + @Test + public void orderAscend_threeTask_todoListOrderAcent(){ + Task t1 = new Task("Fix nvim config", true); + Task t2 = new Task("Clean house", false); + Task t3 = new Task("Do dishes", false); + + tdList.add(t1); + tdList.add(t2); + tdList.add(t3); + + String res = tdList.orderAscend(); + + String expected = """ + Clean house + Do dishes + Fix nvim config""".trim(); + + Assertions.assertEquals(expected, res); + } + + @Test + public void orderDecend_threeTask_todoListOrderDecent(){ + Task t1 = new Task("Fix nvim config", true); + Task t2 = new Task("Clean house", false); + Task t3 = new Task("Do dishes", false); + + tdList.add(t1); + tdList.add(t2); + tdList.add(t3); + + String res = tdList.orderDescend(); + + String expected = """ + Fix nvim config + Do dishes + Clean house""".trim(); + + Assertions.assertEquals(expected, res); + } } diff --git a/src/test/java/com/booleanuk/core/pojo/TaskTest.java b/src/test/java/com/booleanuk/core/pojo/TaskTest.java new file mode 100644 index 000000000..4523cf6ab --- /dev/null +++ b/src/test/java/com/booleanuk/core/pojo/TaskTest.java @@ -0,0 +1,34 @@ +package com.booleanuk.core.pojo; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class TaskTest { + private Task t; + + public TaskTest(){ + t = new Task("Testing"); + + } + + @Test + public void overloadingConstructor(){ + Assertions.assertEquals(false, t.getComplet()); + this.t = new Task("Testing", true); + Assertions.assertEquals(true, t.getComplet()); + } + + @Test + public void get_and_setCompTest(){ + Assertions.assertEquals(false, t.getComplet()); + t.setComplet(true); + Assertions.assertEquals(true, t.getComplet()); + } + + @Test + public void getTaskTest(){ + Assertions.assertEquals("Testing", t.getTask()); + } + + +} \ No newline at end of file diff --git a/src/test/java/com/booleanuk/extension/ExTaskTest.java b/src/test/java/com/booleanuk/extension/ExTaskTest.java new file mode 100644 index 000000000..aea4bab2d --- /dev/null +++ b/src/test/java/com/booleanuk/extension/ExTaskTest.java @@ -0,0 +1,34 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class ExTaskTest { + private ExTask t; + + public ExTaskTest(){ + t = new ExTask("Testing"); + + } + + @Test + public void overloadingConstructor(){ + Assertions.assertEquals(false, t.getComplet()); + this.t = new ExTask("Testing", true); + Assertions.assertEquals(true, t.getComplet()); + } + + @Test + public void get_and_setCompTest(){ + Assertions.assertEquals(false, t.getComplet()); + t.setComplet(true); + Assertions.assertEquals(true, t.getComplet()); + } + + @Test + public void getTaskTest(){ + Assertions.assertEquals("Testing", t.getTask()); + } + + +} \ No newline at end of file diff --git a/src/test/java/com/booleanuk/extension/ExTodoListTest.java b/src/test/java/com/booleanuk/extension/ExTodoListTest.java new file mode 100644 index 000000000..de6efdc88 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/ExTodoListTest.java @@ -0,0 +1,243 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.ArrayList; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +class ExTodoListTest { + @Test + public void exampleTest() { + String hello = "Hello"; + Assertions.assertEquals("Hello", hello); + Assertions.assertNotEquals("Goodbye", hello); + } + + + private ExTodoList tdList; + + public ExTodoListTest(){ + tdList = new ExTodoList(); + + } + + @Test + public void add_and_retList_twoExTask_twoExTaskString(){ + ExTask t1 = new ExTask("Fix nvim config"); + ExTask t2 = new ExTask("Clean house"); + + List empty = tdList.retList(); + + Assertions.assertEquals(empty, new ArrayList()); + + tdList.add(t1); + tdList.add(t2); + + List resNotEmpty = tdList.retList(); + + Assertions.assertTrue(resNotEmpty.contains(t1)); + + Assertions.assertTrue(resNotEmpty.contains(t2)); + } + + @Test + public void changeStatus_twoExTask_todoListExTaskStatusChanged(){ + ExTask t1 = new ExTask("Fix nvim config", true); + ExTask t2 = new ExTask("Clean house", false); + + tdList.add(t1); + tdList.add(t2); + + List res1 = tdList.retList(); + + Assertions.assertEquals(res1.get(0).getComplet(), true); + + tdList.changeStatus("Fix nvim config", false); + + Assertions.assertEquals(res1.get(0).getComplet(), false); + } + + @Test + public void getComplet_twoExTask_todoListOneCompletedExTask(){ + ExTask t1 = new ExTask("Fix nvim config", true); + ExTask t2 = new ExTask("Clean house", false); + + tdList.add(t1); + tdList.add(t2); + + List res = tdList.getComp(); + + Assertions.assertTrue(res.contains(t1)); + + Assertions.assertFalse(res.contains(t2)); + } + + @Test + public void getInComplet_twoExTask_todoListOneIncompletedExTask(){ + ExTask t1 = new ExTask("Fix nvim config", true); + ExTask t2 = new ExTask("Clean house", false); + + tdList.add(t1); + tdList.add(t2); + + List res = tdList.getInComp(); + + Assertions.assertFalse(res.contains(t1)); + + Assertions.assertTrue(res.contains(t2)); + } + + @Test + public void search_threeExTask_stringExTask(){ + ExTask t1 = new ExTask("Fix nvim config", true); + ExTask t2 = new ExTask("Clean house", false); + ExTask t3 = new ExTask("Do dishes", false); + + tdList.add(t1); + tdList.add(t2); + tdList.add(t3); + + String res1 = tdList.search("Fix"); + String res2 = tdList.search("house"); + String res3 = tdList.search("vscode"); + + Assertions.assertEquals(res1, "Found/Exists!"); + Assertions.assertEquals(res2, "Found/Exists!"); + Assertions.assertEquals(res3, "Does not exist!"); + } + + + + + @Test + public void delete_twoExTask_todoListExTaskRemoved(){ + ExTask t1 = new ExTask("Fix nvim config", true); + ExTask t2 = new ExTask("Clean house", false); + + tdList.add(t1); + tdList.add(t2); + + List res1 = tdList.retList(); + + Assertions.assertTrue(res1.contains(t1)); + Assertions.assertTrue(res1.contains(t2)); + + tdList.delete("Clean house"); + + List res2 = tdList.retList(); + + Assertions.assertTrue(res2.contains(t1)); + Assertions.assertFalse(res2.contains(t2)); + } + + @Test + public void orderAscend_threeExTask_todoListOrderAcent(){ + ExTask t1 = new ExTask("Fix nvim config", true); + ExTask t2 = new ExTask("Clean house", false); + ExTask t3 = new ExTask("Do dishes", false); + + tdList.add(t1); + tdList.add(t2); + tdList.add(t3); + + String res = tdList.orderAscend(); + + String expected = """ + Clean house + Do dishes + Fix nvim config""".trim(); + + Assertions.assertEquals(expected, res); + } + + @Test + public void orderDecend_threeExTask_todoListOrderDecent(){ + ExTask t1 = new ExTask("Fix nvim config", true); + ExTask t2 = new ExTask("Clean house", false); + ExTask t3 = new ExTask("Do dishes", false); + + tdList.add(t1); + tdList.add(t2); + tdList.add(t3); + + String res = tdList.orderDescend(); + + String expected = """ + Fix nvim config + Do dishes + Clean house""".trim(); + + Assertions.assertEquals(expected, res); + } + + @Test + public void getExTaskByID_twoExTask_task(){ + ExTask t1 = new ExTask("Fix nvim config", true); + ExTask t2 = new ExTask("Clean house", false); + + tdList.add(t1); + tdList.add(t2); + + String resTask = tdList.getExTaskByID(1); + + Assertions.assertEquals(t1.getTask(), resTask); + + } + + @Test + public void updateNameExTask_twoExTask_taskNameUdated(){ + ExTask t1 = new ExTask("Fix nvim config", true); + ExTask t2 = new ExTask("Clean house", false); + + tdList.add(t1); + tdList.add(t2); + + List res1 = tdList.retList(); + + Assertions.assertEquals(res1.get(0).getTask(), "Fix nvim config"); + + tdList.updateNameExTask(1, "Learn Lua"); + + Assertions.assertEquals(res1.get(0).getTask(), "Learn Lua"); + + } + + @Test + public void changeStatus_twoExTask_statusChangedByID(){ + ExTask t1 = new ExTask("Fix nvim config", true); + ExTask t2 = new ExTask("Clean house", false); + + tdList.add(t1); + tdList.add(t2); + + List res1 = tdList.retList(); + + Assertions.assertEquals(res1.get(0).getComplet(), true); + + tdList.changeStatus(1, false); + + Assertions.assertEquals(res1.get(0).getComplet(), false); + + } + + @Test + public void dateTime_twoExTask_stringOfDateTime(){ + ExTask t1 = new ExTask("Fix nvim config", true); + ExTask t2 = new ExTask("Clean house", false); + + tdList.add(t1); + tdList.add(t2); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); + + String expected = "Fix nvim config " + + LocalDateTime.now().format(formatter) + "\nClean house " + LocalDateTime.now().format(formatter); + + Assertions.assertEquals(expected, tdList.dateTime()); + + } +}