ListSplitterTest.java

/*
 * Copyright 2018 Red Hat, Inc. and/or its affiliates.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 *      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 org.kie.soup.commons.util;

import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class ListSplitterTest {

    @Test
    public void basicABC() {
        final String[] split = ListSplitter.split("a,b,c");
        assertEquals(3, split.length);
        assertEquals("a", split[0]);
        assertEquals("b", split[1]);
        assertEquals("c", split[2]);
    }

    @Test
    public void keepSpacesABC() {
        final String[] split = ListSplitter.split("a, b ,c");
        assertEquals(3, split.length);
        assertEquals("a", split[0]);
        assertEquals(" b ", split[1]);
        assertEquals("c", split[2]);
    }

    @Test
    public void specialABC() {
        final String[] split = ListSplitter.split("'a','b','c'");
        assertEquals(3, split.length);
        assertEquals("a", split[0]);
        assertEquals("b", split[1]);
        assertEquals("c", split[2]);
    }

    @Test
    public void specialABCSpaces() {
        final String[] split = ListSplitter.split(" 'a' , 'b' , 'c' ");
        assertEquals(3, split.length);
        assertEquals("a", split[0]);
        assertEquals("b", split[1]);
        assertEquals("c", split[2]);
    }

    @Test
    public void basicCharacters() {
        final String[] split = ListSplitter.split("',!,%,)");
        assertEquals(4, split.length);
        assertEquals("'", split[0]);
        assertEquals("!", split[1]);
        assertEquals("%", split[2]);
        assertEquals(")", split[3]);
    }

    @Test
    public void splitItemsWithCommas() {
        final String[] split = ListSplitter.split("'One sentence.','Another one, but with comma.','Third one. I'll make things, if possible, even more complicated.'");
        assertEquals(3, split.length);
        assertEquals("One sentence.", split[0]);
        assertEquals("Another one, but with comma.", split[1]);
        assertEquals("Third one. I'll make things, if possible, even more complicated.", split[2]);
    }

    @Test
    public void changeQuoteCharacter() {
        final String[] split = ListSplitter.split("\"",
                                                  true,
                                                  "\"Helsinki, Finland\", Boston");
        assertEquals(2, split.length);
        assertEquals("Helsinki, Finland", split[0]);
        assertEquals("Boston", split[1]);
    }

    @Test
    public void changeQuoteCharacterPreserveQuotes() {
        final String[] split = ListSplitter.splitPreserveQuotes("\"",
                                                                true,
                                                                "\"Helsinki, Finland\", Boston");
        assertEquals(2, split.length);
        assertEquals("\"Helsinki, Finland\"", split[0]);
        assertEquals("Boston", split[1]);
    }

    @Test
    public void changeQuoteCharacterSkipTrimming() {
        final String[] split = ListSplitter.split("\"",
                                                  false,
                                                  "\"Helsinki, Finland\", Boston");
        assertEquals(2, split.length);
        assertEquals("Helsinki, Finland", split[0]);
        assertEquals(" Boston", split[1]);
    }

    @Test
    public void testQuoteCharacterUsedJustForComplexEnumEnd() {
        final String[] split = ListSplitter.split("\"",
                                                  true,
                                                  "Prague, Boston, \"Helsinki, Finland\"");
        assertEquals(3, split.length);
        assertEquals("Prague", split[0]);
        assertEquals("Boston", split[1]);
        assertEquals("Helsinki, Finland", split[2]);
    }

    @Test
    public void testQuoteCharacterUsedJustForComplexEnumMiddle() {
        final String[] split = ListSplitter.split("\"",
                                                  true,
                                                  "Prague, \"Helsinki, Finland\", Boston");
        assertEquals(3, split.length);
        assertEquals("Prague", split[0]);
        assertEquals("Helsinki, Finland", split[1]);
        assertEquals("Boston", split[2]);
    }

    @Test
    public void testDoubleQuotes() {
        final String[] split = ListSplitter.split("\"",
                                                  true,
                                                  " \"Prague\", \"\"Helsinki, Finland\"\" ");
        assertEquals(2, split.length);
        assertEquals("Prague", split[0]);
        assertEquals("\"Helsinki, Finland\"", split[1]);
    }

    @Test
    public void testJustOneItem() {
        final String[] split = ListSplitter.split("\"",
                                                  true,
                                                  " \"Prague\" ");
        assertEquals(1, split.length);
        assertEquals("Prague", split[0]);
    }

    @Test
    public void testJustOneComplexItem() {
        final String[] split = ListSplitter.split("\"",
                                                  true,
                                                  " \"Prague, Czechia\" ");
        assertEquals(1, split.length);
        assertEquals("Prague, Czechia", split[0]);
    }

    @Test
    public void testQuoteCharacterUsedJustForComplexEnumStart() {
        final String[] split = ListSplitter.split("\"",
                                                  true,
                                                  "\"Helsinki, Finland\", Prague, Boston");
        assertEquals(3, split.length);
        assertEquals("Helsinki, Finland", split[0]);
        assertEquals("Prague", split[1]);
        assertEquals("Boston", split[2]);
    }
}