@ -697,6 +697,53 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
assertThat ( getAst ( ) . getExitDescriptor ( ) ) . isEqualTo ( "Ljava/lang/Object" ) ;
assertThat ( getAst ( ) . getExitDescriptor ( ) ) . isEqualTo ( "Ljava/lang/Object" ) ;
}
}
@Test // gh-32903
void indexIntoMapUsingPrimitiveLiteral ( ) {
Map < Object , String > map = Map . of (
false , "0" , // BooleanLiteral
1 , "ABC" , // IntLiteral
2L , "XYZ" , // LongLiteral
9 . 99F , "~10" , // FloatLiteral
3 . 14159 , "PI" // RealLiteral
) ;
context . setVariable ( "map" , map ) ;
// BooleanLiteral
expression = parser . parseExpression ( "#map[false]" ) ;
assertThat ( expression . getValue ( context ) ) . isEqualTo ( "0" ) ;
assertCanCompile ( expression ) ;
assertThat ( expression . getValue ( context ) ) . isEqualTo ( "0" ) ;
assertThat ( getAst ( ) . getExitDescriptor ( ) ) . isEqualTo ( "Ljava/lang/Object" ) ;
// IntLiteral
expression = parser . parseExpression ( "#map[1]" ) ;
assertThat ( expression . getValue ( context ) ) . isEqualTo ( "ABC" ) ;
assertCanCompile ( expression ) ;
assertThat ( expression . getValue ( context ) ) . isEqualTo ( "ABC" ) ;
assertThat ( getAst ( ) . getExitDescriptor ( ) ) . isEqualTo ( "Ljava/lang/Object" ) ;
// LongLiteral
expression = parser . parseExpression ( "#map[2L]" ) ;
assertThat ( expression . getValue ( context ) ) . isEqualTo ( "XYZ" ) ;
assertCanCompile ( expression ) ;
assertThat ( expression . getValue ( context ) ) . isEqualTo ( "XYZ" ) ;
assertThat ( getAst ( ) . getExitDescriptor ( ) ) . isEqualTo ( "Ljava/lang/Object" ) ;
// FloatLiteral
expression = parser . parseExpression ( "#map[9.99F]" ) ;
assertThat ( expression . getValue ( context ) ) . isEqualTo ( "~10" ) ;
assertCanCompile ( expression ) ;
assertThat ( expression . getValue ( context ) ) . isEqualTo ( "~10" ) ;
assertThat ( getAst ( ) . getExitDescriptor ( ) ) . isEqualTo ( "Ljava/lang/Object" ) ;
// RealLiteral
expression = parser . parseExpression ( "#map[3.14159]" ) ;
assertThat ( expression . getValue ( context ) ) . isEqualTo ( "PI" ) ;
assertCanCompile ( expression ) ;
assertThat ( expression . getValue ( context ) ) . isEqualTo ( "PI" ) ;
assertThat ( getAst ( ) . getExitDescriptor ( ) ) . isEqualTo ( "Ljava/lang/Object" ) ;
}
private String stringify ( Object object ) {
private String stringify ( Object object ) {
Stream < ? extends Object > stream ;
Stream < ? extends Object > stream ;
if ( object instanceof Collection < ? > collection ) {
if ( object instanceof Collection < ? > collection ) {