diff --git a/core/src/main/java/org/bouncycastle/util/Strings.java b/core/src/main/java/org/bouncycastle/util/Strings.java index 68075e5dd3..28f32f1079 100644 --- a/core/src/main/java/org/bouncycastle/util/Strings.java +++ b/core/src/main/java/org/bouncycastle/util/Strings.java @@ -333,7 +333,7 @@ public static String[] split(String input, char delimiter) while (moreTokens) { int tokenLocation = input.indexOf(delimiter); - if (tokenLocation > 0) + if (tokenLocation >= 0) { subString = input.substring(0, tokenLocation); v.addElement(subString); diff --git a/core/src/test/java/org/bouncycastle/util/utiltest/AllTests.java b/core/src/test/java/org/bouncycastle/util/utiltest/AllTests.java index f4d21358c2..19ff5734fc 100644 --- a/core/src/test/java/org/bouncycastle/util/utiltest/AllTests.java +++ b/core/src/test/java/org/bouncycastle/util/utiltest/AllTests.java @@ -19,6 +19,7 @@ public static Test suite() suite.addTestSuite(IPTest.class); suite.addTestSuite(BigIntegersTest.class); suite.addTestSuite(ArraysTest.class); + suite.addTestSuite(StringsTest.class); return new BCTestSetup(suite); } diff --git a/core/src/test/java/org/bouncycastle/util/utiltest/StringsTest.java b/core/src/test/java/org/bouncycastle/util/utiltest/StringsTest.java new file mode 100644 index 0000000000..4e1ba3f7b8 --- /dev/null +++ b/core/src/test/java/org/bouncycastle/util/utiltest/StringsTest.java @@ -0,0 +1,67 @@ +package org.bouncycastle.util.utiltest; + +import junit.framework.TestCase; +import org.bouncycastle.util.Strings; + +public class StringsTest + extends TestCase +{ + public void testSplitWithLeadingDelimiter() + { + String[] parts = Strings.split(".permitted", '.'); + assertEquals(2, parts.length); + assertEquals("", parts[0]); + assertEquals("permitted", parts[1]); + } + + public void testSplitDomainWithLeadingDot() + { + String[] parts = Strings.split(".example.domain.com", '.'); + assertEquals(4, parts.length); + assertEquals("", parts[0]); + assertEquals("example", parts[1]); + assertEquals("domain", parts[2]); + assertEquals("com", parts[3]); + } + + public void testSplitNormalDomain() + { + String[] parts = Strings.split("example.domain.com", '.'); + assertEquals(3, parts.length); + assertEquals("example", parts[0]); + assertEquals("domain", parts[1]); + assertEquals("com", parts[2]); + } + + public void testSplitNoDelimiter() + { + String[] parts = Strings.split("nodots", '.'); + assertEquals(1, parts.length); + assertEquals("nodots", parts[0]); + } + + public void testSplitTrailingDelimiter() + { + String[] parts = Strings.split("trailing.", '.'); + assertEquals(2, parts.length); + assertEquals("trailing", parts[0]); + assertEquals("", parts[1]); + } + + public void testSplitOnlyDelimiter() + { + String[] parts = Strings.split(".", '.'); + assertEquals(2, parts.length); + assertEquals("", parts[0]); + assertEquals("", parts[1]); + } + + public void testSplitConsecutiveDelimiters() + { + String[] parts = Strings.split("a..b", '.'); + assertEquals(3, parts.length); + assertEquals("a", parts[0]); + assertEquals("", parts[1]); + assertEquals("b", parts[2]); + } +}