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.

WindowManagerTest.java 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. /*
  2. * Copyright (c) 2006-2013 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;
  23. import com.dmdirc.addons.ui_dummy.DummyController;
  24. import com.dmdirc.TestMain;
  25. import com.dmdirc.CustomWindow;
  26. import com.dmdirc.FrameContainer;
  27. import com.dmdirc.ServerManager;
  28. import com.dmdirc.addons.ui_dummy.DummyInputWindow;
  29. import com.dmdirc.commandparser.CommandManager;
  30. import com.dmdirc.config.ConfigBinder;
  31. import com.dmdirc.config.ConfigManager;
  32. import com.dmdirc.config.InvalidIdentityFileException;
  33. import com.dmdirc.harness.TestWritableFrameContainer;
  34. import com.dmdirc.interfaces.ui.FrameListener;
  35. import com.dmdirc.interfaces.ui.Window;
  36. import java.util.Arrays;
  37. import java.util.Collection;
  38. import org.junit.Before;
  39. import org.junit.Test;
  40. import org.mockito.Mock;
  41. import org.mockito.MockitoAnnotations;
  42. import static org.junit.Assert.*;
  43. import static org.mockito.Mockito.*;
  44. public class WindowManagerTest {
  45. @Mock private ConfigManager cm;
  46. @Mock private ServerManager serverManager;
  47. private CommandManager commands;
  48. @Before
  49. public void setup() throws InvalidIdentityFileException {
  50. MockitoAnnotations.initMocks(this);
  51. final ConfigBinder binder = new ConfigBinder(cm);
  52. when(cm.getBinder()).thenReturn(binder);
  53. commands = new CommandManager(cm, serverManager);
  54. }
  55. @Test
  56. public void testAddRoot() {
  57. final WindowManager manager = new WindowManager();
  58. final FrameListener tfm = mock(FrameListener.class);
  59. final Window parent = new DummyInputWindow(new DummyController(TestMain.getTestMain()), new TestWritableFrameContainer(512, cm, commands));
  60. manager.addListener(tfm);
  61. verify(tfm, never()).addWindow((FrameContainer) anyObject(), eq(true));
  62. verify(tfm, never()).addWindow((FrameContainer) anyObject(), (FrameContainer) anyObject(), eq(true));
  63. manager.addWindow(parent.getContainer());
  64. verify(tfm).addWindow(same(parent.getContainer()), eq(true));
  65. verify(tfm, never()).addWindow((FrameContainer) anyObject(), (FrameContainer) anyObject(), eq(true));
  66. }
  67. @Test
  68. public void testAddChild() {
  69. final WindowManager manager = new WindowManager();
  70. final FrameListener tfm = mock(FrameListener.class);
  71. final Window parent = new DummyInputWindow(new DummyController(TestMain.getTestMain()), new TestWritableFrameContainer(512, cm, commands));
  72. final Window child = new DummyInputWindow(new DummyController(TestMain.getTestMain()), new TestWritableFrameContainer(512, cm, commands));
  73. manager.addWindow(parent.getContainer());
  74. manager.addListener(tfm);
  75. manager.addWindow(parent.getContainer(), child.getContainer());
  76. verify(tfm, never()).addWindow((FrameContainer) anyObject(), eq(true));
  77. verify(tfm).addWindow(same(parent.getContainer()), same(child.getContainer()), eq(true));
  78. }
  79. @Test
  80. public void testRemoveRoot() {
  81. final WindowManager manager = new WindowManager();
  82. final FrameListener tfm = mock(FrameListener.class);
  83. final Window parent = new DummyInputWindow(new DummyController(TestMain.getTestMain()), new TestWritableFrameContainer(512, cm, commands));
  84. manager.addWindow(parent.getContainer());
  85. manager.addListener(tfm);
  86. manager.removeWindow(parent.getContainer());
  87. verify(tfm).delWindow(same(parent.getContainer()));
  88. }
  89. @Test
  90. public void testRemoveChild() {
  91. final WindowManager manager = new WindowManager();
  92. final FrameListener tfm = mock(FrameListener.class);
  93. final Window parent = new DummyInputWindow(new DummyController(TestMain.getTestMain()), new TestWritableFrameContainer(512, cm, commands));
  94. final Window child = new DummyInputWindow(new DummyController(TestMain.getTestMain()), new TestWritableFrameContainer(512, cm, commands));
  95. manager.addWindow(parent.getContainer());
  96. manager.addWindow(parent.getContainer(), child.getContainer());
  97. manager.addListener(tfm);
  98. manager.removeWindow(child.getContainer());
  99. verify(tfm, never()).addWindow((FrameContainer) anyObject(), eq(true));
  100. verify(tfm, never()).addWindow((FrameContainer) anyObject(), (FrameContainer) anyObject(), eq(true));
  101. verify(tfm, never()).delWindow((FrameContainer) anyObject());
  102. verify(tfm).delWindow(same(parent.getContainer()), same(child.getContainer()));
  103. }
  104. @Test
  105. public void testRemoveFrameManager() {
  106. final WindowManager manager = new WindowManager();
  107. final FrameListener tfm = mock(FrameListener.class);
  108. final Window parent = new DummyInputWindow(new DummyController(TestMain.getTestMain()), new TestWritableFrameContainer(512, cm, commands));
  109. final Window child = new DummyInputWindow(new DummyController(TestMain.getTestMain()), new TestWritableFrameContainer(512, cm, commands));
  110. manager.addWindow(parent.getContainer());
  111. manager.addListener(tfm);
  112. manager.removeListener(tfm);
  113. manager.addWindow(parent.getContainer(), child.getContainer());
  114. verify(tfm, never()).addWindow((FrameContainer) anyObject(), eq(true));
  115. verify(tfm, never()).addWindow((FrameContainer) anyObject(), (FrameContainer) anyObject(), eq(true));
  116. verify(tfm, never()).delWindow((FrameContainer) anyObject());
  117. verify(tfm, never()).delWindow((FrameContainer) anyObject(), (FrameContainer) anyObject());
  118. }
  119. @Test
  120. public void testAddListener() {
  121. final FrameContainer parent = mock(FrameContainer.class);
  122. final FrameListener fl = mock(FrameListener.class);
  123. final WindowManager wm = new WindowManager();
  124. wm.addListener(fl);
  125. wm.addWindow(parent);
  126. verify(fl).addWindow(parent, true);
  127. }
  128. @Test
  129. public void testAddListenerAndSync() {
  130. final FrameContainer parent = mock(FrameContainer.class);
  131. final FrameContainer child = mock(FrameContainer.class);
  132. final FrameContainer grandChild = mock(FrameContainer.class);
  133. final FrameListener fl = mock(FrameListener.class);
  134. final WindowManager wm = new WindowManager();
  135. when(parent.getChildren()).thenReturn(Arrays.asList(
  136. new FrameContainer[]{child, }));
  137. when(child.getChildren()).thenReturn(Arrays.asList(
  138. new FrameContainer[]{grandChild, }));
  139. wm.addWindow(parent);
  140. wm.addListenerAndSync(fl);
  141. verify(fl).addWindow(parent, true);
  142. verify(fl).addWindow(parent, child, true);
  143. verify(fl).addWindow(child, grandChild, true);
  144. }
  145. @Test
  146. public void testRemoveWindowRootWindowNoChildren() {
  147. final FrameListener fl = mock(FrameListener.class);
  148. final FrameContainer parent = mock(FrameContainer.class);
  149. final WindowManager wm = new WindowManager();
  150. wm.addListener(fl);
  151. wm.addWindow(parent);
  152. wm.removeWindow(parent);
  153. verify(fl).delWindow(parent);
  154. verify(parent).windowClosed();
  155. }
  156. @Test
  157. public void testRemoveWindowRootWindowWithChildren() {
  158. final FrameListener fl = mock(FrameListener.class);
  159. final FrameContainer parent = mock(FrameContainer.class);
  160. final FrameContainer child = mock(FrameContainer.class);
  161. final WindowManager wm = new WindowManager();
  162. when(parent.getChildren()).thenReturn(Arrays.asList(
  163. new FrameContainer[]{child, }));
  164. when(child.getParent()).thenReturn(parent);
  165. wm.addListener(fl);
  166. wm.addWindow(parent);
  167. wm.removeWindow(parent);
  168. verify(fl).delWindow(parent);
  169. verify(child).close();
  170. verify(parent).windowClosed();
  171. }
  172. @Test
  173. public void testRemoveChildWindowNoChildren() {
  174. final FrameListener fl = mock(FrameListener.class);
  175. final FrameContainer parent = mock(FrameContainer.class);
  176. final FrameContainer child = mock(FrameContainer.class);
  177. final WindowManager wm = new WindowManager();
  178. when(parent.getChildren()).thenReturn(Arrays.asList(
  179. new FrameContainer[]{child, }));
  180. when(child.getParent()).thenReturn(parent);
  181. wm.addListener(fl);
  182. wm.addWindow(parent);
  183. wm.removeWindow(child);
  184. verify(fl).delWindow(parent, child);
  185. verify(child).windowClosed();
  186. verify(parent).removeChild(child);
  187. }
  188. @Test
  189. public void testRemoveChildWindowWithChildren() {
  190. final FrameListener fl = mock(FrameListener.class);
  191. final FrameContainer parent = mock(FrameContainer.class);
  192. final FrameContainer child = mock(FrameContainer.class);
  193. final FrameContainer grandChild = mock(FrameContainer.class);
  194. final WindowManager wm = new WindowManager();
  195. when(parent.getChildren()).thenReturn(Arrays.asList(
  196. new FrameContainer[]{child, }));
  197. when(child.getChildren()).thenReturn(Arrays.asList(
  198. new FrameContainer[]{grandChild, }));
  199. when(child.getParent()).thenReturn(parent);
  200. wm.addListener(fl);
  201. wm.addWindow(parent);
  202. wm.removeWindow(child);
  203. verify(fl).delWindow(parent, child);
  204. verify(grandChild).close();
  205. verify(child).windowClosed();
  206. verify(parent).removeChild(child);
  207. }
  208. @Test
  209. public void testGetRootWindows() {
  210. final FrameContainer root1 = mock(FrameContainer.class);
  211. final FrameContainer root2 = mock(FrameContainer.class);
  212. final Collection<FrameContainer> rootWindows
  213. = Arrays.asList(new FrameContainer[]{root1, root2, });
  214. final WindowManager wm = new WindowManager();
  215. wm.addWindow(root1);
  216. wm.addWindow(root2);
  217. assertTrue(wm.getRootWindows().containsAll(rootWindows));
  218. }
  219. @Test
  220. public void testFindCustomWindow() {
  221. final WindowManager wm = new WindowManager();
  222. final CustomWindow custom = mock(CustomWindow.class);
  223. when(custom.getName()).thenReturn("test");
  224. wm.addWindow(custom);
  225. assertEquals(custom, wm.findCustomWindow("test"));
  226. }
  227. @Test
  228. public void testFindCustomWindowNotFound() {
  229. final WindowManager wm = new WindowManager();
  230. final CustomWindow custom = mock(CustomWindow.class);
  231. when(custom.getName()).thenReturn("test");
  232. wm.addWindow(custom);
  233. assertNull(wm.findCustomWindow("test1"));
  234. }
  235. @Test
  236. public void testFindCustomWindowWithParent() {
  237. final WindowManager wm = new WindowManager();
  238. final CustomWindow parent = mock(CustomWindow.class);
  239. final CustomWindow child = mock(CustomWindow.class);
  240. when(parent.getName()).thenReturn("test");
  241. when(child.getName()).thenReturn("test1");
  242. when(parent.getChildren()).thenReturn(Arrays.asList(
  243. new FrameContainer[]{child, }));
  244. wm.addWindow(parent);
  245. wm.addWindow(parent, child);
  246. assertEquals(child, wm.findCustomWindow(parent, "test1"));
  247. }
  248. @Test
  249. public void testFindCustomWindowWithParentNotFound() {
  250. final WindowManager wm = new WindowManager();
  251. final CustomWindow parent = mock(CustomWindow.class);
  252. final CustomWindow child = mock(CustomWindow.class);
  253. when(parent.getName()).thenReturn("test");
  254. when(child.getName()).thenReturn("test1");
  255. when(parent.getChildren()).thenReturn(Arrays.asList(
  256. new FrameContainer[]{child, }));
  257. wm.addWindow(parent);
  258. wm.addWindow(parent, child);
  259. assertNull(wm.findCustomWindow(parent, "test"));
  260. }
  261. }