[
https://issues.apache.org/jira/browse/CAMEL-26308?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-26308 started by shashank.
----------------------------------------
> camel-core-languages - Simple iif and val return a quoted literal with its
> quotes: ${iif(${header.foo} > 0,'positive','negative')} gives 'positive', not
> positive
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26308
> URL: https://issues.apache.org/jira/browse/CAMEL-26308
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Reporter: shashank
> Assignee: shashank
> Priority: Major
>
> {{iif}} was added in CAMEL-21081 (4.8.0) with tests where quoted true and
> false values give the text inside the quotes ({{${iif(${header.foo} >
> 0,'positive','negative')}}} -> {{positive}}). Since CAMEL-22204 (4.10.7,
> 4.13.0) the arguments of {{iif}} are split with
> {{StringQuoteHelper.splitSafeQuote(values, ',', true, true)}} (today in
> {{MiscFunctionFactory}}), keeping the quotes, so that a quoted value in the
> predicate ({{${file:name} startsWith 'test'}}) survives. The true and false
> values keep them as well, and each is then a Simple expression whose text
> includes the quotes. {{val}} (CAMEL-23047, 4.18.1) has passed its argument on
> with the quotes since it was added. So:
> {noformat}
> ${iif(${header.foo} > 0,'positive','negative')} -> 'positive' (the
> documented example; before 4.10.7: positive)
> ${header.foo > 0 ? 'positive' : 'negative'} -> positive (the
> ternary operator)
> ${iif(${header.foo} > 0,'yes','no')} == 'yes' -> false (when foo
> > 0)
> ${val('Hello')} -> 'Hello'
> {noformat}
> The Simple functions page gives the {{iif}} example with quoted values and
> says the same example is used with the ternary operator, whose section says
> it returns {{positive}}; the catalog examples ({{SimpleConstants}}) say
> {{${iif(${header.admin} == true,'Admin','User')} -> Admin}} and
> {{${val('Hello')} -> Hello}}. csimple (removed in 4.23) returned the text
> without the quotes for both functions.
> The PR of CAMEL-22204 (#18483) argued that quotes should be a legal part of
> the true and false expressions and changed the existing {{testIif}}
> assertions to unquoted values; {{MiscFunctionFactoryTest}} (CAMEL-22894)
> later pinned the quoted result ({{'yes'}}), in the same commit that pinned
> the csimple code for the same input to {{"yes"}}. So the quoted result may be
> seen as intended; this issue proposes the documented behaviour instead,
> because it is what the docs, the catalog, the ternary operator, the original
> tests and the other functions (such as {{concat}}) do with a quoted argument.
> If the quoted result is preferred, the docs and the catalog examples need
> fixing instead.
> *Fix*: remove the leading and ending quotes of the true and false values of
> {{iif}} ({{StringHelper.removeLeadingAndEndingQuotes}}, as {{concat}} does
> with its arguments) and of the argument of {{val}}. The predicate keeps its
> quotes; values without quotes and functions are unchanged. Upgrade guide
> entry for users who removed the quotes themselves or relied on them.
> *Tests*: {{SimpleTest.testIifQuotedLiterals}} (the documented example next to
> the ternary, a double-quoted value, a value with a comma, an empty value, iif
> in a template and in a predicate, a function inside the quotes, val inside
> iif, a quoted predicate), {{StringFunctionFactoryTest.testValQuotedLiteral}},
> and {{MiscFunctionFactoryTest.testIifTrue/False}} now expect {{yes}} /
> {{no}}: the four fail on main and pass with the fix.
> *How it was found*: running every example of the Simple catalog metadata
> ({{SimpleConstants}}, "expression -> result") through the language and
> comparing with the documented result; {{iif}} and {{val}} differ on quotes.
> The other differences are context-dependent examples or documentation slips,
> not changed here: {{concat('Hello',' ','World')}} uses the third argument as
> the separator and gives {{HelloWorld }}, and {{date-with-timezone(...)}} is
> written {{date-with-timezone:...}}.
> *Affected*: {{iif}} in 4.10.7 and later 4.10.x, 4.13.0 and later; {{val}} in
> 4.18.1 and later; main (read, and run on main).
> _Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)