From 3be3f614c287cda7e275c5ef2b8a42e49250128d Mon Sep 17 00:00:00 2001 From: andsel Date: Fri, 3 Aug 2012 17:21:16 +0200 Subject: [PATCH] Added check of not empty subtopics in splitTopics method --- .../spi/impl/SubscriptionsStore.java | 41 +++++++++++++------ .../spi/impl/SubscriptionsStoreTest.java | 18 ++++++-- 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStore.java b/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStore.java index 6ea8a179..1d33e9fc 100644 --- a/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStore.java +++ b/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStore.java @@ -1,5 +1,6 @@ package org.dna.mqtt.moquette.messaging.spi.impl; +import java.text.ParseException; import java.util.ArrayList; import java.util.List; @@ -11,7 +12,21 @@ import java.util.List; public class SubscriptionsStore { protected static class Token { - + + static final Token EMPTY = new Token(""); + static final Token MULTI = new Token("#"); + static final Token SINGLE = new Token("+"); + + String name; + + protected Token(String s) { + name = s; + } + + protected String name() { + return name; + } + @Override public int hashCode() { int hash = 7; @@ -33,14 +48,6 @@ public class SubscriptionsStore { } return true; } - String name; - protected Token(String s) { - name = s; - } - - protected String name() { - return name; - } } private List subscriptions = new ArrayList(); @@ -70,10 +77,20 @@ public class SubscriptionsStore { return subscriptions.size(); } - protected List splitTopic(String topic) { + protected List splitTopic(String topic) throws ParseException { List res = new ArrayList(); - for (String s : topic.split("/")) { - res.add(new Token(s)); + String[] splitted = topic.split("/"); + + for (int i=0; i result = store.splitTopic("finance/stock/ibm"); - assertEqualsSeq(asArray("finance", "stock", "ibm"), result); + public void testSplitTopic() throws ParseException { + List tokens = store.splitTopic("finance/stock/ibm"); + assertEqualsSeq(asArray("finance", "stock", "ibm"), tokens); + + tokens = store.splitTopic("/finance/stock/ibm"); + assertEqualsSeq(asArray(Token.EMPTY, "finance", "stock", "ibm"), tokens); + } + + + @Test(expected = ParseException.class) + public void testSplitTopicTwinsSlashAvoided() throws ParseException { + store.splitTopic("/finance//stock/ibm"); } private static Token[] asArray(Object... l) {