@@ -79,4 +79,44 @@ private static IEnumerable<object[]> GetSwitchStatements()
79
79
yield return new object [ ] { "switch (Something) { case 1 when true: break; }" , 1 , new [ ] { new [ ] { "1 when true" } } } ;
80
80
yield return new object [ ] { "switch (Something) { case int value: break; }" , 1 , new [ ] { new [ ] { "int value" } } } ;
81
81
}
82
+
83
+ [ DynamicData ( nameof ( GetSwitchExpressions ) , DynamicDataSourceType . Method ) ]
84
+ [ TestMethod ]
85
+ public void ShouldParseSwitchExpressionsCorrectly ( string code , int sections , string [ ] [ ] conditions )
86
+ {
87
+ // Assign
88
+ var source = @$ "
89
+ public class Test
90
+ {{
91
+ public int Something;
92
+ object Method()
93
+ {{
94
+ { code }
95
+ }}
96
+ }}
97
+ " ;
98
+
99
+ // Act
100
+ var types = TestHelper . VisitSyntaxTree ( source , "CS8509" ) ;
101
+
102
+ // Assert
103
+ types [ 0 ] . Methods [ 0 ] . Statements [ 0 ] . Should ( ) . BeOfType < ReturnDescription > ( ) ;
104
+ var @switch = types [ 0 ] . Methods [ 0 ] . Statements [ 1 ] . Should ( ) . BeOfType < Switch > ( ) . Subject ;
105
+ @switch . Sections . Should ( ) . HaveCount ( sections ) ;
106
+
107
+ for ( var i = 0 ; i < @switch . Sections . Count ; i ++ )
108
+ {
109
+ @switch . Sections [ i ] . Labels . Should ( ) . Equal ( conditions [ i ] ) ;
110
+ }
111
+ }
112
+
113
+ private static IEnumerable < object [ ] > GetSwitchExpressions ( )
114
+ {
115
+ yield return new object [ ] { "return Something switch { _ => false };" , 1 , new [ ] { new [ ] { "_" } } } ;
116
+ yield return new object [ ] { "return Something switch { 1 => true };" , 1 , new [ ] { new [ ] { "1" } } } ;
117
+ yield return new object [ ] { "return Something switch { 1 or 2 => true };" , 1 , new [ ] { new [ ] { "1 or 2" } } } ;
118
+ yield return new object [ ] { "return Something switch { 1 => true, 2 => true };" , 2 , new [ ] { new [ ] { "1" } , new [ ] { "2" } } } ;
119
+ yield return new object [ ] { "return Something switch { 1 when true => true, _ => false };" , 2 , new [ ] { new [ ] { "1 when true" } , new [ ] { "_" } } } ;
120
+ yield return new object [ ] { "return Something switch { int value => false };" , 1 , new [ ] { new [ ] { "int value" } } } ;
121
+ }
82
122
}
0 commit comments