From 7c275e8cb8d0fa50d685e81e1a0765ed8da50f67 Mon Sep 17 00:00:00 2001 From: Danny van Heumen Date: Fri, 24 Jan 2014 23:58:51 +0100 Subject: [PATCH] Some testing of helper classes. --- .../communicator/impl/protocol/irc/Mode.java | 5 +- .../impl/protocol/irc/ModeParser.java | 26 ++- .../impl/protocol/irc/ModeParserTest.java | 217 ++++++++++++++++++ .../impl/protocol/irc/ModeTest.java | 48 ++++ .../impl/protocol/irc/ResultTest.java | 14 +- 5 files changed, 298 insertions(+), 12 deletions(-) create mode 100644 test/net/java/sip/communicator/impl/protocol/irc/ModeParserTest.java create mode 100644 test/net/java/sip/communicator/impl/protocol/irc/ModeTest.java diff --git a/src/net/java/sip/communicator/impl/protocol/irc/Mode.java b/src/net/java/sip/communicator/impl/protocol/irc/Mode.java index 1fe691461..0e92e6fa0 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/Mode.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/Mode.java @@ -19,7 +19,10 @@ public enum Mode OWNER('O', ChatRoomMemberRole.OWNER), OPERATOR('o', ChatRoomMemberRole.ADMINISTRATOR), VOICE('v', ChatRoomMemberRole.MEMBER), - LIMIT('l', null); + LIMIT('l', null), + PRIVATE('p', null), + SECRET('s', null), + INVITE('i', null); /** * Find Mode instance by mode char. diff --git a/src/net/java/sip/communicator/impl/protocol/irc/ModeParser.java b/src/net/java/sip/communicator/impl/protocol/irc/ModeParser.java index 0143c4f29..daef86b8b 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/ModeParser.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/ModeParser.java @@ -67,20 +67,30 @@ protected ModeParser(String modestring) */ private void parse(String modestring) { - boolean adding = true; + Boolean addition = null; for (char c : modestring.toCharArray()) { switch (c) { case '+': - adding = true; + addition = true; break; case '-': - adding = false; + addition = false; break; default: - ModeEntry entry = process(adding, c); - modes.add(entry); + if (addition == null) + throw new IllegalStateException( + "expect modifier (+ or -) first"); + try + { + ModeEntry entry = process(addition, c); + modes.add(entry); + } + catch (ArrayIndexOutOfBoundsException e) + { + throw new IllegalArgumentException("invalid mode string provided: parameter missing", e); + } break; } } @@ -108,6 +118,12 @@ private ModeEntry process(boolean add, char mode) String[] params = (add ? new String[] { this.params[this.index++] } : new String[] {}); return new ModeEntry(add, Mode.LIMIT, params); + case 'p': + return new ModeEntry(add, Mode.PRIVATE); + case 's': + return new ModeEntry(add, Mode.SECRET); + case 'i': + return new ModeEntry(add, Mode.INVITE); default: return new ModeEntry(add, Mode.UNKNOWN, ""+mode); } diff --git a/test/net/java/sip/communicator/impl/protocol/irc/ModeParserTest.java b/test/net/java/sip/communicator/impl/protocol/irc/ModeParserTest.java new file mode 100644 index 000000000..6d8f97495 --- /dev/null +++ b/test/net/java/sip/communicator/impl/protocol/irc/ModeParserTest.java @@ -0,0 +1,217 @@ +package net.java.sip.communicator.impl.protocol.irc; + +import java.util.*; + +import net.java.sip.communicator.impl.protocol.irc.ModeParser.ModeEntry; + +import com.ircclouds.irc.api.domain.messages.*; + +import junit.framework.*; + +public class ModeParserTest + extends TestCase +{ + + protected void setUp() throws Exception + { + super.setUp(); + } + + public void testConstructionModeMessageNull() + { + try + { + new ModeParser((ChannelModeMessage) null); + Assert.fail("Expected NPE"); + } + catch (NullPointerException e) + { + } + } + + public void testConstructionStringNull() + { + try + { + new ModeParser((String) null); + Assert.fail("Expected NPE"); + } + catch (NullPointerException e) + { + } + } + + public void testConstructionStringEmpty() + { + ModeParser parser = new ModeParser(""); + List modes = parser.getModes(); + Assert.assertNotNull(modes); + Assert.assertEquals(0, modes.size()); + } + + public void testConstructionStringSingleBad() + { + try + { + new ModeParser("p"); + Assert.fail(); + } + catch (IllegalStateException e) + { + } + } + + public void testConstructionStringSingleGood() + { + ModeParser parser = new ModeParser("+p"); + List modes = parser.getModes(); + Assert.assertNotNull(modes); + Assert.assertEquals(1, modes.size()); + Assert.assertTrue(modes.get(0) instanceof ModeEntry); + Assert.assertEquals(Mode.PRIVATE, modes.get(0).getMode()); + Assert.assertTrue(modes.get(0).isAdded()); + Assert.assertEquals(0, modes.get(0).getParams().length); + } + + public void testParseRemoval() + { + ModeParser parser = new ModeParser("-p"); + List modes = parser.getModes(); + Assert.assertNotNull(modes); + Assert.assertEquals(1, modes.size()); + Assert.assertTrue(modes.get(0) instanceof ModeEntry); + Assert.assertEquals(Mode.PRIVATE, modes.get(0).getMode()); + Assert.assertFalse(modes.get(0).isAdded()); + Assert.assertEquals(0, modes.get(0).getParams().length); + } + + public void testParseUnknownMode() + { + ModeParser parser = new ModeParser("+?"); + List modes = parser.getModes(); + Assert.assertNotNull(modes); + Assert.assertEquals(1, modes.size()); + Assert.assertTrue(modes.get(0) instanceof ModeEntry); + Assert.assertEquals(Mode.UNKNOWN, modes.get(0).getMode()); + Assert.assertEquals(1, modes.get(0).getParams().length); + Assert.assertEquals("?", modes.get(0).getParams()[0]); + } + + public void testModeMissingExtraParameters() + { + try + { + new ModeParser("+l"); + Assert.fail("this line should not be reached"); + } + catch (IllegalArgumentException e) + { + // expect illegal argument exception + } + } + + public void testModeExtraParameters() + { + ModeParser parser = new ModeParser("+l 123 141"); + Assert.assertEquals(1, parser.getModes().size()); + // Parse modes, expect 1 and ignore the extra parameter. + } + + public void testModeOwner() + { + ModeParser parser = new ModeParser("+O dude"); + List modes = parser.getModes(); + Assert.assertNotNull(modes); + Assert.assertEquals(1, modes.size()); + Assert.assertTrue(modes.get(0) instanceof ModeEntry); + Assert.assertEquals(Mode.OWNER, modes.get(0).getMode()); + Assert.assertEquals(1, modes.get(0).getParams().length); + Assert.assertEquals("dude", modes.get(0).getParams()[0]); + } + + public void testModeOperator() + { + ModeParser parser = new ModeParser("+o dude"); + List modes = parser.getModes(); + Assert.assertNotNull(modes); + Assert.assertEquals(1, modes.size()); + Assert.assertTrue(modes.get(0) instanceof ModeEntry); + Assert.assertEquals(Mode.OPERATOR, modes.get(0).getMode()); + Assert.assertEquals(1, modes.get(0).getParams().length); + Assert.assertEquals("dude", modes.get(0).getParams()[0]); + } + + public void testModeVoice() + { + ModeParser parser = new ModeParser("+v dude"); + List modes = parser.getModes(); + Assert.assertNotNull(modes); + Assert.assertEquals(1, modes.size()); + Assert.assertTrue(modes.get(0) instanceof ModeEntry); + Assert.assertEquals(Mode.VOICE, modes.get(0).getMode()); + Assert.assertEquals(1, modes.get(0).getParams().length); + Assert.assertEquals("dude", modes.get(0).getParams()[0]); + } + + public void testModeLimitAddition() + { + ModeParser parser = new ModeParser("+l 13"); + List modes = parser.getModes(); + Assert.assertNotNull(modes); + Assert.assertEquals(1, modes.size()); + Assert.assertTrue(modes.get(0) instanceof ModeEntry); + Assert.assertEquals(Mode.LIMIT, modes.get(0).getMode()); + Assert.assertEquals(1, modes.get(0).getParams().length); + Assert.assertEquals("13", modes.get(0).getParams()[0]); + } + + public void testModeLimitRemoval() + { + ModeParser parser = new ModeParser("-l"); + List modes = parser.getModes(); + Assert.assertNotNull(modes); + Assert.assertEquals(1, modes.size()); + Assert.assertTrue(modes.get(0) instanceof ModeEntry); + Assert.assertEquals(Mode.LIMIT, modes.get(0).getMode()); + Assert.assertEquals(0, modes.get(0).getParams().length); + } + + public void testModePrivate() + { + ModeParser parser = new ModeParser("+p"); + List modes = parser.getModes(); + Assert.assertNotNull(modes); + Assert.assertEquals(1, modes.size()); + Assert.assertTrue(modes.get(0) instanceof ModeEntry); + Assert.assertEquals(Mode.PRIVATE, modes.get(0).getMode()); + Assert.assertEquals(0, modes.get(0).getParams().length); + } + + public void testModeSecret() + { + ModeParser parser = new ModeParser("+s"); + List modes = parser.getModes(); + Assert.assertNotNull(modes); + Assert.assertEquals(1, modes.size()); + Assert.assertTrue(modes.get(0) instanceof ModeEntry); + Assert.assertEquals(Mode.SECRET, modes.get(0).getMode()); + Assert.assertEquals(0, modes.get(0).getParams().length); + } + + public void testModeInvite() + { + ModeParser parser = new ModeParser("+i"); + List modes = parser.getModes(); + Assert.assertNotNull(modes); + Assert.assertEquals(1, modes.size()); + Assert.assertTrue(modes.get(0) instanceof ModeEntry); + Assert.assertEquals(Mode.INVITE, modes.get(0).getMode()); + Assert.assertEquals(0, modes.get(0).getParams().length); + } + + protected void tearDown() throws Exception + { + super.tearDown(); + } + +} diff --git a/test/net/java/sip/communicator/impl/protocol/irc/ModeTest.java b/test/net/java/sip/communicator/impl/protocol/irc/ModeTest.java new file mode 100644 index 000000000..47c23ec43 --- /dev/null +++ b/test/net/java/sip/communicator/impl/protocol/irc/ModeTest.java @@ -0,0 +1,48 @@ +package net.java.sip.communicator.impl.protocol.irc; + +import net.java.sip.communicator.service.protocol.*; +import junit.framework.*; + +public class ModeTest + extends TestCase +{ + + protected void setUp() throws Exception + { + super.setUp(); + } + + public void testGetSymbol() + { + Assert.assertEquals('o', Mode.OPERATOR.getSymbol()); + } + + public void testGetRole() + { + Assert + .assertTrue(Mode.OPERATOR.getRole() instanceof ChatRoomMemberRole); + } + + public void testGetBySymbol() + { + Assert.assertSame(Mode.OPERATOR, Mode.bySymbol('o')); + } + + public void testGetBySymbolNonExisting() + { + try + { + Mode.bySymbol('&'); + Assert.fail("Expected IllegalArgumentException"); + } + catch (IllegalArgumentException e) + { + } + } + + protected void tearDown() throws Exception + { + super.tearDown(); + } + +} diff --git a/test/net/java/sip/communicator/impl/protocol/irc/ResultTest.java b/test/net/java/sip/communicator/impl/protocol/irc/ResultTest.java index 5082cdda4..64b6127b2 100644 --- a/test/net/java/sip/communicator/impl/protocol/irc/ResultTest.java +++ b/test/net/java/sip/communicator/impl/protocol/irc/ResultTest.java @@ -13,7 +13,7 @@ public void testConstruction() Assert.assertNull(result.getValue()); Assert.assertNull(result.getException()); } - + public void testSetDone() { Result result = new Result(); @@ -22,7 +22,7 @@ public void testSetDone() Assert.assertNull(result.getValue()); Assert.assertNull(result.getException()); } - + public void testSetDoneWithValue() { Object v = new Object(); @@ -32,21 +32,23 @@ public void testSetDoneWithValue() Assert.assertSame(v, result.getValue()); Assert.assertNull(result.getException()); } - + public void testSetDoneWithException() { - Exception e = new IllegalStateException("the world is going to explode"); + Exception e = + new IllegalStateException("the world is going to explode"); Result result = new Result(); result.setDone(e); Assert.assertTrue(result.isDone()); Assert.assertNull(result.getValue()); Assert.assertSame(e, result.getException()); } - + public void testSetDoneWithBoth() { Object v = new Object(); - Exception e = new IllegalStateException("the world is going to explode"); + Exception e = + new IllegalStateException("the world is going to explode"); Result result = new Result(); result.setDone(v, e); Assert.assertTrue(result.isDone());