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