xref: /llvm-project/clang/test/ExtractAPI/class_template_partial_spec.cpp (revision 7a6747939218efbe3b1d2cc0f896dfa97c0ff40f)
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_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \
6 // RUN:   -x c++-header %t/input.h -o %t/output.json -verify
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 //--- input.h
14 template<typename X, typename Y> class Foo {};
15 
16 template<typename Z> class Foo<Z, int> {};
17 
18 // expected-no-diagnostics
19 
20 //--- reference.output.json.in
21 {
22   "metadata": {
23     "formatVersion": {
24       "major": 0,
25       "minor": 5,
26       "patch": 3
27     },
28     "generator": "?"
29   },
30   "module": {
31     "name": "",
32     "platform": {
33       "architecture": "arm64",
34       "operatingSystem": {
35         "minimumVersion": {
36           "major": 11,
37           "minor": 0,
38           "patch": 0
39         },
40         "name": "macosx"
41       },
42       "vendor": "apple"
43     }
44   },
45   "relationships": [],
46   "symbols": [
47     {
48       "accessLevel": "public",
49       "declarationFragments": [
50         {
51           "kind": "keyword",
52           "spelling": "template"
53         },
54         {
55           "kind": "text",
56           "spelling": " <"
57         },
58         {
59           "kind": "keyword",
60           "spelling": "typename"
61         },
62         {
63           "kind": "text",
64           "spelling": " "
65         },
66         {
67           "kind": "genericParameter",
68           "spelling": "X"
69         },
70         {
71           "kind": "text",
72           "spelling": ", "
73         },
74         {
75           "kind": "keyword",
76           "spelling": "typename"
77         },
78         {
79           "kind": "text",
80           "spelling": " "
81         },
82         {
83           "kind": "genericParameter",
84           "spelling": "Y"
85         },
86         {
87           "kind": "text",
88           "spelling": "> "
89         },
90         {
91           "kind": "keyword",
92           "spelling": "class"
93         },
94         {
95           "kind": "text",
96           "spelling": " "
97         },
98         {
99           "kind": "identifier",
100           "spelling": "Foo"
101         },
102         {
103           "kind": "text",
104           "spelling": ";"
105         }
106       ],
107       "identifier": {
108         "interfaceLanguage": "c++",
109         "precise": "c:@ST>2#T#T@Foo"
110       },
111       "kind": {
112         "displayName": "Class",
113         "identifier": "c++.class"
114       },
115       "location": {
116         "position": {
117           "character": 39,
118           "line": 0
119         },
120         "uri": "file://INPUT_DIR/input.h"
121       },
122       "names": {
123         "navigator": [
124           {
125             "kind": "identifier",
126             "spelling": "Foo"
127           }
128         ],
129         "subHeading": [
130           {
131             "kind": "identifier",
132             "spelling": "Foo"
133           }
134         ],
135         "title": "Foo"
136       },
137       "pathComponents": [
138         "Foo"
139       ],
140       "swiftGenerics": {
141         "parameters": [
142           {
143             "depth": 0,
144             "index": 0,
145             "name": "X"
146           },
147           {
148             "depth": 0,
149             "index": 1,
150             "name": "Y"
151           }
152         ]
153       }
154     },
155     {
156       "accessLevel": "public",
157       "declarationFragments": [
158         {
159           "kind": "keyword",
160           "spelling": "template"
161         },
162         {
163           "kind": "text",
164           "spelling": " <"
165         },
166         {
167           "kind": "keyword",
168           "spelling": "typename"
169         },
170         {
171           "kind": "text",
172           "spelling": " "
173         },
174         {
175           "kind": "genericParameter",
176           "spelling": "Z"
177         },
178         {
179           "kind": "text",
180           "spelling": "> "
181         },
182         {
183           "kind": "keyword",
184           "spelling": "class"
185         },
186         {
187           "kind": "text",
188           "spelling": " "
189         },
190         {
191           "kind": "identifier",
192           "spelling": "Foo"
193         },
194         {
195           "kind": "text",
196           "spelling": "<"
197         },
198         {
199           "kind": "typeIdentifier",
200           "preciseIdentifier": "c:t0.0",
201           "spelling": "Z"
202         },
203         {
204           "kind": "text",
205           "spelling": ", "
206         },
207         {
208           "kind": "typeIdentifier",
209           "preciseIdentifier": "c:I",
210           "spelling": "int"
211         },
212         {
213           "kind": "text",
214           "spelling": ">;"
215         }
216       ],
217       "identifier": {
218         "interfaceLanguage": "c++",
219         "precise": "c:@SP>1#T@Foo>#t0.0#I"
220       },
221       "kind": {
222         "displayName": "Class",
223         "identifier": "c++.class"
224       },
225       "location": {
226         "position": {
227           "character": 27,
228           "line": 2
229         },
230         "uri": "file://INPUT_DIR/input.h"
231       },
232       "names": {
233         "navigator": [
234           {
235             "kind": "identifier",
236             "spelling": "Foo"
237           }
238         ],
239         "subHeading": [
240           {
241             "kind": "identifier",
242             "spelling": "Foo"
243           }
244         ],
245         "title": "Foo"
246       },
247       "pathComponents": [
248         "Foo"
249       ],
250       "swiftGenerics": {
251         "parameters": [
252           {
253             "depth": 0,
254             "index": 0,
255             "name": "Z"
256           }
257         ]
258       }
259     }
260   ]
261 }
262