@Override
    public Map<String, String> evaluate(FunctionArgs args, EvaluationContext context) {
        final String value = valueParam.required(args, context);
        if (Strings.isNullOrEmpty(value)) {
            return Collections.emptyMap();
        }
        final CharMatcher kvPairsMatcher = splitParam.optional(args, context).orElse(CharMatcher.whitespace());
        final CharMatcher kvDelimMatcher = valueSplitParam.optional(args, context).orElse(CharMatcher.anyOf("="));

        Splitter outerSplitter = Splitter.on(DelimiterCharMatcher.withQuoteHandling(kvPairsMatcher))
                .omitEmptyStrings()
                .trimResults();

        final Splitter entrySplitter = Splitter.on(kvDelimMatcher)
                .omitEmptyStrings()
                .limit(2)
                .trimResults();
        return new MapSplitter(outerSplitter,
                entrySplitter,
                ignoreEmptyValuesParam.optional(args, context).orElse(true),
                trimCharactersParam.optional(args, context).orElse(CharMatcher.none()),
                trimValueCharactersParam.optional(args, context).orElse(CharMatcher.none()),
                allowDupeKeysParam.optional(args, context).orElse(true),
                duplicateHandlingParam.optional(args, context).orElse(TAKE_FIRST))
                .split(value);
    }
@Test
    void testDisableIgnoreEmptyValues() {
        final Map<String, Expression> arguments = Map.of("value", valueExpression, "ignore_empty_values",
                new BooleanExpression(new CommonToken(0), false));

        Assertions.assertThrows(IllegalArgumentException.class, () -> classUnderTest.evaluate(new FunctionArgs(classUnderTest, arguments), evaluationContext));
    }