Skip to content

Commit 7aeb61c

Browse files
committed
C#: Add file scoped test cases.
1 parent 81fde0e commit 7aeb61c

File tree

7 files changed

+317
-0
lines changed

7 files changed

+317
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
file interface I1 { }
2+
3+
file interface I2 { }
4+
5+
file class C1 : I1 { }
6+
7+
public class C2 { }
8+
9+
public class C3 : I2 { }
10+
11+
file interface IC { }
12+
13+
file class C4<T> { }
14+
15+
file class C5<S> : C4<S> { }
16+
17+
file struct S1 { }
18+
19+
file enum E1 { }
20+
21+
file delegate void D1();
22+
23+
file record R1 { }
24+
25+
file record struct RS1 { }
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
file interface I1 { }
2+
3+
public interface I2 { }
4+
5+
file class C1 { }
6+
7+
file class C2 : I2 { }
8+
9+
file class IC { }
10+
11+
file class C4<T> { }
12+
13+
file class C5<S> : C4<S> { }
14+
15+
file struct S1 { }
16+
17+
file enum E1 { }
18+
19+
file delegate void D1();
20+
21+
file record R1 { }
22+
23+
file record struct RS1 { }
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace TestFileScoped;
2+
3+
file interface I10 { }
4+
5+
file class C10 { }
6+
7+
public class C11 : I10 { }
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace TestFileScoped;
2+
3+
public interface I10 { }
4+
5+
file class C10 { }
6+
7+
file class C11 : I10 { }

csharp/ql/test/library-tests/csharp11/PrintAst.expected

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,103 @@ CheckedOperators.cs:
216216
# 55| 0: [TypeMention] short
217217
# 55| 1: [PropertyCall] access to property Value
218218
# 55| -1: [ParameterAccess] access to parameter n
219+
FileScoped1.cs:
220+
# 1| [Interface] I1
221+
# 3| [Interface] I2
222+
# 5| [Class] C1
223+
#-----| 3: (Base types)
224+
# 5| 1: [TypeMention] I1
225+
# 7| [Class] C2
226+
# 9| [Class] C3
227+
#-----| 3: (Base types)
228+
# 9| 1: [TypeMention] I2
229+
# 11| [Interface] IC
230+
# 13| [Class] C4<>
231+
#-----| 1: (Type parameters)
232+
# 13| 0: [TypeParameter] T
233+
# 15| [Class] C5<>
234+
#-----| 1: (Type parameters)
235+
# 15| 0: [TypeParameter] S
236+
#-----| 3: (Base types)
237+
# 15| 0: [TypeMention] C4<S>
238+
# 15| 1: [TypeMention] S
239+
# 17| [Struct] S1
240+
# 19| [Enum] E1
241+
# 21| [DelegateType] D1
242+
# 23| [RecordClass] R1
243+
# 23| 12: [NEOperator] !=
244+
#-----| 2: (Parameters)
245+
# 23| 0: [Parameter] left
246+
# 23| 1: [Parameter] right
247+
# 23| 13: [EQOperator] ==
248+
#-----| 2: (Parameters)
249+
# 23| 0: [Parameter] left
250+
# 23| 1: [Parameter] right
251+
# 23| 14: [Property] EqualityContract
252+
# 23| 3: [Getter] get_EqualityContract
253+
# 25| [RecordStruct] RS1
254+
# 25| 10: [NEOperator] !=
255+
#-----| 2: (Parameters)
256+
# 25| 0: [Parameter] left
257+
# 25| 1: [Parameter] right
258+
# 25| 11: [EQOperator] ==
259+
#-----| 2: (Parameters)
260+
# 25| 0: [Parameter] left
261+
# 25| 1: [Parameter] right
262+
FileScoped2.cs:
263+
# 1| [Interface] I1
264+
# 3| [Interface] I2
265+
# 5| [Class] C1
266+
# 7| [Class] C2
267+
#-----| 3: (Base types)
268+
# 7| 1: [TypeMention] I2
269+
# 9| [Class] IC
270+
# 11| [Class] C4<>
271+
#-----| 1: (Type parameters)
272+
# 11| 0: [TypeParameter] T
273+
# 13| [Class] C5<>
274+
#-----| 1: (Type parameters)
275+
# 13| 0: [TypeParameter] S
276+
#-----| 3: (Base types)
277+
# 13| 0: [TypeMention] C4<S>
278+
# 13| 1: [TypeMention] S
279+
# 15| [Struct] S1
280+
# 17| [Enum] E1
281+
# 19| [DelegateType] D1
282+
# 21| [RecordClass] R1
283+
# 21| 12: [NEOperator] !=
284+
#-----| 2: (Parameters)
285+
# 21| 0: [Parameter] left
286+
# 21| 1: [Parameter] right
287+
# 21| 13: [EQOperator] ==
288+
#-----| 2: (Parameters)
289+
# 21| 0: [Parameter] left
290+
# 21| 1: [Parameter] right
291+
# 21| 14: [Property] EqualityContract
292+
# 21| 3: [Getter] get_EqualityContract
293+
# 23| [RecordStruct] RS1
294+
# 23| 10: [NEOperator] !=
295+
#-----| 2: (Parameters)
296+
# 23| 0: [Parameter] left
297+
# 23| 1: [Parameter] right
298+
# 23| 11: [EQOperator] ==
299+
#-----| 2: (Parameters)
300+
# 23| 0: [Parameter] left
301+
# 23| 1: [Parameter] right
302+
FileScoped3.cs:
303+
# 1| [NamespaceDeclaration] namespace ... { ... }
304+
# 3| 1: [Interface] I10
305+
# 5| 2: [Class] C10
306+
# 7| 3: [Class] C11
307+
#-----| 3: (Base types)
308+
# 7| 1: [TypeMention] I10
309+
FileScoped4.cs:
310+
# 1| [NamespaceDeclaration] namespace ... { ... }
311+
# 3| 1: [Interface] I10
312+
# 5| 2: [Class] C10
313+
# 7| 3: [Class] C11
314+
#-----| 3: (Base types)
315+
# 7| 1: [TypeMention] I10
219316
GenericAttribute.cs:
220317
# 3| [GenericAssemblyAttribute] [assembly: MyGeneric<Int32>(...)]
221318
# 3| 0: [TypeMention] MyGenericAttribute<int>
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
typemodifiers
2+
| FileScoped1.cs:1:16:1:17 | I1 | file |
3+
| FileScoped1.cs:3:16:3:17 | I2 | file |
4+
| FileScoped1.cs:5:12:5:13 | C1 | file |
5+
| FileScoped1.cs:7:14:7:15 | C2 | public |
6+
| FileScoped1.cs:9:14:9:15 | C3 | public |
7+
| FileScoped1.cs:11:16:11:17 | IC | file |
8+
| FileScoped1.cs:13:12:13:16 | C4<> | file |
9+
| FileScoped1.cs:13:12:13:16 | C4<S> | file |
10+
| FileScoped1.cs:15:12:15:16 | C5<> | file |
11+
| FileScoped1.cs:17:13:17:14 | S1 | file |
12+
| FileScoped1.cs:17:13:17:14 | S1 | sealed |
13+
| FileScoped1.cs:19:11:19:12 | E1 | file |
14+
| FileScoped1.cs:19:11:19:12 | E1 | sealed |
15+
| FileScoped1.cs:21:20:21:21 | D1 | file |
16+
| FileScoped1.cs:21:20:21:21 | D1 | sealed |
17+
| FileScoped1.cs:23:1:23:18 | R1 | file |
18+
| FileScoped1.cs:23:1:23:18 | R1 | record |
19+
| FileScoped1.cs:25:1:25:26 | RS1 | file |
20+
| FileScoped1.cs:25:1:25:26 | RS1 | record |
21+
| FileScoped1.cs:25:1:25:26 | RS1 | sealed |
22+
| FileScoped2.cs:1:16:1:17 | I1 | file |
23+
| FileScoped2.cs:3:18:3:19 | I2 | public |
24+
| FileScoped2.cs:5:12:5:13 | C1 | file |
25+
| FileScoped2.cs:7:12:7:13 | C2 | file |
26+
| FileScoped2.cs:9:12:9:13 | IC | file |
27+
| FileScoped2.cs:11:12:11:16 | C4<> | file |
28+
| FileScoped2.cs:11:12:11:16 | C4<S> | file |
29+
| FileScoped2.cs:13:12:13:16 | C5<> | file |
30+
| FileScoped2.cs:15:13:15:14 | S1 | file |
31+
| FileScoped2.cs:15:13:15:14 | S1 | sealed |
32+
| FileScoped2.cs:17:11:17:12 | E1 | file |
33+
| FileScoped2.cs:17:11:17:12 | E1 | sealed |
34+
| FileScoped2.cs:19:20:19:21 | D1 | file |
35+
| FileScoped2.cs:19:20:19:21 | D1 | sealed |
36+
| FileScoped2.cs:21:1:21:18 | R1 | file |
37+
| FileScoped2.cs:21:1:21:18 | R1 | record |
38+
| FileScoped2.cs:23:1:23:26 | RS1 | file |
39+
| FileScoped2.cs:23:1:23:26 | RS1 | record |
40+
| FileScoped2.cs:23:1:23:26 | RS1 | sealed |
41+
| FileScoped3.cs:3:16:3:18 | I10 | file |
42+
| FileScoped3.cs:5:12:5:14 | C10 | file |
43+
| FileScoped3.cs:7:14:7:16 | C11 | public |
44+
| FileScoped4.cs:3:18:3:20 | I10 | public |
45+
| FileScoped4.cs:5:12:5:14 | C10 | file |
46+
| FileScoped4.cs:7:12:7:14 | C11 | file |
47+
qualifiedtypes
48+
| FileScoped1.cs:1:16:1:17 | I1 | I1 |
49+
| FileScoped1.cs:3:16:3:17 | I2 | I2 |
50+
| FileScoped1.cs:5:12:5:13 | C1 | C1 |
51+
| FileScoped1.cs:7:14:7:15 | C2 | C2 |
52+
| FileScoped1.cs:9:14:9:15 | C3 | C3 |
53+
| FileScoped1.cs:11:16:11:17 | IC | IC |
54+
| FileScoped1.cs:13:12:13:16 | C4<> | C4<> |
55+
| FileScoped1.cs:13:12:13:16 | C4<S> | C4<S> |
56+
| FileScoped1.cs:15:12:15:16 | C5<> | C5<> |
57+
| FileScoped1.cs:17:13:17:14 | S1 | S1 |
58+
| FileScoped1.cs:19:11:19:12 | E1 | E1 |
59+
| FileScoped1.cs:21:20:21:21 | D1 | D1 |
60+
| FileScoped1.cs:23:1:23:18 | R1 | R1 |
61+
| FileScoped1.cs:25:1:25:26 | RS1 | RS1 |
62+
| FileScoped2.cs:1:16:1:17 | I1 | I1 |
63+
| FileScoped2.cs:3:18:3:19 | I2 | I2 |
64+
| FileScoped2.cs:5:12:5:13 | C1 | C1 |
65+
| FileScoped2.cs:7:12:7:13 | C2 | C2 |
66+
| FileScoped2.cs:9:12:9:13 | IC | IC |
67+
| FileScoped2.cs:11:12:11:16 | C4<> | C4<> |
68+
| FileScoped2.cs:11:12:11:16 | C4<S> | C4<S> |
69+
| FileScoped2.cs:13:12:13:16 | C5<> | C5<> |
70+
| FileScoped2.cs:15:13:15:14 | S1 | S1 |
71+
| FileScoped2.cs:17:11:17:12 | E1 | E1 |
72+
| FileScoped2.cs:19:20:19:21 | D1 | D1 |
73+
| FileScoped2.cs:21:1:21:18 | R1 | R1 |
74+
| FileScoped2.cs:23:1:23:26 | RS1 | RS1 |
75+
| FileScoped3.cs:3:16:3:18 | I10 | TestFileScoped.I10 |
76+
| FileScoped3.cs:5:12:5:14 | C10 | TestFileScoped.C10 |
77+
| FileScoped3.cs:7:14:7:16 | C11 | TestFileScoped.C11 |
78+
| FileScoped4.cs:3:18:3:20 | I10 | TestFileScoped.I10 |
79+
| FileScoped4.cs:5:12:5:14 | C10 | TestFileScoped.C10 |
80+
| FileScoped4.cs:7:12:7:14 | C11 | TestFileScoped.C11 |
81+
filetypes
82+
| FileScoped1.cs:1:16:1:17 | I1 |
83+
| FileScoped1.cs:3:16:3:17 | I2 |
84+
| FileScoped1.cs:5:12:5:13 | C1 |
85+
| FileScoped1.cs:11:16:11:17 | IC |
86+
| FileScoped1.cs:13:12:13:16 | C4<> |
87+
| FileScoped1.cs:13:12:13:16 | C4<S> |
88+
| FileScoped1.cs:15:12:15:16 | C5<> |
89+
| FileScoped1.cs:17:13:17:14 | S1 |
90+
| FileScoped1.cs:19:11:19:12 | E1 |
91+
| FileScoped1.cs:21:20:21:21 | D1 |
92+
| FileScoped1.cs:23:1:23:18 | R1 |
93+
| FileScoped1.cs:25:1:25:26 | RS1 |
94+
| FileScoped2.cs:1:16:1:17 | I1 |
95+
| FileScoped2.cs:5:12:5:13 | C1 |
96+
| FileScoped2.cs:7:12:7:13 | C2 |
97+
| FileScoped2.cs:9:12:9:13 | IC |
98+
| FileScoped2.cs:11:12:11:16 | C4<> |
99+
| FileScoped2.cs:11:12:11:16 | C4<S> |
100+
| FileScoped2.cs:13:12:13:16 | C5<> |
101+
| FileScoped2.cs:15:13:15:14 | S1 |
102+
| FileScoped2.cs:17:11:17:12 | E1 |
103+
| FileScoped2.cs:19:20:19:21 | D1 |
104+
| FileScoped2.cs:21:1:21:18 | R1 |
105+
| FileScoped2.cs:23:1:23:26 | RS1 |
106+
| FileScoped3.cs:3:16:3:18 | I10 |
107+
| FileScoped3.cs:5:12:5:14 | C10 |
108+
| FileScoped4.cs:5:12:5:14 | C10 |
109+
| FileScoped4.cs:7:12:7:14 | C11 |
110+
internaltypes
111+
publictypes
112+
| FileScoped1.cs:7:14:7:15 | C2 |
113+
| FileScoped1.cs:9:14:9:15 | C3 |
114+
| FileScoped2.cs:3:18:3:19 | I2 |
115+
| FileScoped3.cs:7:14:7:16 | C11 |
116+
| FileScoped4.cs:3:18:3:20 | I10 |
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import csharp
2+
private import semmle.code.csharp.commons.QualifiedName
3+
4+
private predicate isInteresting(Type t) {
5+
(
6+
t instanceof Class or
7+
t instanceof Interface or
8+
t instanceof Struct or
9+
t instanceof Enum or
10+
t instanceof DelegateType or
11+
t instanceof RecordType
12+
) and
13+
t.getFile().getStem().matches("FileScoped%")
14+
}
15+
16+
query predicate typemodifiers(Type t, string modifier) {
17+
isInteresting(t) and
18+
t.(Modifiable).hasModifier(modifier)
19+
}
20+
21+
query predicate qualifiedtypes(Type t, string qualifiedName) {
22+
isInteresting(t) and
23+
exists(string qualifier, string name |
24+
t.hasQualifiedName(qualifier, name) and
25+
qualifiedName = getQualifiedName(qualifier, name)
26+
)
27+
}
28+
29+
query predicate filetypes(Type t) {
30+
isInteresting(t) and
31+
t.isFile()
32+
}
33+
34+
query predicate internaltypes(Type t) {
35+
isInteresting(t) and
36+
t.isInternal()
37+
}
38+
39+
query predicate publictypes(Type t) {
40+
isInteresting(t) and
41+
t.isPublic()
42+
}

0 commit comments

Comments
 (0)