View Javadoc
1   /*
2    * *************************************************************************************************************************************************************
3    *
4    * SteelBlue: DCI User Interfaces
5    * http://tidalwave.it/projects/steelblue
6    *
7    * Copyright (C) 2015 - 2025 by Tidalwave s.a.s. (http://tidalwave.it)
8    *
9    * *************************************************************************************************************************************************************
10   *
11   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
12   * You may obtain a copy of the License at
13   *
14   *     http://www.apache.org/licenses/LICENSE-2.0
15   *
16   * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
17   * CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.
18   *
19   * *************************************************************************************************************************************************************
20   *
21   * git clone https://bitbucket.org/tidalwave/steelblue-src
22   * git clone https://github.com/tidalwave-it/steelblue-src
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   * @author  Fabrizio Giudici
99   *
100  **************************************************************************************************************************************************************/
101 public class MenuBarControlSupportTest
102   {
103     private final TestUserActions a = new TestUserActions();
104 
105     @Test
106     public void test_populate()
107       {
108         // given
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         // when
114         underTest.populate(binder, control);
115         // then
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         // actionNoMenuBar correctly did not appear anywhere
151       }
152   }