xref: /llvm-project/clang/test/ExtractAPI/class_template_partial_spec.cpp (revision 7a6747939218efbe3b1d2cc0f896dfa97c0ff40f)
17ba37f4eSErick Velez // RUN: rm -rf %t
27ba37f4eSErick Velez // RUN: split-file %s %t
37ba37f4eSErick Velez // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \
47ba37f4eSErick Velez // RUN: %t/reference.output.json.in >> %t/reference.output.json
5*e05c1b46SDaniel Grumberg // RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \
67ba37f4eSErick Velez // RUN:   -x c++-header %t/input.h -o %t/output.json -verify
77ba37f4eSErick Velez 
87ba37f4eSErick Velez // Generator version is not consistent across test runs, normalize it.
97ba37f4eSErick Velez // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
107ba37f4eSErick Velez // RUN: %t/output.json >> %t/output-normalized.json
117ba37f4eSErick Velez // RUN: diff %t/reference.output.json %t/output-normalized.json
127ba37f4eSErick Velez 
137ba37f4eSErick Velez //--- input.h
147ba37f4eSErick Velez template<typename X, typename Y> class Foo {};
157ba37f4eSErick Velez 
167ba37f4eSErick Velez template<typename Z> class Foo<Z, int> {};
177ba37f4eSErick Velez 
18*e05c1b46SDaniel Grumberg // expected-no-diagnostics
197ba37f4eSErick Velez 
207ba37f4eSErick Velez //--- reference.output.json.in
217ba37f4eSErick Velez {
227ba37f4eSErick Velez   "metadata": {
237ba37f4eSErick Velez     "formatVersion": {
247ba37f4eSErick Velez       "major": 0,
257ba37f4eSErick Velez       "minor": 5,
267ba37f4eSErick Velez       "patch": 3
277ba37f4eSErick Velez     },
287ba37f4eSErick Velez     "generator": "?"
297ba37f4eSErick Velez   },
307ba37f4eSErick Velez   "module": {
317ba37f4eSErick Velez     "name": "",
327ba37f4eSErick Velez     "platform": {
337ba37f4eSErick Velez       "architecture": "arm64",
347ba37f4eSErick Velez       "operatingSystem": {
357ba37f4eSErick Velez         "minimumVersion": {
367ba37f4eSErick Velez           "major": 11,
377ba37f4eSErick Velez           "minor": 0,
387ba37f4eSErick Velez           "patch": 0
397ba37f4eSErick Velez         },
407ba37f4eSErick Velez         "name": "macosx"
417ba37f4eSErick Velez       },
427ba37f4eSErick Velez       "vendor": "apple"
437ba37f4eSErick Velez     }
447ba37f4eSErick Velez   },
457ba37f4eSErick Velez   "relationships": [],
467ba37f4eSErick Velez   "symbols": [
477ba37f4eSErick Velez     {
487ba37f4eSErick Velez       "accessLevel": "public",
497ba37f4eSErick Velez       "declarationFragments": [
507ba37f4eSErick Velez         {
517ba37f4eSErick Velez           "kind": "keyword",
527ba37f4eSErick Velez           "spelling": "template"
537ba37f4eSErick Velez         },
547ba37f4eSErick Velez         {
557ba37f4eSErick Velez           "kind": "text",
567ba37f4eSErick Velez           "spelling": " <"
577ba37f4eSErick Velez         },
587ba37f4eSErick Velez         {
597ba37f4eSErick Velez           "kind": "keyword",
607ba37f4eSErick Velez           "spelling": "typename"
617ba37f4eSErick Velez         },
627ba37f4eSErick Velez         {
637ba37f4eSErick Velez           "kind": "text",
647ba37f4eSErick Velez           "spelling": " "
657ba37f4eSErick Velez         },
667ba37f4eSErick Velez         {
677ba37f4eSErick Velez           "kind": "genericParameter",
687ba37f4eSErick Velez           "spelling": "X"
697ba37f4eSErick Velez         },
707ba37f4eSErick Velez         {
717ba37f4eSErick Velez           "kind": "text",
727ba37f4eSErick Velez           "spelling": ", "
737ba37f4eSErick Velez         },
747ba37f4eSErick Velez         {
757ba37f4eSErick Velez           "kind": "keyword",
767ba37f4eSErick Velez           "spelling": "typename"
777ba37f4eSErick Velez         },
787ba37f4eSErick Velez         {
797ba37f4eSErick Velez           "kind": "text",
807ba37f4eSErick Velez           "spelling": " "
817ba37f4eSErick Velez         },
827ba37f4eSErick Velez         {
837ba37f4eSErick Velez           "kind": "genericParameter",
847ba37f4eSErick Velez           "spelling": "Y"
857ba37f4eSErick Velez         },
867ba37f4eSErick Velez         {
877ba37f4eSErick Velez           "kind": "text",
887ba37f4eSErick Velez           "spelling": "> "
897ba37f4eSErick Velez         },
907ba37f4eSErick Velez         {
917ba37f4eSErick Velez           "kind": "keyword",
927ba37f4eSErick Velez           "spelling": "class"
937ba37f4eSErick Velez         },
947ba37f4eSErick Velez         {
957ba37f4eSErick Velez           "kind": "text",
967ba37f4eSErick Velez           "spelling": " "
977ba37f4eSErick Velez         },
987ba37f4eSErick Velez         {
997ba37f4eSErick Velez           "kind": "identifier",
1007ba37f4eSErick Velez           "spelling": "Foo"
1017ba37f4eSErick Velez         },
1027ba37f4eSErick Velez         {
1037ba37f4eSErick Velez           "kind": "text",
1047ba37f4eSErick Velez           "spelling": ";"
1057ba37f4eSErick Velez         }
1067ba37f4eSErick Velez       ],
1077ba37f4eSErick Velez       "identifier": {
1087ba37f4eSErick Velez         "interfaceLanguage": "c++",
1097ba37f4eSErick Velez         "precise": "c:@ST>2#T#T@Foo"
1107ba37f4eSErick Velez       },
1117ba37f4eSErick Velez       "kind": {
1127ba37f4eSErick Velez         "displayName": "Class",
1137ba37f4eSErick Velez         "identifier": "c++.class"
1147ba37f4eSErick Velez       },
1157ba37f4eSErick Velez       "location": {
1167ba37f4eSErick Velez         "position": {
11763537872SQuietMisdreavus           "character": 39,
11863537872SQuietMisdreavus           "line": 0
1197ba37f4eSErick Velez         },
1207ba37f4eSErick Velez         "uri": "file://INPUT_DIR/input.h"
1217ba37f4eSErick Velez       },
1227ba37f4eSErick Velez       "names": {
1237ba37f4eSErick Velez         "navigator": [
1247ba37f4eSErick Velez           {
1257ba37f4eSErick Velez             "kind": "identifier",
1267ba37f4eSErick Velez             "spelling": "Foo"
1277ba37f4eSErick Velez           }
1287ba37f4eSErick Velez         ],
1297ba37f4eSErick Velez         "subHeading": [
1307ba37f4eSErick Velez           {
1317ba37f4eSErick Velez             "kind": "identifier",
1327ba37f4eSErick Velez             "spelling": "Foo"
1337ba37f4eSErick Velez           }
1347ba37f4eSErick Velez         ],
1357ba37f4eSErick Velez         "title": "Foo"
1367ba37f4eSErick Velez       },
1377ba37f4eSErick Velez       "pathComponents": [
1387ba37f4eSErick Velez         "Foo"
1397ba37f4eSErick Velez       ],
1407ba37f4eSErick Velez       "swiftGenerics": {
1417ba37f4eSErick Velez         "parameters": [
1427ba37f4eSErick Velez           {
1437ba37f4eSErick Velez             "depth": 0,
1447ba37f4eSErick Velez             "index": 0,
1457ba37f4eSErick Velez             "name": "X"
1467ba37f4eSErick Velez           },
1477ba37f4eSErick Velez           {
1487ba37f4eSErick Velez             "depth": 0,
1497ba37f4eSErick Velez             "index": 1,
1507ba37f4eSErick Velez             "name": "Y"
1517ba37f4eSErick Velez           }
1527ba37f4eSErick Velez         ]
1537ba37f4eSErick Velez       }
1547ba37f4eSErick Velez     },
1557ba37f4eSErick Velez     {
1567ba37f4eSErick Velez       "accessLevel": "public",
1577ba37f4eSErick Velez       "declarationFragments": [
1587ba37f4eSErick Velez         {
1597ba37f4eSErick Velez           "kind": "keyword",
1607ba37f4eSErick Velez           "spelling": "template"
1617ba37f4eSErick Velez         },
1627ba37f4eSErick Velez         {
1637ba37f4eSErick Velez           "kind": "text",
1647ba37f4eSErick Velez           "spelling": " <"
1657ba37f4eSErick Velez         },
1667ba37f4eSErick Velez         {
1677ba37f4eSErick Velez           "kind": "keyword",
1687ba37f4eSErick Velez           "spelling": "typename"
1697ba37f4eSErick Velez         },
1707ba37f4eSErick Velez         {
1717ba37f4eSErick Velez           "kind": "text",
1727ba37f4eSErick Velez           "spelling": " "
1737ba37f4eSErick Velez         },
1747ba37f4eSErick Velez         {
1757ba37f4eSErick Velez           "kind": "genericParameter",
1767ba37f4eSErick Velez           "spelling": "Z"
1777ba37f4eSErick Velez         },
1787ba37f4eSErick Velez         {
1797ba37f4eSErick Velez           "kind": "text",
1807ba37f4eSErick Velez           "spelling": "> "
1817ba37f4eSErick Velez         },
1827ba37f4eSErick Velez         {
1837ba37f4eSErick Velez           "kind": "keyword",
1847ba37f4eSErick Velez           "spelling": "class"
1857ba37f4eSErick Velez         },
1867ba37f4eSErick Velez         {
1877ba37f4eSErick Velez           "kind": "text",
1887ba37f4eSErick Velez           "spelling": " "
1897ba37f4eSErick Velez         },
1907ba37f4eSErick Velez         {
1917ba37f4eSErick Velez           "kind": "identifier",
1927ba37f4eSErick Velez           "spelling": "Foo"
1937ba37f4eSErick Velez         },
1947ba37f4eSErick Velez         {
1957ba37f4eSErick Velez           "kind": "text",
1967ba37f4eSErick Velez           "spelling": "<"
1977ba37f4eSErick Velez         },
1987ba37f4eSErick Velez         {
1997ba37f4eSErick Velez           "kind": "typeIdentifier",
2007ba37f4eSErick Velez           "preciseIdentifier": "c:t0.0",
2017ba37f4eSErick Velez           "spelling": "Z"
2027ba37f4eSErick Velez         },
2037ba37f4eSErick Velez         {
2047ba37f4eSErick Velez           "kind": "text",
2057ba37f4eSErick Velez           "spelling": ", "
2067ba37f4eSErick Velez         },
2077ba37f4eSErick Velez         {
2087ba37f4eSErick Velez           "kind": "typeIdentifier",
2097ba37f4eSErick Velez           "preciseIdentifier": "c:I",
2107ba37f4eSErick Velez           "spelling": "int"
2117ba37f4eSErick Velez         },
2127ba37f4eSErick Velez         {
2137ba37f4eSErick Velez           "kind": "text",
2147ba37f4eSErick Velez           "spelling": ">;"
2157ba37f4eSErick Velez         }
2167ba37f4eSErick Velez       ],
2177ba37f4eSErick Velez       "identifier": {
2187ba37f4eSErick Velez         "interfaceLanguage": "c++",
2197ba37f4eSErick Velez         "precise": "c:@SP>1#T@Foo>#t0.0#I"
2207ba37f4eSErick Velez       },
2217ba37f4eSErick Velez       "kind": {
2227ba37f4eSErick Velez         "displayName": "Class",
2237ba37f4eSErick Velez         "identifier": "c++.class"
2247ba37f4eSErick Velez       },
2257ba37f4eSErick Velez       "location": {
2267ba37f4eSErick Velez         "position": {
22763537872SQuietMisdreavus           "character": 27,
22863537872SQuietMisdreavus           "line": 2
2297ba37f4eSErick Velez         },
2307ba37f4eSErick Velez         "uri": "file://INPUT_DIR/input.h"
2317ba37f4eSErick Velez       },
2327ba37f4eSErick Velez       "names": {
2337ba37f4eSErick Velez         "navigator": [
2347ba37f4eSErick Velez           {
2357ba37f4eSErick Velez             "kind": "identifier",
2367ba37f4eSErick Velez             "spelling": "Foo"
2377ba37f4eSErick Velez           }
2387ba37f4eSErick Velez         ],
2397ba37f4eSErick Velez         "subHeading": [
2407ba37f4eSErick Velez           {
2417ba37f4eSErick Velez             "kind": "identifier",
2427ba37f4eSErick Velez             "spelling": "Foo"
2437ba37f4eSErick Velez           }
2447ba37f4eSErick Velez         ],
2457ba37f4eSErick Velez         "title": "Foo"
2467ba37f4eSErick Velez       },
2477ba37f4eSErick Velez       "pathComponents": [
2487ba37f4eSErick Velez         "Foo"
2497ba37f4eSErick Velez       ],
2507ba37f4eSErick Velez       "swiftGenerics": {
2517ba37f4eSErick Velez         "parameters": [
2527ba37f4eSErick Velez           {
2537ba37f4eSErick Velez             "depth": 0,
2547ba37f4eSErick Velez             "index": 0,
2557ba37f4eSErick Velez             "name": "Z"
2567ba37f4eSErick Velez           }
2577ba37f4eSErick Velez         ]
2587ba37f4eSErick Velez       }
2597ba37f4eSErick Velez     }
2607ba37f4eSErick Velez   ]
2617ba37f4eSErick Velez }
262