/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * 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 net.java.sip.communicator.impl.protocol.irc; import junit.framework.*; import net.java.sip.communicator.impl.protocol.irc.exception.*; import org.easymock.*; public class CommandFactoryTest extends TestCase { public void testCommandsAvailable() { Assert.assertNotNull(CommandFactory.getCommands()); } public void testRegisterNullCommand() { try { CommandFactory.registerCommand(null, Test.class); Assert.fail(); } catch (IllegalArgumentException e) { } } public void testRegisterNullType() { try { CommandFactory.registerCommand("test", null); Assert.fail(); } catch (IllegalArgumentException e) { } } public void testRegisterCorrectCommand() { CommandFactory.registerCommand("test", Test.class); Assert.assertEquals(1, CommandFactory.getCommands().size()); Assert.assertEquals(Test.class, CommandFactory.getCommands() .get("test")); CommandFactory.unregisterCommand(Test.class, "test"); Assert.assertEquals(0, CommandFactory.getCommands().size()); } public void testRegisterMultipleCommandsForType() { CommandFactory.registerCommand("test", Test.class); CommandFactory.registerCommand("bla", Test.class); Assert.assertEquals(Test.class, CommandFactory.getCommands() .get("test")); Assert.assertEquals(Test.class, CommandFactory.getCommands() .get("bla")); Assert.assertEquals(2, CommandFactory.getCommands().size()); CommandFactory.unregisterCommand(Test.class, null); Assert.assertEquals(0, CommandFactory.getCommands().size()); } public void testUnregisterMultipleAmongOtherTypes() { Command anotherType = new Command() { @Override public void execute(String source, String line) { } @Override public String help() { return null; }}; CommandFactory.registerCommand("test", Test.class); CommandFactory.registerCommand("foo", anotherType.getClass()); CommandFactory.registerCommand("bla", Test.class); Assert.assertEquals(Test.class, CommandFactory.getCommands() .get("test")); Assert.assertEquals(Test.class, CommandFactory.getCommands() .get("bla")); Assert.assertNotNull(CommandFactory.getCommands().get("foo")); Assert.assertEquals(3, CommandFactory.getCommands().size()); CommandFactory.unregisterCommand(Test.class, null); Assert.assertEquals(1, CommandFactory.getCommands().size()); Assert.assertNotSame(Test.class, CommandFactory.getCommands().get("foo")); CommandFactory.unregisterCommand(anotherType.getClass(), null); } public void testUnregisterOneAmongMultipleSameType() { CommandFactory.registerCommand("test", Test.class); CommandFactory.registerCommand("bla", Test.class); Assert.assertEquals(Test.class, CommandFactory.getCommands() .get("test")); Assert.assertEquals(Test.class, CommandFactory.getCommands() .get("bla")); Assert.assertEquals(2, CommandFactory.getCommands().size()); CommandFactory.unregisterCommand(Test.class, "test"); Assert.assertEquals(1, CommandFactory.getCommands().size()); Assert.assertEquals(Test.class, CommandFactory.getCommands().get("bla")); CommandFactory.unregisterCommand(Test.class, null); } public static class Test implements Command { public Test(ProtocolProviderServiceIrcImpl provider, IrcConnection connection) { } @Override public void execute(String source, String line) { } @Override public String help() { return null; } } public void testConstructionNullProvider() { IrcConnection connection = EasyMock.createMock(IrcConnection.class); EasyMock.replay(connection); try { new CommandFactory(null, connection); Assert.fail(); } catch (IllegalArgumentException e) { } } public void testConstructionNullConnection() { ProtocolProviderServiceIrcImpl provider = EasyMock.createMock(ProtocolProviderServiceIrcImpl.class); EasyMock.replay(provider); try { new CommandFactory(provider, null); Assert.fail(); } catch (IllegalArgumentException e) { } } public void testConstruction() { ProtocolProviderServiceIrcImpl provider = EasyMock.createMock(ProtocolProviderServiceIrcImpl.class); IrcConnection connection = EasyMock.createMock(IrcConnection.class); EasyMock.replay(provider, connection); new CommandFactory(provider, connection); } public void testNonExistingCommand() throws BadCommandException { ProtocolProviderServiceIrcImpl provider = EasyMock.createMock(ProtocolProviderServiceIrcImpl.class); IrcConnection connection = EasyMock.createMock(IrcConnection.class); EasyMock.replay(provider, connection); try { CommandFactory factory = new CommandFactory(provider, connection); factory.createCommand("test"); Assert.fail(); } catch (UnsupportedCommandException e) { } } public void testCreateNullCommandName() throws UnsupportedCommandException, BadCommandException { ProtocolProviderServiceIrcImpl provider = EasyMock.createMock(ProtocolProviderServiceIrcImpl.class); IrcConnection connection = EasyMock.createMock(IrcConnection.class); EasyMock.replay(provider, connection); CommandFactory.registerCommand("test", Test.class); try { CommandFactory factory = new CommandFactory(provider, connection); factory.createCommand(null); Assert.fail(); } catch (IllegalArgumentException e) { } CommandFactory.unregisterCommand(Test.class, null); } public void testCreateEmptyCommandName() throws UnsupportedCommandException, BadCommandException { ProtocolProviderServiceIrcImpl provider = EasyMock.createMock(ProtocolProviderServiceIrcImpl.class); IrcConnection connection = EasyMock.createMock(IrcConnection.class); EasyMock.replay(provider, connection); CommandFactory.registerCommand("test", Unreachable.class); try { CommandFactory factory = new CommandFactory(provider, connection); factory.createCommand(""); Assert.fail(); } catch (IllegalArgumentException e) { } finally { CommandFactory.unregisterCommand(Test.class, null); } } public void testExistingCommand() throws UnsupportedCommandException, BadCommandException { ProtocolProviderServiceIrcImpl provider = EasyMock.createMock(ProtocolProviderServiceIrcImpl.class); IrcConnection connection = EasyMock.createMock(IrcConnection.class); EasyMock.replay(provider, connection); CommandFactory.registerCommand("test", Test.class); try { CommandFactory factory = new CommandFactory(provider, connection); Command cmd = factory.createCommand("test"); Assert.assertNotNull(cmd); Assert.assertTrue(cmd instanceof Test); } finally { CommandFactory.unregisterCommand(Test.class, null); } } public void testUnreachableCommand() throws UnsupportedCommandException { ProtocolProviderServiceIrcImpl provider = EasyMock.createMock(ProtocolProviderServiceIrcImpl.class); IrcConnection connection = EasyMock.createMock(IrcConnection.class); EasyMock.replay(provider, connection); CommandFactory.registerCommand("test", Unreachable.class); try { CommandFactory factory = new CommandFactory(provider, connection); factory.createCommand("test"); Assert.fail(); } catch (BadCommandException e) { } finally { CommandFactory.unregisterCommand(Unreachable.class, null); } } public void testBadCommand() throws UnsupportedCommandException { ProtocolProviderServiceIrcImpl provider = EasyMock.createMock(ProtocolProviderServiceIrcImpl.class); IrcConnection connection = EasyMock.createMock(IrcConnection.class); EasyMock.replay(provider, connection); CommandFactory.registerCommand("test", BadImplementation.class); try { CommandFactory factory = new CommandFactory(provider, connection); factory.createCommand("test"); Assert.fail(); } catch (BadCommandException e) { } finally { CommandFactory.unregisterCommand(BadImplementation.class, null); } } private static final class Unreachable implements Command { private Unreachable(ProtocolProviderServiceIrcImpl provider, IrcConnection connection) { } @Override public void execute(String source, String line) { } @Override public String help() { return null; } } public abstract static class BadImplementation implements Command { public BadImplementation(ProtocolProviderServiceIrcImpl provider, IrcConnection connection) { } } }