You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CoreAliasDialogModelTest.java 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. /*
  2. * Copyright (c) 2006-2015 DMDirc Developers
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a copy
  5. * of this software and associated documentation files (the "Software"), to deal
  6. * in the Software without restriction, including without limitation the rights
  7. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8. * copies of the Software, and to permit persons to whom the Software is
  9. * furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in
  12. * all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  20. * SOFTWARE.
  21. */
  22. package com.dmdirc.ui.core.aliases;
  23. import com.dmdirc.commandparser.CommandType;
  24. import com.dmdirc.commandparser.aliases.Alias;
  25. import com.dmdirc.commandparser.aliases.AliasFactory;
  26. import com.dmdirc.commandparser.aliases.AliasManager;
  27. import com.dmdirc.interfaces.CommandController;
  28. import com.dmdirc.interfaces.ui.AliasDialogModelListener;
  29. import java.util.HashSet;
  30. import java.util.Optional;
  31. import java.util.Set;
  32. import org.junit.Before;
  33. import org.junit.Test;
  34. import org.junit.runner.RunWith;
  35. import org.mockito.Mock;
  36. import org.mockito.invocation.InvocationOnMock;
  37. import org.mockito.runners.MockitoJUnitRunner;
  38. import org.mockito.stubbing.Answer;
  39. import static org.junit.Assert.assertEquals;
  40. import static org.junit.Assert.assertFalse;
  41. import static org.junit.Assert.assertTrue;
  42. import static org.mockito.ArgumentMatchers.anyInt;
  43. import static org.mockito.ArgumentMatchers.anyString;
  44. import static org.mockito.Mockito.never;
  45. import static org.mockito.Mockito.verify;
  46. import static org.mockito.Mockito.when;
  47. @RunWith(MockitoJUnitRunner.class)
  48. public class CoreAliasDialogModelTest {
  49. @Mock private AliasManager aliasModel;
  50. @Mock private AliasFactory aliasFactory;
  51. @Mock private AliasDialogModelListener listener;
  52. @Mock private CommandController commandController;
  53. private final Alias alias1 = new Alias(CommandType.TYPE_GLOBAL, "alias1", 0, "");
  54. private final Alias alias1Edited = new Alias(CommandType.TYPE_GLOBAL, "alias2", 0, "");
  55. private final Alias alias2Edited = new Alias(CommandType.TYPE_GLOBAL, "alias1", 1, "");
  56. private final Alias alias2 = new Alias(CommandType.TYPE_GLOBAL, "alias2", 0, "");
  57. private Set<Alias> aliases;
  58. @Before
  59. public void setupAliases() {
  60. aliases = new HashSet<>();
  61. }
  62. @Before
  63. public void setUpFactory() {
  64. when(aliasFactory.createAlias(anyString(), anyInt(), anyString())).thenAnswer(
  65. new Answer<Alias>() {
  66. @Override
  67. public Alias answer(final InvocationOnMock invocation) throws Throwable {
  68. return new Alias(
  69. CommandType.TYPE_GLOBAL,
  70. (String) invocation.getArguments()[0],
  71. (Integer) invocation.getArguments()[1],
  72. (String) invocation.getArguments()[2]
  73. );
  74. }
  75. });
  76. }
  77. @Test
  78. public void testgetAliases() {
  79. aliases.add(alias1);
  80. aliases.add(alias2);
  81. when(aliasModel.getAliases()).thenReturn(aliases);
  82. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  83. commandController);
  84. model.loadModel();
  85. assertEquals(2, model.getAliases().size());
  86. }
  87. @Test
  88. public void testGetAliasExists() {
  89. aliases.add(alias1);
  90. aliases.add(alias2);
  91. when(aliasModel.getAliases()).thenReturn(aliases);
  92. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  93. commandController);
  94. model.loadModel();
  95. assertEquals(model.getAlias(alias1.getName()).get(), alias1);
  96. }
  97. @Test
  98. public void testGetAliasNotExists() {
  99. aliases.add(alias1);
  100. aliases.add(alias2);
  101. when(aliasModel.getAliases()).thenReturn(aliases);
  102. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  103. commandController);
  104. model.loadModel();
  105. assertFalse(model.getAlias("test").isPresent());
  106. }
  107. @Test
  108. public void testAddAlias() {
  109. when(aliasModel.getAliases()).thenReturn(aliases);
  110. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  111. commandController);
  112. model.loadModel();
  113. assertEquals(0, model.getAliases().size());
  114. model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
  115. assertEquals(1, model.getAliases().size());
  116. }
  117. @Test
  118. public void testAddAliasListener() {
  119. when(aliasModel.getAliases()).thenReturn(aliases);
  120. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  121. commandController);
  122. model.loadModel();
  123. model.addListener(listener);
  124. model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
  125. verify(listener).aliasAdded(alias1);
  126. }
  127. @Test
  128. public void testEditAlias() {
  129. aliases.add(alias1);
  130. when(aliasModel.getAliases()).thenReturn(aliases);
  131. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  132. commandController);
  133. model.loadModel();
  134. assertEquals(1, model.getAliases().size());
  135. assertEquals(0, model.getAlias(alias2Edited.getName()).get().getMinArguments());
  136. model.editAlias(alias1.getName(), alias2Edited.getMinArguments(), alias2Edited.
  137. getSubstitution());
  138. assertEquals(1, model.getAlias(alias1.getName()).get().getMinArguments());
  139. }
  140. @Test
  141. public void testEditAliasListener() {
  142. aliases.add(alias1);
  143. when(aliasModel.getAliases()).thenReturn(aliases);
  144. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  145. commandController);
  146. model.loadModel();
  147. model.addListener(listener);
  148. model.editAlias(alias1.getName(), alias2Edited.getMinArguments(), alias2Edited.
  149. getSubstitution());
  150. verify(listener).aliasEdited(alias1, alias2Edited);
  151. }
  152. @Test
  153. public void testRenameAlias() {
  154. aliases.add(alias1);
  155. when(aliasModel.getAliases()).thenReturn(aliases);
  156. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  157. commandController);
  158. model.loadModel();
  159. assertEquals(1, model.getAliases().size());
  160. assertEquals(model.getAlias(alias1.getName()).get(), alias1);
  161. model.renameAlias(alias1.getName(), alias1Edited.getName());
  162. assertEquals(model.getAlias(alias1Edited.getName()).get(), alias2);
  163. }
  164. @Test
  165. public void testRenameAliasListener() {
  166. aliases.add(alias1);
  167. when(aliasModel.getAliases()).thenReturn(aliases);
  168. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  169. commandController);
  170. model.loadModel();
  171. model.addListener(listener);
  172. assertEquals(1, model.getAliases().size());
  173. assertEquals(model.getAlias(alias1.getName()).get(), alias1);
  174. model.renameAlias(alias1.getName(), alias1Edited.getName());
  175. verify(listener).aliasRenamed(alias1, alias1Edited);
  176. }
  177. @Test
  178. public void testRemoveAlias() {
  179. aliases.add(alias1);
  180. aliases.add(alias2);
  181. when(aliasModel.getAliases()).thenReturn(aliases);
  182. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  183. commandController);
  184. model.loadModel();
  185. assertEquals(2, model.getAliases().size());
  186. model.removeAlias(alias1.getName());
  187. assertEquals(1, model.getAliases().size());
  188. assertFalse(model.getAlias(alias1.getName()).isPresent());
  189. }
  190. @Test
  191. public void testRemoveAliasListener() {
  192. aliases.add(alias1);
  193. aliases.add(alias2);
  194. when(aliasModel.getAliases()).thenReturn(aliases);
  195. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  196. commandController);
  197. model.loadModel();
  198. model.addListener(listener);
  199. model.removeAlias(alias1.getName());
  200. verify(listener).aliasRemoved(alias1);
  201. }
  202. @Test
  203. public void testSelectedAliasInitiallyNotNull() {
  204. aliases.add(alias1);
  205. aliases.add(alias2);
  206. when(aliasModel.getAliases()).thenReturn(aliases);
  207. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  208. commandController);
  209. model.loadModel();
  210. assertEquals(2, model.getAliases().size());
  211. assertTrue(model.getSelectedAlias().isPresent());
  212. }
  213. @Test
  214. public void testSelectedAliasNotNull() {
  215. aliases.add(alias1);
  216. aliases.add(alias2);
  217. when(aliasModel.getAliases()).thenReturn(aliases);
  218. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  219. commandController);
  220. model.loadModel();
  221. assertEquals(2, model.getAliases().size());
  222. assertTrue(model.getSelectedAlias().isPresent());
  223. model.setSelectedAlias(Optional.ofNullable(alias2));
  224. assertEquals(model.getSelectedAlias().get(), alias2);
  225. }
  226. @Test
  227. public void testSelectedAliasToNull() {
  228. aliases.add(alias1);
  229. aliases.add(alias2);
  230. when(aliasModel.getAliases()).thenReturn(aliases);
  231. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  232. commandController);
  233. model.loadModel();
  234. assertEquals(2, model.getAliases().size());
  235. assertTrue(model.getSelectedAlias().isPresent());
  236. model.setSelectedAlias(Optional.ofNullable(alias2));
  237. assertEquals(model.getSelectedAlias().get(), alias2);
  238. model.setSelectedAlias(Optional.<Alias>empty());
  239. assertFalse(model.getSelectedAlias().isPresent());
  240. }
  241. @Test
  242. public void testRemoveListener() {
  243. when(aliasModel.getAliases()).thenReturn(aliases);
  244. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  245. commandController);
  246. model.loadModel();
  247. model.addListener(listener);
  248. model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
  249. model.removeListener(listener);
  250. model.addAlias(alias2.getName(), alias2.getMinArguments(), alias2.getSubstitution());
  251. verify(listener).aliasAdded(alias1);
  252. verify(listener, never()).aliasAdded(alias2);
  253. }
  254. @Test
  255. public void testRenameSelectedAlias() {
  256. aliases.add(alias1);
  257. when(aliasModel.getAliases()).thenReturn(aliases);
  258. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  259. commandController);
  260. model.loadModel();
  261. assertEquals(1, model.getAliases().size());
  262. assertEquals(model.getAlias(alias1.getName()).get(), alias1);
  263. model.setSelectedAlias(Optional.ofNullable(alias1));
  264. model.setSelectedAliasName(alias1Edited.getName());
  265. model.setSelectedAliasMinimumArguments(alias1Edited.getMinArguments());
  266. model.setSelectedAliasSubstitution(alias1Edited.getSubstitution());
  267. model.setSelectedAlias(Optional.<Alias>empty());
  268. assertEquals(model.getAlias(alias1Edited.getName()).get(), alias2);
  269. }
  270. @Test
  271. public void testEditSelectedAlias() {
  272. aliases.add(alias1);
  273. when(aliasModel.getAliases()).thenReturn(aliases);
  274. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  275. commandController);
  276. model.loadModel();
  277. assertEquals(1, model.getAliases().size());
  278. assertEquals(model.getAlias(alias1.getName()).get(), alias1);
  279. model.setSelectedAlias(Optional.ofNullable(alias1));
  280. model.setSelectedAliasMinimumArguments(alias2Edited.getMinArguments());
  281. model.setSelectedAliasSubstitution(alias2Edited.getSubstitution());
  282. model.setSelectedAlias(Optional.<Alias>empty());
  283. final Alias alias = model.getAlias(alias1.getName()).get();
  284. assertEquals(alias.getName(), alias2Edited.getName());
  285. assertEquals(alias.getMinArguments(), alias2Edited.getMinArguments());
  286. assertEquals(alias.getSubstitution(), alias2Edited.getSubstitution());
  287. }
  288. }