diff --git a/src/main/java/Application/MenuManager.java b/src/main/java/Application/MenuManager.java index 383e5f8..4aa1be5 100644 --- a/src/main/java/Application/MenuManager.java +++ b/src/main/java/Application/MenuManager.java @@ -1,32 +1,61 @@ package Application; +import java.util.ArrayList; + public class MenuManager { - private Menu rootMenu; + private ArrayList menuList; private Menu currentMenu; - public MenuManager(Menu rootMenu){ - this.rootMenu = rootMenu; - this.currentMenu = rootMenu; + public MenuManager() { + menuList = new ArrayList<>(); + currentMenu = null; + } + + public void addMenu(Menu menu) { + menuList.add(menu); + } + + public int getSize() { + if(inRootMenu()) + return menuList.size(); + return currentMenu.getSubMenuList().size(); } - public void select(int i){ - this.currentMenu = currentMenu.getMenu(i); + public void select(int i) { + if(i < 0 || i >= this.getSize()) + return; + if (currentMenu == null) + this.currentMenu = menuList.get(i); + else + this.currentMenu = currentMenu.getMenu(i); } public void back() throws Exception { - if(!this.inRootMenu()) + if (!this.inRootMenu()) this.currentMenu = this.currentMenu.getPreviousMenu(); else - throw new Exception("Menu is a root menu, a previous menu doesn't exist"); + throw new Exception("Menu is in the root menu, a previous menu doesn't exist"); } - public Menu getCurrentMenu(){ + public Menu getCurrentMenu() { return this.currentMenu; } - public boolean inRootMenu(){ - return this.currentMenu.equals(this.rootMenu); + public boolean inRootMenu() { + return this.currentMenu == null; + } + + public String getFormattedMenuList() { + StringBuilder result = new StringBuilder(); + ArrayList baseMenuList = this.menuList; + if (!inRootMenu()) + baseMenuList = currentMenu.getSubMenuList(); + + for (int i = 0; i < baseMenuList.size(); i++) + result.append(i + 1).append(": ").append(baseMenuList.get(i).getName()).append("\n"); + + return result.toString(); } } diff --git a/src/test/java/Application/MenuManagerTest.java b/src/test/java/Application/MenuManagerTest.java index d6031de..3ad5701 100644 --- a/src/test/java/Application/MenuManagerTest.java +++ b/src/test/java/Application/MenuManagerTest.java @@ -10,18 +10,16 @@ import static org.junit.jupiter.api.Assertions.*; class MenuManagerTest { MenuManager mm; - Menu rootMenu; @BeforeEach void setUp() { - rootMenu = new Menu("Root"); Menu menu1 = new Menu("Menu1"); Menu menu2 = new Menu("Menu2"); Menu menu1_1 = new Menu("Menu1.1"); menu1.addMenu(menu1_1); - rootMenu.addMenu(menu1); - rootMenu.addMenu(menu2); - mm = new MenuManager(rootMenu); + mm = new MenuManager(); + mm.addMenu(menu1); + mm.addMenu(menu2); } @AfterEach @@ -29,23 +27,33 @@ class MenuManagerTest { } @Test - void testSelectFunction() { - assertEquals(mm.getCurrentMenu(), rootMenu); + void select() { + assertNull(mm.getCurrentMenu()); + //Negative index + mm.select(-1); + assertNull(mm.getCurrentMenu()); + + mm.select(0); + assertEquals(mm.getCurrentMenu().getName(), "Menu1"); + //Dose nothing when index to big + mm.select(1); + assertEquals(mm.getCurrentMenu().getName(), "Menu1"); + mm.select(0); - assertEquals(mm.getCurrentMenu(), rootMenu.getMenu(0)); + assertEquals(mm.getCurrentMenu().getName(), "Menu1.1"); mm.select(0); - assertEquals(mm.getCurrentMenu(), rootMenu.getMenu(0).getMenu(0)); + assertEquals(mm.getCurrentMenu().getName(), "Menu1.1"); } @Test - void testIsRootMenuFunction() { + void inRootMenu() { assertTrue(mm.inRootMenu()); mm.select(0); assertFalse(mm.inRootMenu()); } @Test - void testBackFunction() { + void back() { try { mm.back(); Assertions.fail("Test failed: shouldn't be able to go back in rootMenu"); @@ -55,7 +63,7 @@ class MenuManagerTest { mm.select(0); try { mm.back(); - assertEquals(mm.getCurrentMenu(), rootMenu); + assertTrue(mm.inRootMenu()); } catch (Exception e) { Assertions.fail("Test failed: " + e.getMessage()); } @@ -63,9 +71,25 @@ class MenuManagerTest { mm.select(0); try { mm.back(); - assertEquals(mm.getCurrentMenu(), rootMenu.getMenu(0)); + assertEquals(mm.getCurrentMenu().getName(), "Menu1"); } catch (Exception e) { Assertions.fail("Test failed: " + e.getMessage()); } } + + @Test + void getFormattedMenuList(){ + assertEquals(mm.getFormattedMenuList(), "1: Menu1\n2: Menu2\n"); + mm.select(0); + assertEquals(mm.getFormattedMenuList(), "1: Menu1.1\n"); + } + + @Test + void getSize() { + assertEquals(mm.getSize(), 2); + mm.select(0); + assertEquals(mm.getSize(), 1); + mm.select(0); + assertEquals(mm.getSize(), 0); + } } \ No newline at end of file diff --git a/src/test/java/Application/MenuTest.java b/src/test/java/Application/MenuTest.java index a0297a6..d0494b6 100644 --- a/src/test/java/Application/MenuTest.java +++ b/src/test/java/Application/MenuTest.java @@ -29,17 +29,17 @@ class MenuTest { } @Test - void testCorrectName() { + void getName() { assertEquals("Root", rootMenu.getName()); } @Test - void testAddMenuFunction() { + void addMenu() { assertTrue(rootMenu.getMenu(0).getName().equals("Menu1") && rootMenu.getMenu(1).getName().equals("Menu2") && rootMenu.getMenu(0).getMenu(0).getName().equals("Menu1.1")); } @Test - void testPreviousMenuFunction(){ + void getPreviousMenu(){ assertTrue(rootMenu.getPreviousMenu() == null && rootMenu.getMenu(0).getPreviousMenu().getName().equals("Root") && rootMenu.getMenu(0).getMenu(0).getPreviousMenu().getName().equals("Menu1")); }