1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 package it.tidalwave.ui.core.spi;
27
28 import jakarta.annotation.Nonnull;
29 import java.util.ArrayList;
30 import java.util.Collection;
31 import java.util.List;
32 import java.util.function.Supplier;
33 import it.tidalwave.ui.core.role.UserAction;
34 import lombok.Getter;
35 import lombok.RequiredArgsConstructor;
36 import org.testng.annotations.Test;
37 import static it.tidalwave.ui.core.role.Displayable._Displayable_;
38 import static org.hamcrest.CoreMatchers.is;
39 import static org.hamcrest.MatcherAssert.assertThat;
40
41 class BinderMock
42 {
43 }
44
45 @Getter @RequiredArgsConstructor
46 class MenuBarMock
47 {
48 @Nonnull
49 private final List<MenuMock> menus = new ArrayList<>();
50 }
51
52 @Getter @RequiredArgsConstructor
53 class MenuMock
54 {
55 @Nonnull
56 private final String text;
57
58 @Nonnull
59 private final List<MenuItemMock> items = new ArrayList<>();
60 }
61
62 @Getter @RequiredArgsConstructor
63 class MenuItemMock
64 {
65 @Nonnull
66 private final String text;
67 }
68
69 class UnderTest2 extends MenuBarControlSupport<BinderMock, MenuBarMock, MenuMock>
70 {
71 public UnderTest2 (@Nonnull final Supplier<Collection<? extends UserAction>> userActionsSupplier)
72 {
73 super(userActionsSupplier);
74 }
75
76 @Override @Nonnull
77 protected MenuMock createMenu (@Nonnull final String label)
78 {
79 return new MenuMock(label);
80 }
81
82 @Override
83 protected void addMenuToMenuBar (@Nonnull final MenuBarMock menuBar, @Nonnull final MenuMock menu)
84 {
85 menuBar.getMenus().add(menu);
86 }
87
88 @Override
89 protected void addMenuItemToMenu (@Nonnull final MenuMock menu, @Nonnull final BinderMock binder, @Nonnull final UserAction action)
90 {
91 final var menuItem = new MenuItemMock(action.as(_Displayable_).getDisplayName());
92 menu.getItems().add(menuItem);
93 }
94 }
95
96
97
98
99
100
101 public class MenuBarControlSupportTest
102 {
103 private final TestUserActions a = new TestUserActions();
104
105 @Test
106 public void test_populate()
107 {
108
109 final var underTest = new UnderTest2(() -> List.of(a.actionFileOpen, a.actionFileClose, a.actionFileCloseAll, a.actionEditUndo,
110 a.actionEditRedo, a.actionSelectSelectAll, a.actionSelectDeselect, a.actionNoMenuBar));
111 final var control = new MenuBarMock();
112 final var binder = new BinderMock();
113
114 underTest.populate(binder, control);
115
116 final var menus = control.getMenus();
117 assertThat(menus.size(), is(3));
118 final var menuFile = menus.get(0);
119 final var menuEdit = menus.get(1);
120 final var menuSelect = menus.get(2);
121
122 final var menuFileItems = menuFile.getItems();
123 assertThat(menuFileItems.size(), is(3));
124 final var menuFileOpen = menuFileItems.get(0);
125 final var menuFileClose = menuFileItems.get(1);
126 final var menuFileCloseAll = menuFileItems.get(2);
127
128 final var menuEditItems = menuEdit.getItems();
129 assertThat(menuEditItems.size(), is(2));
130 final var menuEditUndo = menuEditItems.get(0);
131 final var menuEditRedo = menuEditItems.get(1);
132
133 final var menuSelectItems = menuSelect.getItems();
134 assertThat(menuSelectItems.size(), is(2));
135 final var menuSelectSelectAll = menuSelectItems.get(0);
136 final var menuSelectDeselect = menuSelectItems.get(1);
137
138 assertThat(menuFile.getText(), is("File"));
139 assertThat(menuFileOpen.getText(), is("Open"));
140 assertThat(menuFileClose.getText(), is("Close"));
141 assertThat(menuFileCloseAll.getText(), is("Close all"));
142
143 assertThat(menuEdit.getText(), is("Edit"));
144 assertThat(menuEditUndo.getText(), is("Undo"));
145 assertThat(menuEditRedo.getText(), is("Redo"));
146
147 assertThat(menuSelect.getText(), is("Select"));
148 assertThat(menuSelectSelectAll.getText(), is("Select all"));
149 assertThat(menuSelectDeselect.getText(), is("Deselect"));
150
151 }
152 }