Skip to content

Commit ad20a26

Browse files
committed
[clang-doc] Precommit concept tests
1 parent 77da125 commit ad20a26

File tree

3 files changed

+112
-0
lines changed

3 files changed

+112
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// RUN: rm -rf %t && mkdir -p %t
2+
// RUN: clang-doc --extra-arg -std=c++20 --output=%t --format=json --executor=standalone %s
3+
// RUN: FileCheck %s < %t/GlobalNamespace/MyClass.json
4+
5+
template<typename T>
6+
concept Addable = requires(T a, T b) {
7+
{ a + b };
8+
};
9+
10+
template<typename T>
11+
requires Addable<T>
12+
struct MyClass {
13+
};
14+
15+
// CHECK: "Name": "MyClass",
16+
// CHECK-NEXT: "Namespace": [
17+
// CHECK-NEXT: "GlobalNamespace"
18+
// CHECK-NEXT: ],
19+
// CHECK-NEXT: "Path": "GlobalNamespace",
20+
// CHECK-NEXT: "TagType": "struct",
21+
// CHECK-NEXT: "Template": {
22+
// CHECK-NOT: "Constraints": [
23+
// CHECK-NOT: "Addable<T>"
24+
// CHECK-NOT: ],
25+
// CHECK-NEXT: "Parameters": [
26+
// CHECK-NEXT: "typename T"
27+
// CHECK-NEXT: ]
28+
// CHECK-NEXT: },
29+
// CHECK-NEXT: "USR": "{{[A-F0-9]*}}"
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// RUN: rm -rf %t && mkdir -p %t
2+
// RUN: clang-doc --extra-arg -std=c++20 --output=%t --format=json --executor=standalone %s
3+
4+
// Requires that T suports post and pre-incrementing.
5+
template<typename T>
6+
concept Incrementable = requires(T x) {
7+
++x;
8+
x++;
9+
};
10+
11+
// CHECK: {
12+
// CHECK-NOT: "Concepts": [
13+
// CHECK-NOT: {
14+
// CHECK-NOT: "ConstraintExpression": "requires (T x) { ++x; x++; }",
15+
// CHECK-NOT: "Description": [
16+
// CHECK-NOT: {
17+
// CHECK-NOT: "FullComment": {
18+
// CHECK-NOT: "Children": [
19+
// CHECK-NOT: {
20+
// CHECK-NOT: "ParagraphComment": {
21+
// CHECK-NOT: "Children": [
22+
// CHECK-NOT: {
23+
// CHECK-NOT: "TextComment": " Requires that T suports post and pre-incrementing."
24+
// CHECK-NOT: },
25+
// CHECK-NOT: "IsType": true,
26+
// CHECK-NOT: "Name": "Incrementable",
27+
// CHECK-NOT: "Template": {
28+
// CHECK-NOT: "Parameters": [
29+
// CHECK-NOT: "typename T"
30+
// CHECK-NOT: ]
31+
// CHECK-NOT: },
32+
// CHECK-NOT: "USR": "{{[0-9A-F]*}}"
33+
// CHECK-NOT: }
34+
// CHECK-NOT: ],
35+
// CHECK: "Name": "",
36+
// CHECK: "USR": "0000000000000000000000000000000000000000"
37+
// CHECK: }
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// RUN: rm -rf %t && mkdir -p %t
2+
// RUN: clang-doc --extra-arg -std=c++20 --output=%t --format=json --executor=standalone %s
3+
// RUN: FileCheck %s < %t/GlobalNamespace/index.json
4+
5+
template<typename T>
6+
concept Incrementable = requires(T x) {
7+
++x;
8+
x++;
9+
};
10+
11+
template<typename T> void increment(T t) requires Incrementable<T> {
12+
++t;
13+
t++;
14+
}
15+
16+
// CHECK: "Functions": [
17+
// CHECK-NEXT: {
18+
// CHECK-NEXT: "IsStatic": false,
19+
// CHECK-NEXT: "Location": {
20+
// CHECK-NEXT: "Filename": "{{.*}}function-requires.cpp",
21+
// CHECK-NEXT: "LineNumber": 11
22+
// CHECK-NEXT: },
23+
// CHECK-NEXT: "Name": "increment",
24+
// CHECK-NEXT: "Params": [
25+
// CHECK-NEXT: {
26+
// CHECK-NEXT: "Name": "t",
27+
// CHECK-NEXT: "Type": "T"
28+
// CHECK-NEXT: }
29+
// CHECK-NEXT: ],
30+
// CHECK-NEXT: "ReturnType": {
31+
// CHECK-NEXT: "IsBuiltIn": false,
32+
// CHECK-NEXT: "IsTemplate": false,
33+
// CHECK-NEXT: "Name": "void",
34+
// CHECK-NEXT: "QualName": "void",
35+
// CHECK-NEXT: "USR": "0000000000000000000000000000000000000000"
36+
// CHECK-NEXT: },
37+
// CHECK-NEXT: "Template": {
38+
// CHECK-NOT: "Constraints": [
39+
// CHECK-NOT: "Incrementable<T>"
40+
// CHECK-NOT: ],
41+
// CHECK-NEXT: "Parameters": [
42+
// CHECK-NEXT: "typename T"
43+
// CHECK-NEXT: ]
44+
// CHECK-NEXT: },
45+
// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
46+
// CHECK-NEXT: }

0 commit comments

Comments
 (0)