xref: /llvm-project/clang/test/ExtractAPI/objc_protocol.m (revision e05c1b46d0d3739cc48ad912dbe6e9affce05927)
1// RUN: rm -rf %t
2// RUN: split-file %s %t
3// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \
4// RUN: %t/reference.output.json.in >> %t/reference.output.json
5// RUN: %clang -extract-api --pretty-sgf -x objective-c-header -target arm64-apple-macosx \
6// RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s
7
8// Generator version is not consistent across test runs, normalize it.
9// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
10// RUN: %t/output.json >> %t/output-normalized.json
11// RUN: diff %t/reference.output.json %t/output-normalized.json
12
13// CHECK-NOT: error:
14// CHECK-NOT: warning:
15
16//--- input.h
17@protocol Protocol
18@end
19
20@protocol AnotherProtocol <Protocol>
21@end
22
23//--- reference.output.json.in
24{
25  "metadata": {
26    "formatVersion": {
27      "major": 0,
28      "minor": 5,
29      "patch": 3
30    },
31    "generator": "?"
32  },
33  "module": {
34    "name": "",
35    "platform": {
36      "architecture": "arm64",
37      "operatingSystem": {
38        "minimumVersion": {
39          "major": 11,
40          "minor": 0,
41          "patch": 0
42        },
43        "name": "macosx"
44      },
45      "vendor": "apple"
46    }
47  },
48  "relationships": [
49    {
50      "kind": "conformsTo",
51      "source": "c:objc(pl)AnotherProtocol",
52      "target": "c:objc(pl)Protocol",
53      "targetFallback": "Protocol"
54    }
55  ],
56  "symbols": [
57    {
58      "accessLevel": "public",
59      "declarationFragments": [
60        {
61          "kind": "keyword",
62          "spelling": "@protocol"
63        },
64        {
65          "kind": "text",
66          "spelling": " "
67        },
68        {
69          "kind": "identifier",
70          "spelling": "Protocol"
71        }
72      ],
73      "identifier": {
74        "interfaceLanguage": "objective-c",
75        "precise": "c:objc(pl)Protocol"
76      },
77      "kind": {
78        "displayName": "Protocol",
79        "identifier": "objective-c.protocol"
80      },
81      "location": {
82        "position": {
83          "character": 10,
84          "line": 0
85        },
86        "uri": "file://INPUT_DIR/input.h"
87      },
88      "names": {
89        "navigator": [
90          {
91            "kind": "identifier",
92            "spelling": "Protocol"
93          }
94        ],
95        "subHeading": [
96          {
97            "kind": "identifier",
98            "spelling": "Protocol"
99          }
100        ],
101        "title": "Protocol"
102      },
103      "pathComponents": [
104        "Protocol"
105      ]
106    },
107    {
108      "accessLevel": "public",
109      "declarationFragments": [
110        {
111          "kind": "keyword",
112          "spelling": "@protocol"
113        },
114        {
115          "kind": "text",
116          "spelling": " "
117        },
118        {
119          "kind": "identifier",
120          "spelling": "AnotherProtocol"
121        },
122        {
123          "kind": "text",
124          "spelling": " <"
125        },
126        {
127          "kind": "typeIdentifier",
128          "preciseIdentifier": "c:objc(pl)Protocol",
129          "spelling": "Protocol"
130        },
131        {
132          "kind": "text",
133          "spelling": ">"
134        }
135      ],
136      "identifier": {
137        "interfaceLanguage": "objective-c",
138        "precise": "c:objc(pl)AnotherProtocol"
139      },
140      "kind": {
141        "displayName": "Protocol",
142        "identifier": "objective-c.protocol"
143      },
144      "location": {
145        "position": {
146          "character": 10,
147          "line": 3
148        },
149        "uri": "file://INPUT_DIR/input.h"
150      },
151      "names": {
152        "navigator": [
153          {
154            "kind": "identifier",
155            "spelling": "AnotherProtocol"
156          }
157        ],
158        "subHeading": [
159          {
160            "kind": "identifier",
161            "spelling": "AnotherProtocol"
162          }
163        ],
164        "title": "AnotherProtocol"
165      },
166      "pathComponents": [
167        "AnotherProtocol"
168      ]
169    }
170  ]
171}
172