FieldParserRandomTest.java

package com.cronutils.parser;

import org.junit.jupiter.api.Disabled;
import com.cronutils.model.field.constraint.FieldConstraints;
import com.cronutils.model.field.expression.FieldExpression;
import com.cronutils.model.field.expression.RandomExpression;
import com.cronutils.model.field.value.SpecialChar;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.mock;

@Disabled
class FieldParserRandomTest {
    private FieldParser parser;
    private FieldConstraints constraints;

    @BeforeEach
    void setUp() {
        constraints = mock(FieldConstraints.class);
        parser = new FieldParser(constraints);
    }

    @Test
    void testParseSimpleRandom() {
        FieldExpression expression = parser.parse("~");
        assertTrue(expression instanceof RandomExpression);
        RandomExpression random = (RandomExpression) expression;
        assertNull(random.getFrom());
        assertNull(random.getTo());
        assertNull(random.getStep());
    }

    @Test
    void testParseRandomWithRange() {
        FieldExpression expression = parser.parse("10~20");
        assertTrue(expression instanceof RandomExpression);
        RandomExpression random = (RandomExpression) expression;
        assertEquals(10, random.getFrom());
        assertEquals(20, random.getTo());
        assertNull(random.getStep());
    }

    @Test
    void testParseRandomWithPartialRange() {
        FieldExpression expression = parser.parse("~20");
        assertTrue(expression instanceof RandomExpression);
        RandomExpression random = (RandomExpression) expression;
        assertNull(random.getFrom());
        assertEquals(20, random.getTo());
        assertNull(random.getStep());

        expression = parser.parse("10~");
        assertTrue(expression instanceof RandomExpression);
        random = (RandomExpression) expression;
        assertEquals(10, random.getFrom());
        assertNull(random.getTo());
        assertNull(random.getStep());
    }

    @Test
    void testParseRandomWithStep() {
        FieldExpression expression = parser.parse("~/30");
        assertTrue(expression instanceof RandomExpression);
        RandomExpression random = (RandomExpression) expression;
        assertNull(random.getFrom());
        assertNull(random.getTo());
        assertEquals(30, random.getStep());

        expression = parser.parse("10~20/30");
        assertTrue(expression instanceof RandomExpression);
        random = (RandomExpression) expression;
        assertEquals(10, random.getFrom());
        assertEquals(20, random.getTo());
        assertEquals(30, random.getStep());
    }

    @Test
    void testInvalidRandomExpressions() {
        assertThrows(IllegalArgumentException.class, () -> parser.parse("~/"));
        assertThrows(IllegalArgumentException.class, () -> parser.parse("~//30"));
        assertThrows(IllegalArgumentException.class, () -> parser.parse("10~20/"));
        assertThrows(IllegalArgumentException.class, () -> parser.parse("a~20"));
        assertThrows(IllegalArgumentException.class, () -> parser.parse("10~b"));
        assertThrows(IllegalArgumentException.class, () -> parser.parse("10~20/c"));
    }
}