xref: /llvm-project/clang/test/ExtractAPI/class_template_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 T> class Foo {};
15 
16 template<> class Foo<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": "T"
69         },
70         {
71           "kind": "text",
72           "spelling": "> "
73         },
74         {
75           "kind": "keyword",
76           "spelling": "class"
77         },
78         {
79           "kind": "text",
80           "spelling": " "
81         },
82         {
83           "kind": "identifier",
84           "spelling": "Foo"
85         },
86         {
87           "kind": "text",
88           "spelling": ";"
89         }
90       ],
91       "identifier": {
92         "interfaceLanguage": "c++",
93         "precise": "c:@ST>1#T@Foo"
94       },
95       "kind": {
96         "displayName": "Class",
97         "identifier": "c++.class"
98       },
99       "location": {
100         "position": {
101           "character": 27,
102           "line": 0
103         },
104         "uri": "file://INPUT_DIR/input.h"
105       },
106       "names": {
107         "navigator": [
108           {
109             "kind": "identifier",
110             "spelling": "Foo"
111           }
112         ],
113         "subHeading": [
114           {
115             "kind": "identifier",
116             "spelling": "Foo"
117           }
118         ],
119         "title": "Foo"
120       },
121       "pathComponents": [
122         "Foo"
123       ],
124       "swiftGenerics": {
125         "parameters": [
126           {
127             "depth": 0,
128             "index": 0,
129             "name": "T"
130           }
131         ]
132       }
133     },
134     {
135       "accessLevel": "public",
136       "declarationFragments": [
137         {
138           "kind": "keyword",
139           "spelling": "template"
140         },
141         {
142           "kind": "text",
143           "spelling": " <> "
144         },
145         {
146           "kind": "keyword",
147           "spelling": "class"
148         },
149         {
150           "kind": "text",
151           "spelling": " "
152         },
153         {
154           "kind": "identifier",
155           "spelling": "Foo"
156         },
157         {
158           "kind": "text",
159           "spelling": "<"
160         },
161         {
162           "kind": "typeIdentifier",
163           "preciseIdentifier": "c:I",
164           "spelling": "int"
165         },
166         {
167           "kind": "text",
168           "spelling": ">;"
169         }
170       ],
171       "identifier": {
172         "interfaceLanguage": "c++",
173         "precise": "c:@S@Foo>#I"
174       },
175       "kind": {
176         "displayName": "Class",
177         "identifier": "c++.class"
178       },
179       "location": {
180         "position": {
181           "character": 17,
182           "line": 2
183         },
184         "uri": "file://INPUT_DIR/input.h"
185       },
186       "names": {
187         "navigator": [
188           {
189             "kind": "identifier",
190             "spelling": "Foo"
191           }
192         ],
193         "subHeading": [
194           {
195             "kind": "identifier",
196             "spelling": "Foo"
197           }
198         ],
199         "title": "Foo"
200       },
201       "pathComponents": [
202         "Foo"
203       ]
204     }
205   ]
206 }
207