TestArgUtil.java

package wstxtest.util;

import java.util.*;

import com.ctc.wstx.util.ArgUtil;
import org.junit.jupiter.api.Test;

/**
 * Simple unit tests for testing methods in {@link ArgUtil}.
 */
public class TestArgUtil
    extends wstxtest.BaseWstxTest
{
    @Test
    public void testBoolean()
    {
        assertFalse(ArgUtil.convertToBoolean("test", "false"));
        assertFalse(ArgUtil.convertToBoolean("test", "False"));
        assertFalse(ArgUtil.convertToBoolean("test", "FALSE"));
        assertTrue(ArgUtil.convertToBoolean("test", "true"));
        assertTrue(ArgUtil.convertToBoolean("test", "True"));
        assertTrue(ArgUtil.convertToBoolean("test", "TRUE"));
        assertFalse(ArgUtil.convertToBoolean("test", null));

        // and then errors:
        try {
            /*boolean b =*/ ArgUtil.convertToBoolean("test", 0);
            fail("Expected an IllegalArgumentException");
        } catch (IllegalArgumentException iae) { }

        try {
            /*boolean b =*/ ArgUtil.convertToBoolean("test", "foobar");
            fail("Expected an IllegalArgumentException");
        } catch (IllegalArgumentException iae) { }
    }

    @Test
    public void testBooleanFromBoolean()
    {
        assertTrue(ArgUtil.convertToBoolean("test", Boolean.TRUE));
        assertFalse(ArgUtil.convertToBoolean("test", Boolean.FALSE));
    }

    @Test
    public void testInt()
    {
        assertEquals(14, ArgUtil.convertToInt("test", "14", 0));
        assertEquals(14, ArgUtil.convertToInt("test", 14, 0));
        assertEquals(14, ArgUtil.convertToInt("test", 14L, 0));
        assertEquals(14, ArgUtil.convertToInt("test", (short) 14, 0));
        assertEquals(14, ArgUtil.convertToInt("test", (byte) 14, 0));

        // null is converted to 0 (and 0 must be >= minValue)
        assertEquals(0, ArgUtil.convertToInt("test", null, 0));
        assertEquals(0, ArgUtil.convertToInt("test", null, -10));

        // and then errors:
        try {
            /*int x =*/ ArgUtil.convertToInt("test", new HashMap<>(), 0);
            fail("Expected an IllegalArgumentException");
        } catch (IllegalArgumentException iae) { }

        try {
            /*int x =*/ ArgUtil.convertToInt("test", "foobar", 0);
            fail("Expected an IllegalArgumentException");
        } catch (IllegalArgumentException iae) { }
    }

    @Test
    public void testIntBelowMinimum()
    {
        // Value below minValue should throw IllegalArgumentException
        try {
            ArgUtil.convertToInt("test", 3, 10);
            fail("Expected an IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            verifyException(iae, "minimum is 10");
        }

        // Same for a String that parses to below-minimum
        try {
            ArgUtil.convertToInt("test", "3", 10);
            fail("Expected an IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            verifyException(iae, "minimum is 10");
        }
    }

    @Test
    public void testLong()
    {
        assertEquals(99L, ArgUtil.convertToLong("test", "99", 0L));
        assertEquals(99L, ArgUtil.convertToLong("test", 99L, 0L));
        assertEquals(99L, ArgUtil.convertToLong("test", 99, 0L));
        assertEquals(99L, ArgUtil.convertToLong("test", (short) 99, 0L));
        assertEquals(99L, ArgUtil.convertToLong("test", (byte) 99, 0L));

        // null becomes 0
        assertEquals(0L, ArgUtil.convertToLong("test", null, 0L));
        assertEquals(0L, ArgUtil.convertToLong("test", null, -10L));

        // bad String:
        try {
            ArgUtil.convertToLong("test", "not-a-number", 0L);
            fail("Expected an IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            verifyException(iae, "Long");
        }

        // unsupported type:
        try {
            ArgUtil.convertToLong("test", new HashMap<>(), 0L);
            fail("Expected an IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            verifyException(iae, "expected Long");
        }
    }

    @Test
    public void testLongBelowMinimum()
    {
        try {
            ArgUtil.convertToLong("test", 3L, 10L);
            fail("Expected an IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            verifyException(iae, "minimum is 10");
        }
    }
}