@@ -398,6 +398,48 @@ class AnyExpressionTests: XCTestCase {
398
398
}
399
399
}
400
400
401
+ func testStringDictionaryLiteral( ) {
402
+ let expression = AnyExpression ( " ['a': 1, 'b': 2.5, 'c': 3] " )
403
+ XCTAssertEqual ( try expression. evaluate ( ) , [ " a " : 1 , " b " : 2.5 , " c " : 3 ] )
404
+ }
405
+
406
+ func testDoubleDictionaryLiteral( ) {
407
+ let expression = AnyExpression ( " [1.5: false, 2.0: nil, 3.5: true] " )
408
+ XCTAssertEqual ( try expression. evaluate ( ) , [ 1.5 : false , 2.0 : nil , 3.5 : true ] )
409
+ }
410
+
411
+ func testIntDictionaryLiteral( ) {
412
+ let expression = AnyExpression ( " [1: 'f', 2: 'e', 3: 'd'] " )
413
+ XCTAssertEqual ( try expression. evaluate ( ) , [ 1 : " f " , 2 : " e " , 3 : " d " ] )
414
+ }
415
+
416
+ func testDictionaryLiteralWithNonHashableKey( ) {
417
+ let expression = AnyExpression ( " [nil: false] " )
418
+ XCTAssertThrowsError ( try expression. evaluate ( ) as Any ) { error in
419
+ XCTAssertEqual ( error as? Expression . Error , . typeMismatch( . infix( " : " ) , [ nil as Any ? as Any , false ] ) )
420
+ }
421
+ }
422
+
423
+ func testSubscriptStringDictionaryLiteralWithString( ) {
424
+ let expression = AnyExpression ( " ['a': 1, 'b': 2.5, 'c': 3]['c'] " )
425
+ XCTAssertEqual ( try expression. evaluate ( ) , 3 )
426
+ }
427
+
428
+ func testSubscriptDoubleDictionaryLiteralWithInt( ) {
429
+ let expression = AnyExpression ( " [1.5: false, 2.0: nil, 3.5: true][2] " )
430
+ XCTAssertEqual ( try expression. evaluate ( ) , Optional< Bool> . none)
431
+ }
432
+
433
+ func testSubscriptIntDictionaryLiteralWithDouble( ) {
434
+ let expression = AnyExpression ( " [1: 'f', 2: 'e', 3: 'd'][1.0] " )
435
+ XCTAssertEqual ( try expression. evaluate ( ) , " f " )
436
+ }
437
+
438
+ func testSubscriptDictionaryLiteralWithNonexistentKey( ) {
439
+ let expression = AnyExpression ( " [1: 'f', 2: 'e', 3: 'd']['d'] " )
440
+ XCTAssertEqual ( try expression. evaluate ( ) , Optional< String> . none)
441
+ }
442
+
401
443
// MARK: Ranges
402
444
403
445
func testClosedIntRange( ) {
0 commit comments