15bb5704cSZixu Wang // RUN: rm -rf %t
25bb5704cSZixu Wang // RUN: split-file %s %t
35bb5704cSZixu Wang // RUN: sed -e "s@INPUT_DIR@%/t@g" %t/reference.output.json.in >> \
45bb5704cSZixu Wang // RUN: %t/reference.output.json
55bb5704cSZixu Wang // RUN: %clang -extract-api -target arm64-apple-macosx \
65bb5704cSZixu Wang // RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s
75bb5704cSZixu Wang 
85bb5704cSZixu Wang // Generator version is not consistent across test runs, normalize it.
95bb5704cSZixu Wang // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
105bb5704cSZixu Wang // RUN: %t/output.json >> %t/output-normalized.json
115bb5704cSZixu Wang // RUN: diff %t/reference.output.json %t/output-normalized.json
125bb5704cSZixu Wang 
135bb5704cSZixu Wang // CHECK-NOT: error:
145bb5704cSZixu Wang // CHECK-NOT: warning:
155bb5704cSZixu Wang 
165bb5704cSZixu Wang //--- input.h
175bb5704cSZixu Wang /// Color in RGBA
185bb5704cSZixu Wang struct Color {
195bb5704cSZixu Wang   unsigned Red;
205bb5704cSZixu Wang   unsigned Green;
215bb5704cSZixu Wang   unsigned Blue;
225bb5704cSZixu Wang   /// Alpha channel for transparency
235bb5704cSZixu Wang   unsigned Alpha;
245bb5704cSZixu Wang };
255bb5704cSZixu Wang 
265bb5704cSZixu Wang //--- reference.output.json.in
275bb5704cSZixu Wang {
285bb5704cSZixu Wang   "metadata": {
295bb5704cSZixu Wang     "formatVersion": {
305bb5704cSZixu Wang       "major": 0,
315bb5704cSZixu Wang       "minor": 5,
325bb5704cSZixu Wang       "patch": 3
335bb5704cSZixu Wang     },
345bb5704cSZixu Wang     "generator": "?"
355bb5704cSZixu Wang   },
365bb5704cSZixu Wang   "module": {
375bb5704cSZixu Wang     "name": "",
385bb5704cSZixu Wang     "platform": {
395bb5704cSZixu Wang       "architecture": "arm64",
405bb5704cSZixu Wang       "operatingSystem": {
415bb5704cSZixu Wang         "minimumVersion": {
425bb5704cSZixu Wang           "major": 11,
435bb5704cSZixu Wang           "minor": 0,
445bb5704cSZixu Wang           "patch": 0
455bb5704cSZixu Wang         },
465bb5704cSZixu Wang         "name": "macosx"
475bb5704cSZixu Wang       },
485bb5704cSZixu Wang       "vendor": "apple"
495bb5704cSZixu Wang     }
505bb5704cSZixu Wang   },
51*28d79314SDaniel Grumberg   "relationships": [
525bb5704cSZixu Wang     {
535bb5704cSZixu Wang       "kind": "memberOf",
545bb5704cSZixu Wang       "source": "c:@S@Color@FI@Red",
555bb5704cSZixu Wang       "target": "c:@S@Color"
565bb5704cSZixu Wang     },
575bb5704cSZixu Wang     {
585bb5704cSZixu Wang       "kind": "memberOf",
595bb5704cSZixu Wang       "source": "c:@S@Color@FI@Green",
605bb5704cSZixu Wang       "target": "c:@S@Color"
615bb5704cSZixu Wang     },
625bb5704cSZixu Wang     {
635bb5704cSZixu Wang       "kind": "memberOf",
645bb5704cSZixu Wang       "source": "c:@S@Color@FI@Blue",
655bb5704cSZixu Wang       "target": "c:@S@Color"
665bb5704cSZixu Wang     },
675bb5704cSZixu Wang     {
685bb5704cSZixu Wang       "kind": "memberOf",
695bb5704cSZixu Wang       "source": "c:@S@Color@FI@Alpha",
705bb5704cSZixu Wang       "target": "c:@S@Color"
715bb5704cSZixu Wang     }
725bb5704cSZixu Wang   ],
735bb5704cSZixu Wang   "symbols": [
745bb5704cSZixu Wang     {
75*28d79314SDaniel Grumberg       "accessLevel": "public",
765bb5704cSZixu Wang       "declarationFragments": [
775bb5704cSZixu Wang         {
785bb5704cSZixu Wang           "kind": "keyword",
795bb5704cSZixu Wang           "spelling": "struct"
805bb5704cSZixu Wang         },
815bb5704cSZixu Wang         {
825bb5704cSZixu Wang           "kind": "text",
835bb5704cSZixu Wang           "spelling": " "
845bb5704cSZixu Wang         },
855bb5704cSZixu Wang         {
865bb5704cSZixu Wang           "kind": "identifier",
875bb5704cSZixu Wang           "spelling": "Color"
885bb5704cSZixu Wang         }
895bb5704cSZixu Wang       ],
905bb5704cSZixu Wang       "docComment": {
915bb5704cSZixu Wang         "lines": [
925bb5704cSZixu Wang           {
935bb5704cSZixu Wang             "range": {
945bb5704cSZixu Wang               "end": {
955bb5704cSZixu Wang                 "character": 18,
965bb5704cSZixu Wang                 "line": 1
975bb5704cSZixu Wang               },
985bb5704cSZixu Wang               "start": {
995bb5704cSZixu Wang                 "character": 5,
1005bb5704cSZixu Wang                 "line": 1
1015bb5704cSZixu Wang               }
1025bb5704cSZixu Wang             },
1035bb5704cSZixu Wang             "text": "Color in RGBA"
1045bb5704cSZixu Wang           }
1055bb5704cSZixu Wang         ]
1065bb5704cSZixu Wang       },
1075bb5704cSZixu Wang       "identifier": {
1085bb5704cSZixu Wang         "interfaceLanguage": "c",
1095bb5704cSZixu Wang         "precise": "c:@S@Color"
1105bb5704cSZixu Wang       },
1115bb5704cSZixu Wang       "kind": {
1125bb5704cSZixu Wang         "displayName": "Structure",
1135bb5704cSZixu Wang         "identifier": "c.struct"
1145bb5704cSZixu Wang       },
1155bb5704cSZixu Wang       "location": {
116*28d79314SDaniel Grumberg         "position": {
1175bb5704cSZixu Wang           "character": 8,
118*28d79314SDaniel Grumberg           "line": 2
119*28d79314SDaniel Grumberg         },
1205bb5704cSZixu Wang         "uri": "file://INPUT_DIR/input.h"
1215bb5704cSZixu Wang       },
1225bb5704cSZixu Wang       "names": {
1235bb5704cSZixu Wang         "subHeading": [
1245bb5704cSZixu Wang           {
1255bb5704cSZixu Wang             "kind": "identifier",
1265bb5704cSZixu Wang             "spelling": "Color"
1275bb5704cSZixu Wang           }
1285bb5704cSZixu Wang         ],
1295bb5704cSZixu Wang         "title": "Color"
130*28d79314SDaniel Grumberg       },
131*28d79314SDaniel Grumberg       "pathComponents": [
132*28d79314SDaniel Grumberg         "Color"
133*28d79314SDaniel Grumberg       ]
1345bb5704cSZixu Wang     },
1355bb5704cSZixu Wang     {
136*28d79314SDaniel Grumberg       "accessLevel": "public",
1375bb5704cSZixu Wang       "declarationFragments": [
1385bb5704cSZixu Wang         {
1395bb5704cSZixu Wang           "kind": "typeIdentifier",
1405bb5704cSZixu Wang           "preciseIdentifier": "c:i",
1415bb5704cSZixu Wang           "spelling": "unsigned int"
1425bb5704cSZixu Wang         },
1435bb5704cSZixu Wang         {
1445bb5704cSZixu Wang           "kind": "text",
1455bb5704cSZixu Wang           "spelling": " "
1465bb5704cSZixu Wang         },
1475bb5704cSZixu Wang         {
1485bb5704cSZixu Wang           "kind": "identifier",
1495bb5704cSZixu Wang           "spelling": "Red"
1505bb5704cSZixu Wang         }
1515bb5704cSZixu Wang       ],
1525bb5704cSZixu Wang       "identifier": {
1535bb5704cSZixu Wang         "interfaceLanguage": "c",
1545bb5704cSZixu Wang         "precise": "c:@S@Color@FI@Red"
1555bb5704cSZixu Wang       },
1565bb5704cSZixu Wang       "kind": {
1575bb5704cSZixu Wang         "displayName": "Instance Property",
1585bb5704cSZixu Wang         "identifier": "c.property"
1595bb5704cSZixu Wang       },
1605bb5704cSZixu Wang       "location": {
161*28d79314SDaniel Grumberg         "position": {
1625bb5704cSZixu Wang           "character": 12,
163*28d79314SDaniel Grumberg           "line": 3
164*28d79314SDaniel Grumberg         },
1655bb5704cSZixu Wang         "uri": "file://INPUT_DIR/input.h"
1665bb5704cSZixu Wang       },
1675bb5704cSZixu Wang       "names": {
1685bb5704cSZixu Wang         "subHeading": [
1695bb5704cSZixu Wang           {
1705bb5704cSZixu Wang             "kind": "identifier",
1715bb5704cSZixu Wang             "spelling": "Red"
1725bb5704cSZixu Wang           }
1735bb5704cSZixu Wang         ],
1745bb5704cSZixu Wang         "title": "Red"
175*28d79314SDaniel Grumberg       },
176*28d79314SDaniel Grumberg       "pathComponents": [
177*28d79314SDaniel Grumberg         "Color",
178*28d79314SDaniel Grumberg         "Red"
179*28d79314SDaniel Grumberg       ]
1805bb5704cSZixu Wang     },
1815bb5704cSZixu Wang     {
182*28d79314SDaniel Grumberg       "accessLevel": "public",
1835bb5704cSZixu Wang       "declarationFragments": [
1845bb5704cSZixu Wang         {
1855bb5704cSZixu Wang           "kind": "typeIdentifier",
1865bb5704cSZixu Wang           "preciseIdentifier": "c:i",
1875bb5704cSZixu Wang           "spelling": "unsigned int"
1885bb5704cSZixu Wang         },
1895bb5704cSZixu Wang         {
1905bb5704cSZixu Wang           "kind": "text",
1915bb5704cSZixu Wang           "spelling": " "
1925bb5704cSZixu Wang         },
1935bb5704cSZixu Wang         {
1945bb5704cSZixu Wang           "kind": "identifier",
1955bb5704cSZixu Wang           "spelling": "Green"
1965bb5704cSZixu Wang         }
1975bb5704cSZixu Wang       ],
1985bb5704cSZixu Wang       "identifier": {
1995bb5704cSZixu Wang         "interfaceLanguage": "c",
2005bb5704cSZixu Wang         "precise": "c:@S@Color@FI@Green"
2015bb5704cSZixu Wang       },
2025bb5704cSZixu Wang       "kind": {
2035bb5704cSZixu Wang         "displayName": "Instance Property",
2045bb5704cSZixu Wang         "identifier": "c.property"
2055bb5704cSZixu Wang       },
2065bb5704cSZixu Wang       "location": {
207*28d79314SDaniel Grumberg         "position": {
2085bb5704cSZixu Wang           "character": 12,
209*28d79314SDaniel Grumberg           "line": 4
210*28d79314SDaniel Grumberg         },
2115bb5704cSZixu Wang         "uri": "file://INPUT_DIR/input.h"
2125bb5704cSZixu Wang       },
2135bb5704cSZixu Wang       "names": {
2145bb5704cSZixu Wang         "subHeading": [
2155bb5704cSZixu Wang           {
2165bb5704cSZixu Wang             "kind": "identifier",
2175bb5704cSZixu Wang             "spelling": "Green"
2185bb5704cSZixu Wang           }
2195bb5704cSZixu Wang         ],
2205bb5704cSZixu Wang         "title": "Green"
221*28d79314SDaniel Grumberg       },
222*28d79314SDaniel Grumberg       "pathComponents": [
223*28d79314SDaniel Grumberg         "Color",
224*28d79314SDaniel Grumberg         "Green"
225*28d79314SDaniel Grumberg       ]
2265bb5704cSZixu Wang     },
2275bb5704cSZixu Wang     {
228*28d79314SDaniel Grumberg       "accessLevel": "public",
2295bb5704cSZixu Wang       "declarationFragments": [
2305bb5704cSZixu Wang         {
2315bb5704cSZixu Wang           "kind": "typeIdentifier",
2325bb5704cSZixu Wang           "preciseIdentifier": "c:i",
2335bb5704cSZixu Wang           "spelling": "unsigned int"
2345bb5704cSZixu Wang         },
2355bb5704cSZixu Wang         {
2365bb5704cSZixu Wang           "kind": "text",
2375bb5704cSZixu Wang           "spelling": " "
2385bb5704cSZixu Wang         },
2395bb5704cSZixu Wang         {
2405bb5704cSZixu Wang           "kind": "identifier",
2415bb5704cSZixu Wang           "spelling": "Blue"
2425bb5704cSZixu Wang         }
2435bb5704cSZixu Wang       ],
2445bb5704cSZixu Wang       "identifier": {
2455bb5704cSZixu Wang         "interfaceLanguage": "c",
2465bb5704cSZixu Wang         "precise": "c:@S@Color@FI@Blue"
2475bb5704cSZixu Wang       },
2485bb5704cSZixu Wang       "kind": {
2495bb5704cSZixu Wang         "displayName": "Instance Property",
2505bb5704cSZixu Wang         "identifier": "c.property"
2515bb5704cSZixu Wang       },
2525bb5704cSZixu Wang       "location": {
253*28d79314SDaniel Grumberg         "position": {
2545bb5704cSZixu Wang           "character": 12,
255*28d79314SDaniel Grumberg           "line": 5
256*28d79314SDaniel Grumberg         },
2575bb5704cSZixu Wang         "uri": "file://INPUT_DIR/input.h"
2585bb5704cSZixu Wang       },
2595bb5704cSZixu Wang       "names": {
2605bb5704cSZixu Wang         "subHeading": [
2615bb5704cSZixu Wang           {
2625bb5704cSZixu Wang             "kind": "identifier",
2635bb5704cSZixu Wang             "spelling": "Blue"
2645bb5704cSZixu Wang           }
2655bb5704cSZixu Wang         ],
2665bb5704cSZixu Wang         "title": "Blue"
267*28d79314SDaniel Grumberg       },
268*28d79314SDaniel Grumberg       "pathComponents": [
269*28d79314SDaniel Grumberg         "Color",
270*28d79314SDaniel Grumberg         "Blue"
271*28d79314SDaniel Grumberg       ]
2725bb5704cSZixu Wang     },
2735bb5704cSZixu Wang     {
274*28d79314SDaniel Grumberg       "accessLevel": "public",
2755bb5704cSZixu Wang       "declarationFragments": [
2765bb5704cSZixu Wang         {
2775bb5704cSZixu Wang           "kind": "typeIdentifier",
2785bb5704cSZixu Wang           "preciseIdentifier": "c:i",
2795bb5704cSZixu Wang           "spelling": "unsigned int"
2805bb5704cSZixu Wang         },
2815bb5704cSZixu Wang         {
2825bb5704cSZixu Wang           "kind": "text",
2835bb5704cSZixu Wang           "spelling": " "
2845bb5704cSZixu Wang         },
2855bb5704cSZixu Wang         {
2865bb5704cSZixu Wang           "kind": "identifier",
2875bb5704cSZixu Wang           "spelling": "Alpha"
2885bb5704cSZixu Wang         }
2895bb5704cSZixu Wang       ],
2905bb5704cSZixu Wang       "docComment": {
2915bb5704cSZixu Wang         "lines": [
2925bb5704cSZixu Wang           {
2935bb5704cSZixu Wang             "range": {
2945bb5704cSZixu Wang               "end": {
2955bb5704cSZixu Wang                 "character": 37,
2965bb5704cSZixu Wang                 "line": 6
2975bb5704cSZixu Wang               },
2985bb5704cSZixu Wang               "start": {
2995bb5704cSZixu Wang                 "character": 7,
3005bb5704cSZixu Wang                 "line": 6
3015bb5704cSZixu Wang               }
3025bb5704cSZixu Wang             },
3035bb5704cSZixu Wang             "text": "Alpha channel for transparency"
3045bb5704cSZixu Wang           }
3055bb5704cSZixu Wang         ]
3065bb5704cSZixu Wang       },
3075bb5704cSZixu Wang       "identifier": {
3085bb5704cSZixu Wang         "interfaceLanguage": "c",
3095bb5704cSZixu Wang         "precise": "c:@S@Color@FI@Alpha"
3105bb5704cSZixu Wang       },
3115bb5704cSZixu Wang       "kind": {
3125bb5704cSZixu Wang         "displayName": "Instance Property",
3135bb5704cSZixu Wang         "identifier": "c.property"
3145bb5704cSZixu Wang       },
3155bb5704cSZixu Wang       "location": {
316*28d79314SDaniel Grumberg         "position": {
3175bb5704cSZixu Wang           "character": 12,
318*28d79314SDaniel Grumberg           "line": 7
319*28d79314SDaniel Grumberg         },
3205bb5704cSZixu Wang         "uri": "file://INPUT_DIR/input.h"
3215bb5704cSZixu Wang       },
3225bb5704cSZixu Wang       "names": {
3235bb5704cSZixu Wang         "subHeading": [
3245bb5704cSZixu Wang           {
3255bb5704cSZixu Wang             "kind": "identifier",
3265bb5704cSZixu Wang             "spelling": "Alpha"
3275bb5704cSZixu Wang           }
3285bb5704cSZixu Wang         ],
3295bb5704cSZixu Wang         "title": "Alpha"
330*28d79314SDaniel Grumberg       },
331*28d79314SDaniel Grumberg       "pathComponents": [
332*28d79314SDaniel Grumberg         "Color",
333*28d79314SDaniel Grumberg         "Alpha"
334*28d79314SDaniel Grumberg       ]
3355bb5704cSZixu Wang     }
3365bb5704cSZixu Wang   ]
3375bb5704cSZixu Wang }
338