Skip to content

Commit 25c9011

Browse files
committed
C#: Add type mention test
1 parent f044c83 commit 25c9011

File tree

3 files changed

+166
-0
lines changed

3 files changed

+166
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
unsafe class C : System.Exception
2+
{
3+
void M1(
4+
C c1, // $ TypeMention=C
5+
C[] c2
6+
)
7+
{
8+
C x = // $ TypeMention=C
9+
c1 as C; // $ TypeMention=C
10+
if (c1 is C) // $ TypeMention=C
11+
;
12+
try
13+
{
14+
new C(); // $ TypeMention=C
15+
}
16+
catch (C) // $ TypeMention=C
17+
{
18+
}
19+
}
20+
21+
void M2(delegate*<int, void> f, int* x) { }
22+
} // $ Class=C
23+
24+
class C2<T>
25+
{
26+
C2<
27+
C // $ TypeMention=C
28+
> // $ TypeMention=C2`1
29+
M() => null;
30+
31+
void M2(int? i) { }
32+
} // $ Class=C2`1
33+
34+
namespace N1
35+
{
36+
class C3
37+
{
38+
class C4 { } // $ Class=N1.C3+C4
39+
40+
void M(
41+
N1.C3 p1, // $ TypeMention=N1.C3
42+
N1.C3.C4 p2, // $ TypeMention=N1.C3+C4
43+
C3.C4 p3 // $ TypeMention=N1.C3+C4
44+
)
45+
{ }
46+
47+
void M2(global::System.Int32 i) { }
48+
49+
void M3(ref int i) // not a ref type
50+
{
51+
ref int j = ref i;
52+
scoped ref int k = ref j;
53+
(int, string) tuple;
54+
}
55+
} // $ Class=N1.C3
56+
}
57+
58+
namespace N2
59+
{
60+
namespace N3
61+
{
62+
public class C2
63+
{
64+
public class C3
65+
{
66+
void M(
67+
C3 p1, // $ TypeMention=N2.N3.C2+C3
68+
C2.C3 p2, // $ TypeMention=N2.N3.C2+C3
69+
N3.C2.C3 p3, // $ TypeMention=N2.N3.C2+C3
70+
N2.N3.C3 p4, // $ TypeMention=N2.N3.C3
71+
C2 p5 // $ TypeMention=N2.N3.C2
72+
)
73+
{ }
74+
} // $ Class=N2.N3.C2+C3
75+
} // $ Class=N2.N3.C2
76+
77+
public class C3
78+
{
79+
void M(
80+
C3 p1, // $ TypeMention=N2.N3.C3
81+
C2.C3 p2, // $ TypeMention=N2.N3.C2+C3
82+
N3.C2.C3 p3, // $ TypeMention=N2.N3.C2+C3
83+
N2.N3.C3 p4, // $ TypeMention=N2.N3.C3
84+
N3.C3 p5, // $ TypeMention=N2.N3.C3
85+
C2 p6 // $ TypeMention=N2.N3.C2
86+
)
87+
{ }
88+
} // $ Class=N2.N3.C3
89+
}
90+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
| Mentions.cs:1:14:1:14 | C | Unexpected result: Class=C |
2+
| Mentions.cs:1:25:1:33 | Exception | Unexpected result: TypeMention=System.Exception |
3+
| Mentions.cs:3:5:3:8 | Void | Unexpected result: TypeMention=System.Void |
4+
| Mentions.cs:5:9:5:9 | C | Unexpected result: TypeMention=C |
5+
| Mentions.cs:5:9:5:11 | C[] | Unexpected result: TypeMention=C[] |
6+
| Mentions.cs:16:19:16:36 | // ... | Missing result:TypeMention=C |
7+
| Mentions.cs:21:5:21:8 | Void | Unexpected result: TypeMention=System.Void |
8+
| Mentions.cs:21:37:21:39 | Int32 | Unexpected result: TypeMention=System.Int32 |
9+
| Mentions.cs:21:37:21:40 | Int32* | Unexpected result: TypeMention=System.Int32* |
10+
| Mentions.cs:22:3:22:14 | // ... | Missing result:Class=C |
11+
| Mentions.cs:24:7:24:11 | C2<> | Unexpected result: Class=C2<> |
12+
| Mentions.cs:24:7:24:11 | C2<C> | Unexpected result: Class=C2<C> |
13+
| Mentions.cs:26:5:28:5 | C2<C> | Unexpected result: TypeMention=C2<C> |
14+
| Mentions.cs:28:7:28:27 | // ... | Missing result:TypeMention=C2`1 |
15+
| Mentions.cs:31:5:31:8 | Void | Unexpected result: TypeMention=System.Void |
16+
| Mentions.cs:31:13:31:15 | Int32 | Unexpected result: TypeMention=System.Int32 |
17+
| Mentions.cs:31:13:31:16 | Nullable<Int32> | Unexpected result: TypeMention=System.Nullable<System.Int32> |
18+
| Mentions.cs:32:3:32:17 | // ... | Missing result:Class=C2`1 |
19+
| Mentions.cs:36:11:36:12 | C3 | Unexpected result: Class=N1.C3 |
20+
| Mentions.cs:40:9:40:12 | Void | Unexpected result: TypeMention=System.Void |
21+
| Mentions.cs:42:16:42:17 | C3 | Unexpected result: TypeMention=N1.C3 |
22+
| Mentions.cs:43:13:43:14 | C3 | Unexpected result: TypeMention=N1.C3 |
23+
| Mentions.cs:47:9:47:12 | Void | Unexpected result: TypeMention=System.Void |
24+
| Mentions.cs:47:32:47:36 | Int32 | Unexpected result: TypeMention=System.Int32 |
25+
| Mentions.cs:49:9:49:12 | Void | Unexpected result: TypeMention=System.Void |
26+
| Mentions.cs:49:21:49:23 | Int32 | Unexpected result: TypeMention=System.Int32 |
27+
| Mentions.cs:53:13:53:25 | (Int32,String) | Unexpected result: TypeMention=System.ValueTuple<System.Int32,System.String> |
28+
| Mentions.cs:53:14:53:16 | Int32 | Unexpected result: TypeMention=System.Int32 |
29+
| Mentions.cs:53:19:53:24 | String | Unexpected result: TypeMention=System.String |
30+
| Mentions.cs:55:7:55:22 | // ... | Missing result:Class=N1.C3 |
31+
| Mentions.cs:62:22:62:23 | C2 | Unexpected result: Class=N2.N3.C2 |
32+
| Mentions.cs:64:26:64:27 | C3 | Unexpected result: Class=N2.N3.C2+C3 |
33+
| Mentions.cs:66:17:66:20 | Void | Unexpected result: TypeMention=System.Void |
34+
| Mentions.cs:68:21:68:22 | C2 | Unexpected result: TypeMention=N2.N3.C2 |
35+
| Mentions.cs:69:24:69:25 | C2 | Unexpected result: TypeMention=N2.N3.C2 |
36+
| Mentions.cs:74:15:74:36 | // ... | Missing result:Class=N2.N3.C2+C3 |
37+
| Mentions.cs:75:11:75:29 | // ... | Missing result:Class=N2.N3.C2 |
38+
| Mentions.cs:77:22:77:23 | C3 | Unexpected result: Class=N2.N3.C3 |
39+
| Mentions.cs:79:13:79:16 | Void | Unexpected result: TypeMention=System.Void |
40+
| Mentions.cs:81:17:81:18 | C2 | Unexpected result: TypeMention=N2.N3.C2 |
41+
| Mentions.cs:82:20:82:21 | C2 | Unexpected result: TypeMention=N2.N3.C2 |
42+
| Mentions.cs:88:11:88:29 | // ... | Missing result:Class=N2.N3.C3 |
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import csharp
2+
import TestUtilities.InlineExpectationsTest
3+
4+
class NamespaceTest extends InlineExpectationsTest {
5+
NamespaceTest() { this = "TypesTest" }
6+
7+
override string getARelevantTag() {
8+
result = ["Class", "Struct", "Interface", "Enum", "TypeMention"]
9+
}
10+
11+
override predicate hasActualResult(Location location, string element, string tag, string value) {
12+
exists(Type td |
13+
td.fromSource() and
14+
td.getLocation() = location and
15+
element = td.toString() and
16+
value = td.getQualifiedName()
17+
|
18+
td instanceof Class and tag = "Class"
19+
or
20+
td instanceof Struct and tag = "Struct"
21+
or
22+
td instanceof Interface and tag = "Interface"
23+
or
24+
td instanceof Enum and tag = "Enum"
25+
)
26+
or
27+
exists(TypeMention tm |
28+
tm.getLocation() = location and
29+
element = tm.toString() and
30+
value = tm.getType().getQualifiedName() and
31+
tag = "TypeMention"
32+
)
33+
}
34+
}

0 commit comments

Comments
 (0)