1*5bb5704cSZixu Wang // RUN: rm -rf %t
2*5bb5704cSZixu Wang // RUN: split-file %s %t
3*5bb5704cSZixu Wang // RUN: sed -e "s@INPUT_DIR@%/t@g" %t/reference.output.json.in >> \
4*5bb5704cSZixu Wang // RUN: %t/reference.output.json
5*5bb5704cSZixu Wang // RUN: %clang -extract-api -target arm64-apple-macosx \
6*5bb5704cSZixu Wang // RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s
7*5bb5704cSZixu Wang 
8*5bb5704cSZixu Wang // Generator version is not consistent across test runs, normalize it.
9*5bb5704cSZixu Wang // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
10*5bb5704cSZixu Wang // RUN: %t/output.json >> %t/output-normalized.json
11*5bb5704cSZixu Wang // RUN: diff %t/reference.output.json %t/output-normalized.json
12*5bb5704cSZixu Wang 
13*5bb5704cSZixu Wang // CHECK-NOT: error:
14*5bb5704cSZixu Wang // CHECK-NOT: warning:
15*5bb5704cSZixu Wang 
16*5bb5704cSZixu Wang //--- input.h
17*5bb5704cSZixu Wang /// Color in RGBA
18*5bb5704cSZixu Wang struct Color {
19*5bb5704cSZixu Wang   unsigned Red;
20*5bb5704cSZixu Wang   unsigned Green;
21*5bb5704cSZixu Wang   unsigned Blue;
22*5bb5704cSZixu Wang   /// Alpha channel for transparency
23*5bb5704cSZixu Wang   unsigned Alpha;
24*5bb5704cSZixu Wang };
25*5bb5704cSZixu Wang 
26*5bb5704cSZixu Wang //--- reference.output.json.in
27*5bb5704cSZixu Wang {
28*5bb5704cSZixu Wang   "metadata": {
29*5bb5704cSZixu Wang     "formatVersion": {
30*5bb5704cSZixu Wang       "major": 0,
31*5bb5704cSZixu Wang       "minor": 5,
32*5bb5704cSZixu Wang       "patch": 3
33*5bb5704cSZixu Wang     },
34*5bb5704cSZixu Wang     "generator": "?"
35*5bb5704cSZixu Wang   },
36*5bb5704cSZixu Wang   "module": {
37*5bb5704cSZixu Wang     "name": "",
38*5bb5704cSZixu Wang     "platform": {
39*5bb5704cSZixu Wang       "architecture": "arm64",
40*5bb5704cSZixu Wang       "operatingSystem": {
41*5bb5704cSZixu Wang         "minimumVersion": {
42*5bb5704cSZixu Wang           "major": 11,
43*5bb5704cSZixu Wang           "minor": 0,
44*5bb5704cSZixu Wang           "patch": 0
45*5bb5704cSZixu Wang         },
46*5bb5704cSZixu Wang         "name": "macosx"
47*5bb5704cSZixu Wang       },
48*5bb5704cSZixu Wang       "vendor": "apple"
49*5bb5704cSZixu Wang     }
50*5bb5704cSZixu Wang   },
51*5bb5704cSZixu Wang   "relationhips": [
52*5bb5704cSZixu Wang     {
53*5bb5704cSZixu Wang       "kind": "memberOf",
54*5bb5704cSZixu Wang       "source": "c:@S@Color@FI@Red",
55*5bb5704cSZixu Wang       "target": "c:@S@Color"
56*5bb5704cSZixu Wang     },
57*5bb5704cSZixu Wang     {
58*5bb5704cSZixu Wang       "kind": "memberOf",
59*5bb5704cSZixu Wang       "source": "c:@S@Color@FI@Green",
60*5bb5704cSZixu Wang       "target": "c:@S@Color"
61*5bb5704cSZixu Wang     },
62*5bb5704cSZixu Wang     {
63*5bb5704cSZixu Wang       "kind": "memberOf",
64*5bb5704cSZixu Wang       "source": "c:@S@Color@FI@Blue",
65*5bb5704cSZixu Wang       "target": "c:@S@Color"
66*5bb5704cSZixu Wang     },
67*5bb5704cSZixu Wang     {
68*5bb5704cSZixu Wang       "kind": "memberOf",
69*5bb5704cSZixu Wang       "source": "c:@S@Color@FI@Alpha",
70*5bb5704cSZixu Wang       "target": "c:@S@Color"
71*5bb5704cSZixu Wang     }
72*5bb5704cSZixu Wang   ],
73*5bb5704cSZixu Wang   "symbols": [
74*5bb5704cSZixu Wang     {
75*5bb5704cSZixu Wang       "declarationFragments": [
76*5bb5704cSZixu Wang         {
77*5bb5704cSZixu Wang           "kind": "keyword",
78*5bb5704cSZixu Wang           "spelling": "struct"
79*5bb5704cSZixu Wang         },
80*5bb5704cSZixu Wang         {
81*5bb5704cSZixu Wang           "kind": "text",
82*5bb5704cSZixu Wang           "spelling": " "
83*5bb5704cSZixu Wang         },
84*5bb5704cSZixu Wang         {
85*5bb5704cSZixu Wang           "kind": "identifier",
86*5bb5704cSZixu Wang           "spelling": "Color"
87*5bb5704cSZixu Wang         }
88*5bb5704cSZixu Wang       ],
89*5bb5704cSZixu Wang       "docComment": {
90*5bb5704cSZixu Wang         "lines": [
91*5bb5704cSZixu Wang           {
92*5bb5704cSZixu Wang             "range": {
93*5bb5704cSZixu Wang               "end": {
94*5bb5704cSZixu Wang                 "character": 18,
95*5bb5704cSZixu Wang                 "line": 1
96*5bb5704cSZixu Wang               },
97*5bb5704cSZixu Wang               "start": {
98*5bb5704cSZixu Wang                 "character": 5,
99*5bb5704cSZixu Wang                 "line": 1
100*5bb5704cSZixu Wang               }
101*5bb5704cSZixu Wang             },
102*5bb5704cSZixu Wang             "text": "Color in RGBA"
103*5bb5704cSZixu Wang           }
104*5bb5704cSZixu Wang         ]
105*5bb5704cSZixu Wang       },
106*5bb5704cSZixu Wang       "identifier": {
107*5bb5704cSZixu Wang         "interfaceLanguage": "c",
108*5bb5704cSZixu Wang         "precise": "c:@S@Color"
109*5bb5704cSZixu Wang       },
110*5bb5704cSZixu Wang       "kind": {
111*5bb5704cSZixu Wang         "displayName": "Structure",
112*5bb5704cSZixu Wang         "identifier": "c.struct"
113*5bb5704cSZixu Wang       },
114*5bb5704cSZixu Wang       "location": {
115*5bb5704cSZixu Wang         "character": 8,
116*5bb5704cSZixu Wang         "line": 2,
117*5bb5704cSZixu Wang         "uri": "file://INPUT_DIR/input.h"
118*5bb5704cSZixu Wang       },
119*5bb5704cSZixu Wang       "names": {
120*5bb5704cSZixu Wang         "subHeading": [
121*5bb5704cSZixu Wang           {
122*5bb5704cSZixu Wang             "kind": "identifier",
123*5bb5704cSZixu Wang             "spelling": "Color"
124*5bb5704cSZixu Wang           }
125*5bb5704cSZixu Wang         ],
126*5bb5704cSZixu Wang         "title": "Color"
127*5bb5704cSZixu Wang       }
128*5bb5704cSZixu Wang     },
129*5bb5704cSZixu Wang     {
130*5bb5704cSZixu Wang       "declarationFragments": [
131*5bb5704cSZixu Wang         {
132*5bb5704cSZixu Wang           "kind": "typeIdentifier",
133*5bb5704cSZixu Wang           "preciseIdentifier": "c:i",
134*5bb5704cSZixu Wang           "spelling": "unsigned int"
135*5bb5704cSZixu Wang         },
136*5bb5704cSZixu Wang         {
137*5bb5704cSZixu Wang           "kind": "text",
138*5bb5704cSZixu Wang           "spelling": " "
139*5bb5704cSZixu Wang         },
140*5bb5704cSZixu Wang         {
141*5bb5704cSZixu Wang           "kind": "identifier",
142*5bb5704cSZixu Wang           "spelling": "Red"
143*5bb5704cSZixu Wang         }
144*5bb5704cSZixu Wang       ],
145*5bb5704cSZixu Wang       "identifier": {
146*5bb5704cSZixu Wang         "interfaceLanguage": "c",
147*5bb5704cSZixu Wang         "precise": "c:@S@Color@FI@Red"
148*5bb5704cSZixu Wang       },
149*5bb5704cSZixu Wang       "kind": {
150*5bb5704cSZixu Wang         "displayName": "Instance Property",
151*5bb5704cSZixu Wang         "identifier": "c.property"
152*5bb5704cSZixu Wang       },
153*5bb5704cSZixu Wang       "location": {
154*5bb5704cSZixu Wang         "character": 12,
155*5bb5704cSZixu Wang         "line": 3,
156*5bb5704cSZixu Wang         "uri": "file://INPUT_DIR/input.h"
157*5bb5704cSZixu Wang       },
158*5bb5704cSZixu Wang       "names": {
159*5bb5704cSZixu Wang         "subHeading": [
160*5bb5704cSZixu Wang           {
161*5bb5704cSZixu Wang             "kind": "identifier",
162*5bb5704cSZixu Wang             "spelling": "Red"
163*5bb5704cSZixu Wang           }
164*5bb5704cSZixu Wang         ],
165*5bb5704cSZixu Wang         "title": "Red"
166*5bb5704cSZixu Wang       }
167*5bb5704cSZixu Wang     },
168*5bb5704cSZixu Wang     {
169*5bb5704cSZixu Wang       "declarationFragments": [
170*5bb5704cSZixu Wang         {
171*5bb5704cSZixu Wang           "kind": "typeIdentifier",
172*5bb5704cSZixu Wang           "preciseIdentifier": "c:i",
173*5bb5704cSZixu Wang           "spelling": "unsigned int"
174*5bb5704cSZixu Wang         },
175*5bb5704cSZixu Wang         {
176*5bb5704cSZixu Wang           "kind": "text",
177*5bb5704cSZixu Wang           "spelling": " "
178*5bb5704cSZixu Wang         },
179*5bb5704cSZixu Wang         {
180*5bb5704cSZixu Wang           "kind": "identifier",
181*5bb5704cSZixu Wang           "spelling": "Green"
182*5bb5704cSZixu Wang         }
183*5bb5704cSZixu Wang       ],
184*5bb5704cSZixu Wang       "identifier": {
185*5bb5704cSZixu Wang         "interfaceLanguage": "c",
186*5bb5704cSZixu Wang         "precise": "c:@S@Color@FI@Green"
187*5bb5704cSZixu Wang       },
188*5bb5704cSZixu Wang       "kind": {
189*5bb5704cSZixu Wang         "displayName": "Instance Property",
190*5bb5704cSZixu Wang         "identifier": "c.property"
191*5bb5704cSZixu Wang       },
192*5bb5704cSZixu Wang       "location": {
193*5bb5704cSZixu Wang         "character": 12,
194*5bb5704cSZixu Wang         "line": 4,
195*5bb5704cSZixu Wang         "uri": "file://INPUT_DIR/input.h"
196*5bb5704cSZixu Wang       },
197*5bb5704cSZixu Wang       "names": {
198*5bb5704cSZixu Wang         "subHeading": [
199*5bb5704cSZixu Wang           {
200*5bb5704cSZixu Wang             "kind": "identifier",
201*5bb5704cSZixu Wang             "spelling": "Green"
202*5bb5704cSZixu Wang           }
203*5bb5704cSZixu Wang         ],
204*5bb5704cSZixu Wang         "title": "Green"
205*5bb5704cSZixu Wang       }
206*5bb5704cSZixu Wang     },
207*5bb5704cSZixu Wang     {
208*5bb5704cSZixu Wang       "declarationFragments": [
209*5bb5704cSZixu Wang         {
210*5bb5704cSZixu Wang           "kind": "typeIdentifier",
211*5bb5704cSZixu Wang           "preciseIdentifier": "c:i",
212*5bb5704cSZixu Wang           "spelling": "unsigned int"
213*5bb5704cSZixu Wang         },
214*5bb5704cSZixu Wang         {
215*5bb5704cSZixu Wang           "kind": "text",
216*5bb5704cSZixu Wang           "spelling": " "
217*5bb5704cSZixu Wang         },
218*5bb5704cSZixu Wang         {
219*5bb5704cSZixu Wang           "kind": "identifier",
220*5bb5704cSZixu Wang           "spelling": "Blue"
221*5bb5704cSZixu Wang         }
222*5bb5704cSZixu Wang       ],
223*5bb5704cSZixu Wang       "identifier": {
224*5bb5704cSZixu Wang         "interfaceLanguage": "c",
225*5bb5704cSZixu Wang         "precise": "c:@S@Color@FI@Blue"
226*5bb5704cSZixu Wang       },
227*5bb5704cSZixu Wang       "kind": {
228*5bb5704cSZixu Wang         "displayName": "Instance Property",
229*5bb5704cSZixu Wang         "identifier": "c.property"
230*5bb5704cSZixu Wang       },
231*5bb5704cSZixu Wang       "location": {
232*5bb5704cSZixu Wang         "character": 12,
233*5bb5704cSZixu Wang         "line": 5,
234*5bb5704cSZixu Wang         "uri": "file://INPUT_DIR/input.h"
235*5bb5704cSZixu Wang       },
236*5bb5704cSZixu Wang       "names": {
237*5bb5704cSZixu Wang         "subHeading": [
238*5bb5704cSZixu Wang           {
239*5bb5704cSZixu Wang             "kind": "identifier",
240*5bb5704cSZixu Wang             "spelling": "Blue"
241*5bb5704cSZixu Wang           }
242*5bb5704cSZixu Wang         ],
243*5bb5704cSZixu Wang         "title": "Blue"
244*5bb5704cSZixu Wang       }
245*5bb5704cSZixu Wang     },
246*5bb5704cSZixu Wang     {
247*5bb5704cSZixu Wang       "declarationFragments": [
248*5bb5704cSZixu Wang         {
249*5bb5704cSZixu Wang           "kind": "typeIdentifier",
250*5bb5704cSZixu Wang           "preciseIdentifier": "c:i",
251*5bb5704cSZixu Wang           "spelling": "unsigned int"
252*5bb5704cSZixu Wang         },
253*5bb5704cSZixu Wang         {
254*5bb5704cSZixu Wang           "kind": "text",
255*5bb5704cSZixu Wang           "spelling": " "
256*5bb5704cSZixu Wang         },
257*5bb5704cSZixu Wang         {
258*5bb5704cSZixu Wang           "kind": "identifier",
259*5bb5704cSZixu Wang           "spelling": "Alpha"
260*5bb5704cSZixu Wang         }
261*5bb5704cSZixu Wang       ],
262*5bb5704cSZixu Wang       "docComment": {
263*5bb5704cSZixu Wang         "lines": [
264*5bb5704cSZixu Wang           {
265*5bb5704cSZixu Wang             "range": {
266*5bb5704cSZixu Wang               "end": {
267*5bb5704cSZixu Wang                 "character": 37,
268*5bb5704cSZixu Wang                 "line": 6
269*5bb5704cSZixu Wang               },
270*5bb5704cSZixu Wang               "start": {
271*5bb5704cSZixu Wang                 "character": 7,
272*5bb5704cSZixu Wang                 "line": 6
273*5bb5704cSZixu Wang               }
274*5bb5704cSZixu Wang             },
275*5bb5704cSZixu Wang             "text": "Alpha channel for transparency"
276*5bb5704cSZixu Wang           }
277*5bb5704cSZixu Wang         ]
278*5bb5704cSZixu Wang       },
279*5bb5704cSZixu Wang       "identifier": {
280*5bb5704cSZixu Wang         "interfaceLanguage": "c",
281*5bb5704cSZixu Wang         "precise": "c:@S@Color@FI@Alpha"
282*5bb5704cSZixu Wang       },
283*5bb5704cSZixu Wang       "kind": {
284*5bb5704cSZixu Wang         "displayName": "Instance Property",
285*5bb5704cSZixu Wang         "identifier": "c.property"
286*5bb5704cSZixu Wang       },
287*5bb5704cSZixu Wang       "location": {
288*5bb5704cSZixu Wang         "character": 12,
289*5bb5704cSZixu Wang         "line": 7,
290*5bb5704cSZixu Wang         "uri": "file://INPUT_DIR/input.h"
291*5bb5704cSZixu Wang       },
292*5bb5704cSZixu Wang       "names": {
293*5bb5704cSZixu Wang         "subHeading": [
294*5bb5704cSZixu Wang           {
295*5bb5704cSZixu Wang             "kind": "identifier",
296*5bb5704cSZixu Wang             "spelling": "Alpha"
297*5bb5704cSZixu Wang           }
298*5bb5704cSZixu Wang         ],
299*5bb5704cSZixu Wang         "title": "Alpha"
300*5bb5704cSZixu Wang       }
301*5bb5704cSZixu Wang     }
302*5bb5704cSZixu Wang   ]
303*5bb5704cSZixu Wang }
304