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 T> class Foo {}; 157ba37f4eSErick Velez 167ba37f4eSErick Velez template<> class Foo<int> {}; 177ba37f4eSErick Velez 187ba37f4eSErick Velez /// 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": "T" 697ba37f4eSErick Velez }, 707ba37f4eSErick Velez { 717ba37f4eSErick Velez "kind": "text", 727ba37f4eSErick Velez "spelling": "> " 737ba37f4eSErick Velez }, 747ba37f4eSErick Velez { 757ba37f4eSErick Velez "kind": "keyword", 767ba37f4eSErick Velez "spelling": "class" 777ba37f4eSErick Velez }, 787ba37f4eSErick Velez { 797ba37f4eSErick Velez "kind": "text", 807ba37f4eSErick Velez "spelling": " " 817ba37f4eSErick Velez }, 827ba37f4eSErick Velez { 837ba37f4eSErick Velez "kind": "identifier", 847ba37f4eSErick Velez "spelling": "Foo" 857ba37f4eSErick Velez }, 867ba37f4eSErick Velez { 877ba37f4eSErick Velez "kind": "text", 887ba37f4eSErick Velez "spelling": ";" 897ba37f4eSErick Velez } 907ba37f4eSErick Velez ], 917ba37f4eSErick Velez "identifier": { 927ba37f4eSErick Velez "interfaceLanguage": "c++", 937ba37f4eSErick Velez "precise": "c:@ST>1#T@Foo" 947ba37f4eSErick Velez }, 957ba37f4eSErick Velez "kind": { 967ba37f4eSErick Velez "displayName": "Class", 977ba37f4eSErick Velez "identifier": "c++.class" 987ba37f4eSErick Velez }, 997ba37f4eSErick Velez "location": { 1007ba37f4eSErick Velez "position": { 10163537872SQuietMisdreavus "character": 27, 10263537872SQuietMisdreavus "line": 0 1037ba37f4eSErick Velez }, 1047ba37f4eSErick Velez "uri": "file://INPUT_DIR/input.h" 1057ba37f4eSErick Velez }, 1067ba37f4eSErick Velez "names": { 1077ba37f4eSErick Velez "navigator": [ 1087ba37f4eSErick Velez { 1097ba37f4eSErick Velez "kind": "identifier", 1107ba37f4eSErick Velez "spelling": "Foo" 1117ba37f4eSErick Velez } 1127ba37f4eSErick Velez ], 1137ba37f4eSErick Velez "subHeading": [ 1147ba37f4eSErick Velez { 1157ba37f4eSErick Velez "kind": "identifier", 1167ba37f4eSErick Velez "spelling": "Foo" 1177ba37f4eSErick Velez } 1187ba37f4eSErick Velez ], 1197ba37f4eSErick Velez "title": "Foo" 1207ba37f4eSErick Velez }, 1217ba37f4eSErick Velez "pathComponents": [ 1227ba37f4eSErick Velez "Foo" 1237ba37f4eSErick Velez ], 1247ba37f4eSErick Velez "swiftGenerics": { 1257ba37f4eSErick Velez "parameters": [ 1267ba37f4eSErick Velez { 1277ba37f4eSErick Velez "depth": 0, 1287ba37f4eSErick Velez "index": 0, 1297ba37f4eSErick Velez "name": "T" 1307ba37f4eSErick Velez } 1317ba37f4eSErick Velez ] 1327ba37f4eSErick Velez } 1337ba37f4eSErick Velez }, 1347ba37f4eSErick Velez { 1357ba37f4eSErick Velez "accessLevel": "public", 1367ba37f4eSErick Velez "declarationFragments": [ 1377ba37f4eSErick Velez { 1387ba37f4eSErick Velez "kind": "keyword", 1397ba37f4eSErick Velez "spelling": "template" 1407ba37f4eSErick Velez }, 1417ba37f4eSErick Velez { 1427ba37f4eSErick Velez "kind": "text", 1437ba37f4eSErick Velez "spelling": " <> " 1447ba37f4eSErick Velez }, 1457ba37f4eSErick Velez { 1467ba37f4eSErick Velez "kind": "keyword", 1477ba37f4eSErick Velez "spelling": "class" 1487ba37f4eSErick Velez }, 1497ba37f4eSErick Velez { 1507ba37f4eSErick Velez "kind": "text", 1517ba37f4eSErick Velez "spelling": " " 1527ba37f4eSErick Velez }, 1537ba37f4eSErick Velez { 1547ba37f4eSErick Velez "kind": "identifier", 1557ba37f4eSErick Velez "spelling": "Foo" 1567ba37f4eSErick Velez }, 1577ba37f4eSErick Velez { 1587ba37f4eSErick Velez "kind": "text", 1597ba37f4eSErick Velez "spelling": "<" 1607ba37f4eSErick Velez }, 1617ba37f4eSErick Velez { 1627ba37f4eSErick Velez "kind": "typeIdentifier", 1637ba37f4eSErick Velez "preciseIdentifier": "c:I", 1647ba37f4eSErick Velez "spelling": "int" 1657ba37f4eSErick Velez }, 1667ba37f4eSErick Velez { 1677ba37f4eSErick Velez "kind": "text", 1687ba37f4eSErick Velez "spelling": ">;" 1697ba37f4eSErick Velez } 1707ba37f4eSErick Velez ], 1717ba37f4eSErick Velez "identifier": { 1727ba37f4eSErick Velez "interfaceLanguage": "c++", 1737ba37f4eSErick Velez "precise": "c:@S@Foo>#I" 1747ba37f4eSErick Velez }, 1757ba37f4eSErick Velez "kind": { 1767ba37f4eSErick Velez "displayName": "Class", 1777ba37f4eSErick Velez "identifier": "c++.class" 1787ba37f4eSErick Velez }, 1797ba37f4eSErick Velez "location": { 1807ba37f4eSErick Velez "position": { 18163537872SQuietMisdreavus "character": 17, 18263537872SQuietMisdreavus "line": 2 1837ba37f4eSErick Velez }, 1847ba37f4eSErick Velez "uri": "file://INPUT_DIR/input.h" 1857ba37f4eSErick Velez }, 1867ba37f4eSErick Velez "names": { 1877ba37f4eSErick Velez "navigator": [ 1887ba37f4eSErick Velez { 1897ba37f4eSErick Velez "kind": "identifier", 1907ba37f4eSErick Velez "spelling": "Foo" 1917ba37f4eSErick Velez } 1927ba37f4eSErick Velez ], 1937ba37f4eSErick Velez "subHeading": [ 1947ba37f4eSErick Velez { 1957ba37f4eSErick Velez "kind": "identifier", 1967ba37f4eSErick Velez "spelling": "Foo" 1977ba37f4eSErick Velez } 1987ba37f4eSErick Velez ], 1997ba37f4eSErick Velez "title": "Foo" 2007ba37f4eSErick Velez }, 2017ba37f4eSErick Velez "pathComponents": [ 2027ba37f4eSErick Velez "Foo" 2037ba37f4eSErick Velez ] 2047ba37f4eSErick Velez } 2057ba37f4eSErick Velez ] 2067ba37f4eSErick Velez } 207