/* * Copyright 2000-2006 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * 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 CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.communicator.idea.toolWindow; import jetbrains.communicator.core.impl.BaseTestCase; import jetbrains.communicator.core.EventBroadcaster; import jetbrains.communicator.core.impl.dispatcher.LocalMessageDispatcherImpl; import jetbrains.communicator.core.impl.users.UserImpl; import jetbrains.communicator.core.impl.users.UserModelImpl; import jetbrains.communicator.core.transport.TransportEvent; import jetbrains.communicator.core.users.User; import jetbrains.communicator.mock.MockIDEFacade; import jetbrains.communicator.mock.MockTransport; import jetbrains.communicator.mock.MockUser; import jetbrains.communicator.util.TreeUtils; import javax.swing.*; /** * @author Kir Maximov */ public class UserListComponentTest extends BaseTestCase { private UserListComponentImpl myUserListComponent; private UserModelImpl myUserModel; private MockIDEFacade myIdeFacade; private EventBroadcaster myBroadcaster; private LocalMessageDispatcherImpl myLocalMessageDispatcher; @Override protected void setUp() throws Exception { super.setUp(); myBroadcaster = getBroadcaster(); myIdeFacade = new MockIDEFacade(getClass()); myUserModel = new UserModelImpl(myBroadcaster); disposeOnTearDown(myUserModel); myLocalMessageDispatcher = new LocalMessageDispatcherImpl(myBroadcaster, myIdeFacade, myUserModel); disposeOnTearDown(myLocalMessageDispatcher); myUserListComponent = new UserListComponentImpl(myUserModel, myIdeFacade, myLocalMessageDispatcher); disposeOnTearDown(myUserListComponent); getTree().updateUI(); // Emulate the UI change } public void testGetSelectedNodes() throws Exception { myUserModel.addGroup("a group"); MockUser user = new MockUser("user", "group"); myUserModel.addUser(user); JTree jTree = getTree(); jTree.expandRow(1); jTree.setSelectionInterval(0, 2); Object[] selectedNodes = myUserListComponent.getSelectedNodes(); assertEquals("a group", selectedNodes[0]); assertEquals("group", selectedNodes[1]); assertEquals(user, selectedNodes[2]); } public void testGetSelectedNodes_WhenEditing() throws Exception { myUserModel.addGroup("a group"); JTree jTree = getTree(); jTree.setSelectionRow(0); jTree.startEditingAtPath(jTree.getPathForRow(0)); Object[] selectedNodes = myUserListComponent.getSelectedNodes(); assertEquals("No nodes should be returned while editing to disable actions", 0, selectedNodes.length); } private JTree getTree() { return myUserListComponent.getTree(); } public void testExpandGroupNodeOnUserAdd() throws Exception { myUserModel.addGroup("a group"); myUserModel.addUser(new MockUser("user", "a group")); assertEquals("User group should be expanded", 2, getTree().getRowCount()); } public void testExpandGroupMessageReceived() throws Exception { MockTransport transport = new MockTransport(); User user = UserImpl.create("nick", transport.getName()); user.setGroup("some non-default group", myUserModel); myUserModel.addUser(user); TreeUtils.collapseAll(getTree()); assertEquals("Sanity check", 1, getTree().getRowCount()); myBroadcaster.fireEvent(new TransportEvent(transport, "nick"){}); assertEquals("User group should be expanded to show incoming message icon", 2, getTree().getRowCount()); } public void testSaveLoadTreeState() throws Exception { myUserModel.addUser(new MockUser("user1", "group")); myUserModel.addUser(new MockUser("user2", "group")); myUserModel.addGroup("daaa"); myUserModel.addUser(new MockUser("user3", "zzzz")); TreeUtils.collapseAll(getTree()); getTree().expandRow(1); assertEquals("Sanity check", 5, getTree().getRowCount()); myUserListComponent.saveState(); myUserListComponent = new UserListComponentImpl(myUserModel, myIdeFacade, myLocalMessageDispatcher); disposeOnTearDown(myUserListComponent); assertEquals("Tree state should be restored", 5, getTree().getRowCount()); } }