1d8e9c5d9SErick Velez // RUN: rm -rf %t 2d8e9c5d9SErick Velez // RUN: split-file %s %t 3d8e9c5d9SErick Velez // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ 4d8e9c5d9SErick 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 \ 6d8e9c5d9SErick Velez // RUN: -x c++-header %t/input.h -o %t/output.json -verify 7d8e9c5d9SErick Velez 8d8e9c5d9SErick Velez // Generator version is not consistent across test runs, normalize it. 9d8e9c5d9SErick Velez // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ 10d8e9c5d9SErick Velez // RUN: %t/output.json >> %t/output-normalized.json 11d8e9c5d9SErick Velez // RUN: diff %t/reference.output.json %t/output-normalized.json 12d8e9c5d9SErick Velez 13d8e9c5d9SErick Velez //--- input.h 14d8e9c5d9SErick Velez class Foo { 15d8e9c5d9SErick Velez template<typename T> void Bar(T Fizz); 16d8e9c5d9SErick Velez }; 17d8e9c5d9SErick Velez 18d8e9c5d9SErick Velez /// expected-no-diagnostics 19d8e9c5d9SErick Velez 20d8e9c5d9SErick Velez //--- reference.output.json.in 21d8e9c5d9SErick Velez { 22d8e9c5d9SErick Velez "metadata": { 23d8e9c5d9SErick Velez "formatVersion": { 24d8e9c5d9SErick Velez "major": 0, 25d8e9c5d9SErick Velez "minor": 5, 26d8e9c5d9SErick Velez "patch": 3 27d8e9c5d9SErick Velez }, 28d8e9c5d9SErick Velez "generator": "?" 29d8e9c5d9SErick Velez }, 30d8e9c5d9SErick Velez "module": { 31d8e9c5d9SErick Velez "name": "", 32d8e9c5d9SErick Velez "platform": { 33d8e9c5d9SErick Velez "architecture": "arm64", 34d8e9c5d9SErick Velez "operatingSystem": { 35d8e9c5d9SErick Velez "minimumVersion": { 36d8e9c5d9SErick Velez "major": 11, 37d8e9c5d9SErick Velez "minor": 0, 38d8e9c5d9SErick Velez "patch": 0 39d8e9c5d9SErick Velez }, 40d8e9c5d9SErick Velez "name": "macosx" 41d8e9c5d9SErick Velez }, 42d8e9c5d9SErick Velez "vendor": "apple" 43d8e9c5d9SErick Velez } 44d8e9c5d9SErick Velez }, 45d8e9c5d9SErick Velez "relationships": [ 46d8e9c5d9SErick Velez { 47d8e9c5d9SErick Velez "kind": "memberOf", 48d8e9c5d9SErick Velez "source": "c:@S@Foo@FT@>1#TBar#t0.0#v#", 49d8e9c5d9SErick Velez "target": "c:@S@Foo", 50d8e9c5d9SErick Velez "targetFallback": "Foo" 51d8e9c5d9SErick Velez } 52d8e9c5d9SErick Velez ], 53d8e9c5d9SErick Velez "symbols": [ 54d8e9c5d9SErick Velez { 55d8e9c5d9SErick Velez "accessLevel": "public", 56d8e9c5d9SErick Velez "declarationFragments": [ 57d8e9c5d9SErick Velez { 58d8e9c5d9SErick Velez "kind": "keyword", 59d8e9c5d9SErick Velez "spelling": "class" 60d8e9c5d9SErick Velez }, 61d8e9c5d9SErick Velez { 62d8e9c5d9SErick Velez "kind": "text", 63d8e9c5d9SErick Velez "spelling": " " 64d8e9c5d9SErick Velez }, 65d8e9c5d9SErick Velez { 66d8e9c5d9SErick Velez "kind": "identifier", 67d8e9c5d9SErick Velez "spelling": "Foo" 68d8e9c5d9SErick Velez }, 69d8e9c5d9SErick Velez { 70d8e9c5d9SErick Velez "kind": "text", 71d8e9c5d9SErick Velez "spelling": ";" 72d8e9c5d9SErick Velez } 73d8e9c5d9SErick Velez ], 74d8e9c5d9SErick Velez "identifier": { 75d8e9c5d9SErick Velez "interfaceLanguage": "c++", 76d8e9c5d9SErick Velez "precise": "c:@S@Foo" 77d8e9c5d9SErick Velez }, 78d8e9c5d9SErick Velez "kind": { 79d8e9c5d9SErick Velez "displayName": "Class", 80d8e9c5d9SErick Velez "identifier": "c++.class" 81d8e9c5d9SErick Velez }, 82d8e9c5d9SErick Velez "location": { 83d8e9c5d9SErick Velez "position": { 8463537872SQuietMisdreavus "character": 6, 8563537872SQuietMisdreavus "line": 0 86d8e9c5d9SErick Velez }, 87d8e9c5d9SErick Velez "uri": "file://INPUT_DIR/input.h" 88d8e9c5d9SErick Velez }, 89d8e9c5d9SErick Velez "names": { 90d8e9c5d9SErick Velez "navigator": [ 91d8e9c5d9SErick Velez { 92d8e9c5d9SErick Velez "kind": "identifier", 93d8e9c5d9SErick Velez "spelling": "Foo" 94d8e9c5d9SErick Velez } 95d8e9c5d9SErick Velez ], 96d8e9c5d9SErick Velez "subHeading": [ 97d8e9c5d9SErick Velez { 98d8e9c5d9SErick Velez "kind": "identifier", 99d8e9c5d9SErick Velez "spelling": "Foo" 100d8e9c5d9SErick Velez } 101d8e9c5d9SErick Velez ], 102d8e9c5d9SErick Velez "title": "Foo" 103d8e9c5d9SErick Velez }, 104d8e9c5d9SErick Velez "pathComponents": [ 105d8e9c5d9SErick Velez "Foo" 106d8e9c5d9SErick Velez ] 107d8e9c5d9SErick Velez }, 108d8e9c5d9SErick Velez { 109d8e9c5d9SErick Velez "accessLevel": "private", 110d8e9c5d9SErick Velez "declarationFragments": [ 111d8e9c5d9SErick Velez { 112d8e9c5d9SErick Velez "kind": "keyword", 113d8e9c5d9SErick Velez "spelling": "template" 114d8e9c5d9SErick Velez }, 115d8e9c5d9SErick Velez { 116d8e9c5d9SErick Velez "kind": "text", 117d8e9c5d9SErick Velez "spelling": " <" 118d8e9c5d9SErick Velez }, 119d8e9c5d9SErick Velez { 120d8e9c5d9SErick Velez "kind": "keyword", 121d8e9c5d9SErick Velez "spelling": "typename" 122d8e9c5d9SErick Velez }, 123d8e9c5d9SErick Velez { 124d8e9c5d9SErick Velez "kind": "text", 125d8e9c5d9SErick Velez "spelling": " " 126d8e9c5d9SErick Velez }, 127d8e9c5d9SErick Velez { 128d8e9c5d9SErick Velez "kind": "genericParameter", 129d8e9c5d9SErick Velez "spelling": "T" 130d8e9c5d9SErick Velez }, 131d8e9c5d9SErick Velez { 132d8e9c5d9SErick Velez "kind": "text", 133d8e9c5d9SErick Velez "spelling": "> " 134d8e9c5d9SErick Velez }, 135d8e9c5d9SErick Velez { 136d8e9c5d9SErick Velez "kind": "typeIdentifier", 137d8e9c5d9SErick Velez "preciseIdentifier": "c:v", 138d8e9c5d9SErick Velez "spelling": "void" 139d8e9c5d9SErick Velez }, 140d8e9c5d9SErick Velez { 141d8e9c5d9SErick Velez "kind": "text", 142d8e9c5d9SErick Velez "spelling": " " 143d8e9c5d9SErick Velez }, 144d8e9c5d9SErick Velez { 145d8e9c5d9SErick Velez "kind": "identifier", 146d8e9c5d9SErick Velez "spelling": "Bar" 147d8e9c5d9SErick Velez }, 148d8e9c5d9SErick Velez { 149d8e9c5d9SErick Velez "kind": "text", 150d8e9c5d9SErick Velez "spelling": "(" 151d8e9c5d9SErick Velez }, 152d8e9c5d9SErick Velez { 153d8e9c5d9SErick Velez "kind": "typeIdentifier", 154d8e9c5d9SErick Velez "preciseIdentifier": "c:t0.0", 155d8e9c5d9SErick Velez "spelling": "T" 156d8e9c5d9SErick Velez }, 157d8e9c5d9SErick Velez { 158d8e9c5d9SErick Velez "kind": "text", 159d8e9c5d9SErick Velez "spelling": " " 160d8e9c5d9SErick Velez }, 161d8e9c5d9SErick Velez { 162d8e9c5d9SErick Velez "kind": "internalParam", 163d8e9c5d9SErick Velez "spelling": "Fizz" 164d8e9c5d9SErick Velez }, 165d8e9c5d9SErick Velez { 166d8e9c5d9SErick Velez "kind": "text", 167d8e9c5d9SErick Velez "spelling": ");" 168d8e9c5d9SErick Velez } 169d8e9c5d9SErick Velez ], 170d8e9c5d9SErick Velez "functionSignature": { 171d8e9c5d9SErick Velez "parameters": [ 172d8e9c5d9SErick Velez { 173d8e9c5d9SErick Velez "declarationFragments": [ 174d8e9c5d9SErick Velez { 175d8e9c5d9SErick Velez "kind": "typeIdentifier", 176d8e9c5d9SErick Velez "preciseIdentifier": "c:t0.0", 177d8e9c5d9SErick Velez "spelling": "T" 178d8e9c5d9SErick Velez }, 179d8e9c5d9SErick Velez { 180d8e9c5d9SErick Velez "kind": "text", 181d8e9c5d9SErick Velez "spelling": " " 182d8e9c5d9SErick Velez }, 183d8e9c5d9SErick Velez { 184d8e9c5d9SErick Velez "kind": "internalParam", 185d8e9c5d9SErick Velez "spelling": "Fizz" 186d8e9c5d9SErick Velez } 187d8e9c5d9SErick Velez ], 188d8e9c5d9SErick Velez "name": "Fizz" 189d8e9c5d9SErick Velez } 190d8e9c5d9SErick Velez ], 191d8e9c5d9SErick Velez "returns": [ 192d8e9c5d9SErick Velez { 193d8e9c5d9SErick Velez "kind": "typeIdentifier", 194d8e9c5d9SErick Velez "preciseIdentifier": "c:v", 195d8e9c5d9SErick Velez "spelling": "void" 196d8e9c5d9SErick Velez } 197d8e9c5d9SErick Velez ] 198d8e9c5d9SErick Velez }, 199d8e9c5d9SErick Velez "identifier": { 200d8e9c5d9SErick Velez "interfaceLanguage": "c++", 201d8e9c5d9SErick Velez "precise": "c:@S@Foo@FT@>1#TBar#t0.0#v#" 202d8e9c5d9SErick Velez }, 203d8e9c5d9SErick Velez "kind": { 204d8e9c5d9SErick Velez "displayName": "Method Template", 205d8e9c5d9SErick Velez "identifier": "c++.method" 206d8e9c5d9SErick Velez }, 207d8e9c5d9SErick Velez "location": { 208d8e9c5d9SErick Velez "position": { 20963537872SQuietMisdreavus "character": 28, 21063537872SQuietMisdreavus "line": 1 211d8e9c5d9SErick Velez }, 212d8e9c5d9SErick Velez "uri": "file://INPUT_DIR/input.h" 213d8e9c5d9SErick Velez }, 214d8e9c5d9SErick Velez "names": { 215d8e9c5d9SErick Velez "navigator": [ 216d8e9c5d9SErick Velez { 217d8e9c5d9SErick Velez "kind": "identifier", 218d8e9c5d9SErick Velez "spelling": "Bar" 219d8e9c5d9SErick Velez } 220d8e9c5d9SErick Velez ], 221d8e9c5d9SErick Velez "subHeading": [ 222d8e9c5d9SErick Velez { 223d8e9c5d9SErick Velez "kind": "identifier", 224d8e9c5d9SErick Velez "spelling": "Bar" 225d8e9c5d9SErick Velez } 226d8e9c5d9SErick Velez ], 227d8e9c5d9SErick Velez "title": "Bar" 228d8e9c5d9SErick Velez }, 229d8e9c5d9SErick Velez "pathComponents": [ 230d8e9c5d9SErick Velez "Foo", 231d8e9c5d9SErick Velez "Bar" 232d8e9c5d9SErick Velez ], 233d8e9c5d9SErick Velez "swiftGenerics": { 234d8e9c5d9SErick Velez "parameters": [ 235d8e9c5d9SErick Velez { 236d8e9c5d9SErick Velez "depth": 0, 237d8e9c5d9SErick Velez "index": 0, 238d8e9c5d9SErick Velez "name": "T" 239d8e9c5d9SErick Velez } 240d8e9c5d9SErick Velez ] 241d8e9c5d9SErick Velez } 242d8e9c5d9SErick Velez } 243d8e9c5d9SErick Velez ] 244d8e9c5d9SErick Velez } 245