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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. /*
  2. * Copyright (c) 2006-2014 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 com.google.common.base.Optional;
  30. import java.util.HashSet;
  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.Matchers.anyInt;
  43. import static org.mockito.Matchers.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. when(commandController.getCommandChar()).thenReturn('/');
  62. }
  63. @Before
  64. public void setUpFactory() {
  65. when(aliasFactory.createAlias(anyString(), anyInt(), anyString())).thenAnswer(
  66. new Answer<Alias>() {
  67. @Override
  68. public Alias answer(final InvocationOnMock invocation) throws Throwable {
  69. return new Alias(
  70. CommandType.TYPE_GLOBAL,
  71. (String) invocation.getArguments()[0],
  72. (Integer) invocation.getArguments()[1],
  73. (String) invocation.getArguments()[2]
  74. );
  75. }
  76. });
  77. }
  78. @Test
  79. public void testgetAliases() {
  80. aliases.add(alias1);
  81. aliases.add(alias2);
  82. when(aliasModel.getAliases()).thenReturn(aliases);
  83. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  84. commandController);
  85. model.loadModel();
  86. assertEquals(2, model.getAliases().size());
  87. }
  88. @Test
  89. public void testGetAliasExists() {
  90. aliases.add(alias1);
  91. aliases.add(alias2);
  92. when(aliasModel.getAliases()).thenReturn(aliases);
  93. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  94. commandController);
  95. model.loadModel();
  96. assertEquals(model.getAlias(alias1.getName()).get(), alias1);
  97. }
  98. @Test
  99. public void testGetAliasNotExists() {
  100. aliases.add(alias1);
  101. aliases.add(alias2);
  102. when(aliasModel.getAliases()).thenReturn(aliases);
  103. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  104. commandController);
  105. model.loadModel();
  106. assertFalse(model.getAlias("test").isPresent());
  107. }
  108. @Test
  109. public void testAddAlias() {
  110. when(aliasModel.getAliases()).thenReturn(aliases);
  111. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  112. commandController);
  113. model.loadModel();
  114. assertEquals(0, model.getAliases().size());
  115. model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
  116. assertEquals(1, model.getAliases().size());
  117. }
  118. @Test
  119. public void testAddAliasListener() {
  120. when(aliasModel.getAliases()).thenReturn(aliases);
  121. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  122. commandController);
  123. model.loadModel();
  124. model.addListener(listener);
  125. model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
  126. verify(listener).aliasAdded(alias1);
  127. }
  128. @Test
  129. public void testEditAlias() {
  130. aliases.add(alias1);
  131. when(aliasModel.getAliases()).thenReturn(aliases);
  132. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  133. commandController);
  134. model.loadModel();
  135. assertEquals(1, model.getAliases().size());
  136. assertEquals(0, model.getAlias(alias2Edited.getName()).get().getMinArguments());
  137. model.editAlias(alias1.getName(), alias2Edited.getMinArguments(), alias2Edited.
  138. getSubstitution());
  139. assertEquals(1, model.getAlias(alias1.getName()).get().getMinArguments());
  140. }
  141. @Test
  142. public void testEditAliasListener() {
  143. aliases.add(alias1);
  144. when(aliasModel.getAliases()).thenReturn(aliases);
  145. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  146. commandController);
  147. model.loadModel();
  148. model.addListener(listener);
  149. model.editAlias(alias1.getName(), alias2Edited.getMinArguments(), alias2Edited.
  150. getSubstitution());
  151. verify(listener).aliasEdited(alias1, alias2Edited);
  152. }
  153. @Test
  154. public void testRenameAlias() {
  155. aliases.add(alias1);
  156. when(aliasModel.getAliases()).thenReturn(aliases);
  157. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  158. commandController);
  159. model.loadModel();
  160. assertEquals(1, model.getAliases().size());
  161. assertEquals(model.getAlias(alias1.getName()).get(), alias1);
  162. model.renameAlias(alias1.getName(), alias1Edited.getName());
  163. assertEquals(model.getAlias(alias1Edited.getName()).get(), alias2);
  164. }
  165. @Test
  166. public void testRenameAliasListener() {
  167. aliases.add(alias1);
  168. when(aliasModel.getAliases()).thenReturn(aliases);
  169. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  170. commandController);
  171. model.loadModel();
  172. model.addListener(listener);
  173. assertEquals(1, model.getAliases().size());
  174. assertEquals(model.getAlias(alias1.getName()).get(), alias1);
  175. model.renameAlias(alias1.getName(), alias1Edited.getName());
  176. verify(listener).aliasRenamed(alias1, alias1Edited);
  177. }
  178. @Test
  179. public void testRemoveAlias() {
  180. aliases.add(alias1);
  181. aliases.add(alias2);
  182. when(aliasModel.getAliases()).thenReturn(aliases);
  183. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  184. commandController);
  185. model.loadModel();
  186. assertEquals(2, model.getAliases().size());
  187. model.removeAlias(alias1.getName());
  188. assertEquals(1, model.getAliases().size());
  189. assertFalse(model.getAlias(alias1.getName()).isPresent());
  190. }
  191. @Test
  192. public void testRemoveAliasListener() {
  193. aliases.add(alias1);
  194. aliases.add(alias2);
  195. when(aliasModel.getAliases()).thenReturn(aliases);
  196. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  197. commandController);
  198. model.loadModel();
  199. model.addListener(listener);
  200. model.removeAlias(alias1.getName());
  201. verify(listener).aliasRemoved(alias1);
  202. }
  203. @Test
  204. public void testSelectedAliasInitiallyNotNull() {
  205. aliases.add(alias1);
  206. aliases.add(alias2);
  207. when(aliasModel.getAliases()).thenReturn(aliases);
  208. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  209. commandController);
  210. model.loadModel();
  211. assertEquals(2, model.getAliases().size());
  212. assertTrue(model.getSelectedAlias().isPresent());
  213. }
  214. @Test
  215. public void testSelectedAliasNotNull() {
  216. aliases.add(alias1);
  217. aliases.add(alias2);
  218. when(aliasModel.getAliases()).thenReturn(aliases);
  219. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  220. commandController);
  221. model.loadModel();
  222. assertEquals(2, model.getAliases().size());
  223. assertTrue(model.getSelectedAlias().isPresent());
  224. model.setSelectedAlias(Optional.fromNullable(alias2));
  225. assertEquals(model.getSelectedAlias().get(), alias2);
  226. }
  227. @Test
  228. public void testSelectedAliasToNull() {
  229. aliases.add(alias1);
  230. aliases.add(alias2);
  231. when(aliasModel.getAliases()).thenReturn(aliases);
  232. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  233. commandController);
  234. model.loadModel();
  235. assertEquals(2, model.getAliases().size());
  236. assertTrue(model.getSelectedAlias().isPresent());
  237. model.setSelectedAlias(Optional.fromNullable(alias2));
  238. assertEquals(model.getSelectedAlias().get(), alias2);
  239. model.setSelectedAlias(Optional.<Alias>absent());
  240. assertFalse(model.getSelectedAlias().isPresent());
  241. }
  242. @Test
  243. public void testRemoveListener() {
  244. when(aliasModel.getAliases()).thenReturn(aliases);
  245. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  246. commandController);
  247. model.loadModel();
  248. model.addListener(listener);
  249. model.addAlias(alias1.getName(), alias1.getMinArguments(), alias1.getSubstitution());
  250. model.removeListener(listener);
  251. model.addAlias(alias2.getName(), alias2.getMinArguments(), alias2.getSubstitution());
  252. verify(listener).aliasAdded(alias1);
  253. verify(listener, never()).aliasAdded(alias2);
  254. }
  255. @Test
  256. public void testRenameSelectedAlias() {
  257. aliases.add(alias1);
  258. when(aliasModel.getAliases()).thenReturn(aliases);
  259. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  260. commandController);
  261. model.loadModel();
  262. assertEquals(1, model.getAliases().size());
  263. assertEquals(model.getAlias(alias1.getName()).get(), alias1);
  264. model.setSelectedAlias(Optional.fromNullable(alias1));
  265. model.setSelectedAliasName(alias1Edited.getName());
  266. model.setSelectedAliasMinimumArguments(alias1Edited.getMinArguments());
  267. model.setSelectedAliasSubstitution(alias1Edited.getSubstitution());
  268. model.setSelectedAlias(Optional.<Alias>absent());
  269. assertEquals(model.getAlias(alias1Edited.getName()).get(), alias2);
  270. }
  271. @Test
  272. public void testEditSelectedAlias() {
  273. aliases.add(alias1);
  274. when(aliasModel.getAliases()).thenReturn(aliases);
  275. final CoreAliasDialogModel model = new CoreAliasDialogModel(aliasModel, aliasFactory,
  276. commandController);
  277. model.loadModel();
  278. assertEquals(1, model.getAliases().size());
  279. assertEquals(model.getAlias(alias1.getName()).get(), alias1);
  280. model.setSelectedAlias(Optional.fromNullable(alias1));
  281. model.setSelectedAliasMinimumArguments(alias2Edited.getMinArguments());
  282. model.setSelectedAliasSubstitution(alias2Edited.getSubstitution());
  283. model.setSelectedAlias(Optional.<Alias>absent());
  284. final Alias alias = model.getAlias(alias1.getName()).get();
  285. assertEquals(alias.getName(), alias2Edited.getName());
  286. assertEquals(alias.getMinArguments(), alias2Edited.getMinArguments());
  287. assertEquals(alias.getSubstitution(), alias2Edited.getSubstitution());
  288. }
  289. }